diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..876d9ed
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,38 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Launch",
+ "type": "node",
+ "request": "launch",
+ "program": "${workspaceRoot}/src/tests/dynamicsTests.ts",
+ "stopOnEntry": false,
+ "args": [],
+ "cwd": "${workspaceRoot}",
+ "preLaunchTask": null,
+ "runtimeExecutable": null,
+ "runtimeArgs": [
+ "--nolazy"
+ ],
+ "env": {
+ "NODE_ENV": "development"
+ },
+ "console":"integratedTerminal",
+ "sourceMaps": true,
+ "outFiles": [
+ "$(workspaceRoot)/bin/tests/dynamicsTests.js"
+ ]
+ },
+ {
+ "name": "Attach",
+ "type": "node",
+ "request": "attach",
+ "port": 5858,
+ "address": "localhost",
+ "restart": false,
+ "sourceMaps": false,
+ "localRoot": "${workspaceRoot}",
+ "remoteRoot": null
+ }
+ ]
+}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 0000000..2c099f5
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,15 @@
+{
+ // See https://go.microsoft.com/fwlink/?LinkId=733558
+ // for the documentation about the tasks.json format
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "type": "typescript",
+ "tsconfig": "tsconfig.json",
+ "problemMatcher": [
+ "$tsc"
+ ],
+ "group": "build"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/lib/amd/more-xrm.d.ts b/lib/amd/more-xrm.d.ts
index 3b5818c..6e9b01a 100644
--- a/lib/amd/more-xrm.d.ts
+++ b/lib/amd/more-xrm.d.ts
@@ -1,3 +1,4 @@
+///
declare module "Query/Query" {
export interface DataQuery {
Alias: any;
@@ -20,6 +21,7 @@ declare module "Query/Query" {
IsOuterJoin?: boolean;
}
export interface Query {
+ [key: string]: any;
alias(attributeName: string, alias: string): Query;
path(entityPath: string): Query;
select(...attributeNames: string[]): Query;
@@ -58,16 +60,31 @@ declare module "Query/QueryXml" {
}
declare module "Dynamics/DynamicsRequest" {
import { Query } from "Query/Query";
- export function dynamicsQuery(query: Query, maxRowCount?: number, headers?: any): Promise;
- export function dynamicsQueryUrl(dynamicsEntitySetUrl: string, query: Query, maxRowCount?: number, headers?: any): Promise;
- export function dynamicsRequest(dynamicsEntitySetUrl: string, headers?: any): Promise;
- export function dynamicsSave(entitySetName: string, data: any, id?: string, headers?: any): Promise;
+ export enum AuthenticationType {
+ Windows = 1,
+ OAuth = 2
+ }
+ export class ConnectionOptions {
+ authType: AuthenticationType;
+ username?: string;
+ password?: string;
+ domain?: string;
+ workstation?: string;
+ accessToken?: string;
+ serverUrl: string;
+ webApiVersion: string;
+ }
+ export function dynamicsQuery(connectionOptions: ConnectionOptions, query: Query, maxRowCount?: number, headers?: any): Promise;
+ export function dynamicsQueryUrl(connectionOptions: ConnectionOptions, dynamicsEntitySetUrl: string, query: Query, maxRowCount?: number, headers?: any): Promise;
+ export function dynamicsRequest(connectionOptions: ConnectionOptions, dynamicsEntitySetUrl: string, headers?: any): Promise;
+ export function dynamicsSave(connectionOptions: ConnectionOptions, entitySetName: string, data: any, id?: string, headers?: any): Promise;
export function formatDynamicsResponse(data: any): any;
}
declare module "Dynamics/DynamicsBatch" {
import { Query } from "Query/Query";
+ import { ConnectionOptions } from "Dynamics/DynamicsRequest";
export interface DynamicsBatch {
- execute(): Promise;
+ execute(): Promise;
request(query: Query, maxRowCount?: number): DynamicsBatch;
requestAll(queries: Query[]): DynamicsBatch;
requestAllUrls(urls: string[]): DynamicsBatch;
@@ -75,14 +92,15 @@ declare module "Dynamics/DynamicsBatch" {
createRelatedEntity(entitySetName: string, data: any, navigationPropertyName: string): void;
};
}
- export function dynamicsBatch(headers?: any): DynamicsBatch;
- export function dynamicsBatchRequest(...url: string[]): Promise;
- export function dynamicsBatchQuery(...query: Query[]): Promise;
+ export function dynamicsBatch(connectionOptions: ConnectionOptions, headers?: any): DynamicsBatch;
+ export function dynamicsBatchRequest(connectionOptions: ConnectionOptions, ...url: string[]): Promise;
+ export function dynamicsBatchQuery(connectionOptions: ConnectionOptions, ...query: Query[]): Promise;
}
declare module "Dynamics/Dynamics" {
import { Query } from "Query/Query";
import { DynamicsBatch } from "Dynamics/DynamicsBatch";
- export const WebApiVersion = "v9.1";
+ import { ConnectionOptions } from "Dynamics/DynamicsRequest";
+ export const DefaultWebApiVersion = "v9.1";
export const DefaultMaxRecords = 100;
export const DynamicsHeaders: {
'OData-MaxVersion': string;
@@ -99,7 +117,30 @@ declare module "Dynamics/Dynamics" {
query(entityLogicalName: string, entitySetName: string): Query;
save(entitySetName: string, data: any, id?: string): Promise;
}
- export default function dynamics(accessToken?: string): Dynamics;
+ export default function dynamics(connectionOptions?: ConnectionOptions): Dynamics;
+}
+declare module "Dynamics/Model/OrganizationMetadata" {
+ export interface OrganizationMetadata {
+ Id?: string;
+ UniqueName?: string;
+ UrlName?: string;
+ FriendlyName?: string;
+ State?: number;
+ Version?: string;
+ Uri?: string;
+ AppUri?: string;
+ LastUpdated?: Date;
+ }
+}
+declare module "Dynamics/DynamicsDiscovery" {
+ import { ConnectionOptions } from "Dynamics/DynamicsRequest";
+ import { OrganizationMetadata } from "Dynamics/Model/OrganizationMetadata";
+ export type OrganizationMetadata = OrganizationMetadata;
+ export const DefaultDiscoveryApiVersion = "v9.1";
+ export default function dynamicsDiscovery(connectionOptions?: ConnectionOptions): DynamicsDiscovery;
+ export interface DynamicsDiscovery {
+ discover(): Promise;
+ }
}
declare module "Dynamics/Model/EntityMetadata" {
export interface EntityMetadata {
@@ -144,6 +185,7 @@ declare module "Dynamics/Model/OptionSetMetadata" {
}
}
declare module "Dynamics/DynamicsMetadata" {
+ import { ConnectionOptions } from "Dynamics/DynamicsRequest";
import { AttributeMetadata, EntityAttributeMetadata, LookupAttributeMetadata } from "Dynamics/Model/AttributeMetadata";
import { EntityMetadata } from "Dynamics/Model/EntityMetadata";
import { OptionSetAttributeMetadata, OptionSetMetadata } from "Dynamics/Model/OptionSetMetadata";
@@ -152,7 +194,7 @@ declare module "Dynamics/DynamicsMetadata" {
export type DynamicsOptionSetMetadata = OptionSetMetadata;
export type DynamicsLookupAttributeMetadata = LookupAttributeMetadata;
export type DynamicsOptionSetAttributeMetadata = OptionSetAttributeMetadata;
- export default function dynamicsMetadata(accessToken?: string): DynamicsMetadata;
+ export default function dynamicsmetdata(connectionOptions?: ConnectionOptions): DynamicsMetadata;
export function isLookupAttribute(attribute: DynamicsAttributeMetadata): attribute is DynamicsLookupAttributeMetadata;
export function isOptionSetAttribute(attribute: DynamicsAttributeMetadata): attribute is DynamicsOptionSetAttributeMetadata;
export interface DynamicsMetadata {
@@ -163,6 +205,100 @@ declare module "Dynamics/DynamicsMetadata" {
}
type AnyAttributeMetadata = AttributeMetadata | LookupAttributeMetadata | OptionSetAttributeMetadata;
}
+declare module "ntlm/ntlm.flags" {
+ export enum NtlmFlags {
+ NEGOTIATE_UNICODE = 1,
+ NEGOTIATE_OEM = 2,
+ REQUEST_TARGET = 4,
+ NEGOTIATE_SIGN = 16,
+ NEGOTIATE_SEAL = 32,
+ NEGOTIATE_DATAGRAM_STYLE = 64,
+ NEGOTIATE_LM_KEY = 128,
+ NEGOTIATE_NETWARE = 256,
+ NEGOTIATE_NTLM_KEY = 512,
+ NEGOTIATE_ANONYMOUS = 2048,
+ NEGOTIATE_DOMAIN_SUPPLIED = 4096,
+ NEGOTIATE_WORKSTATION_SUPPLIED = 8192,
+ NEGOTIATE_LOCAL_CALL = 16384,
+ NEGOTIATE_ALWAYS_SIGN = 32768,
+ TARGET_TYPE_DOMAIN = 65536,
+ TARGET_TYPE_SERVER = 131072,
+ TARGET_TYPE_SHARE = 262144,
+ NEGOTIATE_NTLM2_KEY = 524288,
+ REQUEST_INIT_RESPONSE = 1048576,
+ REQUEST_ACCEPT_RESPONSE = 2097152,
+ REQUEST_NONNT_SESSION_KEY = 4194304,
+ NEGOTIATE_TARGET_INFO = 8388608,
+ NEGOTIATE_VERSION = 33554432,
+ NEGOTIATE_128 = 536870912,
+ NEGOTIATE_KEY_EXCHANGE = 1073741824,
+ NEGOTIATE_56 = -2147483648
+ }
+}
+declare module "ntlm/ntlm.constants" {
+ export class NtlmConstants {
+ static readonly NTLM_SIGNATURE = "NTLMSSP\0";
+ }
+}
+declare module "ntlm/type2.message" {
+ export class Type2Message {
+ raw: Buffer;
+ flags: number;
+ encoding: 'ascii' | 'ucs2';
+ version: number;
+ challenge: Buffer;
+ targetName: string;
+ targetInfo: any;
+ constructor(buf: Buffer);
+ private readTargetName;
+ private parseTargetInfo;
+ }
+}
+declare module "ntlm/hash" {
+ import { Type2Message } from "ntlm/type2.message";
+ export class Hash {
+ static createLMResponse(challenge: Buffer, lmhash: Buffer): Buffer;
+ static createLMHash(password: string): Buffer;
+ static calculateDES(key: Buffer, message: Buffer): Buffer;
+ static createNTLMResponse(challenge: Buffer, ntlmhash: Buffer): Buffer;
+ static createNTLMHash(password: string): Buffer;
+ static createNTLMv2Hash(ntlmhash: Buffer, username: string, authTargetName: string): Buffer;
+ static createLMv2Response(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string): Buffer;
+ static createNTLMv2Response(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string, withMic: boolean): Buffer;
+ static createMIC(type1message: Buffer, type2message: Type2Message, type3message: Buffer, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string): Buffer;
+ static createRandomSessionKey(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string, withMic: boolean): Buffer;
+ static createPseudoRandomValue(length: number): string;
+ static createTimestamp(): string;
+ }
+}
+declare module "ntlm/ntlm.message" {
+ export class NtlmMessage {
+ raw: Buffer;
+ constructor(buf: Buffer);
+ header(): string;
+ }
+}
+declare module "ntlm/interfaces/i.ntlm" {
+ import { Type2Message } from "ntlm/type2.message";
+ import { NtlmMessage } from "ntlm/ntlm.message";
+ export interface INtlm {
+ createType1Message(ntlm_version: number, workstation: string | undefined, target: string | undefined): NtlmMessage;
+ decodeType2Message(str: string | undefined): Type2Message;
+ createType3Message(type1message: NtlmMessage, type2Message: Type2Message, username: string, password: string, workstation: string | undefined, target: string | undefined, client_nonce: string | undefined, timestamp: string | undefined): NtlmMessage;
+ }
+}
+declare module "ntlm/ntlm" {
+ import { INtlm } from "ntlm/interfaces/i.ntlm";
+ import { Type2Message } from "ntlm/type2.message";
+ import { NtlmMessage } from "ntlm/ntlm.message";
+ export default function ntlm(): INtlm;
+ export class Ntlm implements INtlm {
+ createType1Message(ntlm_version: number, workstation: string | undefined, target: string | undefined): NtlmMessage;
+ private addVersionStruct;
+ decodeType2Message(str: string | undefined): Type2Message;
+ createType3Message(type1message: NtlmMessage, type2message: Type2Message, username: string, password: string, workstation: string | undefined, target: string | undefined, client_nonce_override: string | undefined, timestamp_override: string | undefined): NtlmMessage;
+ }
+}
declare module "tests/dynamicsMetadataTests" {
export function dynamicsMetadataRetrieveAll(): Promise;
}
diff --git a/lib/amd/more-xrm.js b/lib/amd/more-xrm.js
index a4dc3f3..683a354 100644
--- a/lib/amd/more-xrm.js
+++ b/lib/amd/more-xrm.js
@@ -1,8 +1,9 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
@@ -77,7 +78,7 @@ define("Query/Query", ["require", "exports"], function (require, exports) {
return this;
}
whereAny(any) {
- var conditions = [];
+ let conditions = [];
any((attributeName, operator, ...values) => {
conditions.push({
AttributeName: attributeName,
@@ -150,7 +151,7 @@ define("Query/QueryXml", ["require", "exports", "Query/Query"], function (requir
}
});
query.OrderBy.forEach(attribute => {
- if (attribute.indexOf('_') == 0) {
+ if (attribute.indexOf('_') === 0) {
xml.push(``);
}
else {
@@ -227,16 +228,21 @@ define("Query/QueryXml", ["require", "exports", "Query/Query"], function (requir
return xml.join('\n');
}
function encodeValue(value) {
- if (value === 0)
+ if (value === 0) {
return '0';
- if (value === true)
+ }
+ if (value === true) {
return 'true';
- if (value === false)
+ }
+ if (value === false) {
return 'false';
- if (!value)
+ }
+ if (!value) {
return '';
- if (typeof (value.toISOString) === 'function')
+ }
+ if (typeof (value.toISOString) === 'function') {
return value.toISOString();
+ }
return xmlEncode(value.toString());
}
function xmlEncode(text) {
@@ -255,8 +261,9 @@ define("Query/QueryXml", ["require", "exports", "Query/Query"], function (requir
return xmlString.replace(/\s*<[^>\/]*>[^<>]*<\/[^>]*>|\s*<.+?>|\s*[^<]+/g, //pattern to match nodes (angled brackets or text)
function (m, i) {
m = m.replace(/^\s+|\s+$/g, ""); //trim the match just in case
- if (i < 38 && /^<[?]xml/.test(m))
- return m + "\n"; //if the match is a header, ignore it
+ if (i < 38 && /^<[?]xml/.test(m)) {
+ return m + "\n";
+ } //if the match is a header, ignore it
if (/^<[/]/.test(m)) //if the match is a closing tag
{
tabs = tabs.replace(indent, ""); //remove one indent from the store
@@ -282,33 +289,54 @@ define("Query/QueryXml", ["require", "exports", "Query/Query"], function (requir
});
}
});
-define("Dynamics/DynamicsRequest", ["require", "exports", "Query/Query", "Query/QueryXml", "Dynamics/Dynamics"], function (require, exports, Query_2, QueryXml_1, Dynamics_1) {
+define("Dynamics/DynamicsRequest", ["require", "exports", "Query/Query", "Query/QueryXml", "Dynamics/Dynamics", "httpntlm", "node-fetch"], function (require, exports, Query_2, QueryXml_1, Dynamics_1, httpntlm, node_fetch_1) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
- function dynamicsQuery(query, maxRowCount, headers) {
- const dataQuery = Query_2.GetRootQuery(query);
- if (!dataQuery.EntityPath) {
- throw new Error('dynamicsQuery requires a Query object with an EntityPath');
+ var AuthenticationType;
+ (function (AuthenticationType) {
+ AuthenticationType[AuthenticationType["Windows"] = 1] = "Windows";
+ AuthenticationType[AuthenticationType["OAuth"] = 2] = "OAuth";
+ })(AuthenticationType = exports.AuthenticationType || (exports.AuthenticationType = {}));
+ class ConnectionOptions {
+ constructor() {
+ this.authType = AuthenticationType.OAuth;
+ this.serverUrl = "";
+ this.webApiVersion = Dynamics_1.DefaultWebApiVersion;
}
- return dynamicsQueryUrl(`/api/data/${Dynamics_1.WebApiVersion}/${dataQuery.EntityPath}`, query, maxRowCount, headers);
+ }
+ exports.ConnectionOptions = ConnectionOptions;
+ function dynamicsQuery(connectionOptions, query, maxRowCount, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const dataQuery = Query_2.GetRootQuery(query);
+ if (!dataQuery.EntityPath) {
+ throw new Error('dynamicsQuery requires a Query object with an EntityPath');
+ }
+ return yield dynamicsQueryUrl(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${dataQuery.EntityPath}`, query, maxRowCount, headers);
+ });
}
exports.dynamicsQuery = dynamicsQuery;
- function dynamicsQueryUrl(dynamicsEntitySetUrl, query, maxRowCount, headers) {
- const querySeparator = (dynamicsEntitySetUrl.indexOf('?') > -1 ? '&' : '?');
- return request(`${dynamicsEntitySetUrl}${querySeparator}fetchXml=${escape(QueryXml_1.default(query, maxRowCount))}`, 'GET', undefined, headers);
+ function dynamicsQueryUrl(connectionOptions, dynamicsEntitySetUrl, query, maxRowCount, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const querySeparator = (dynamicsEntitySetUrl.indexOf('?') > -1 ? '&' : '?');
+ return yield request(connectionOptions, `${dynamicsEntitySetUrl}${querySeparator}fetchXml=${escape(QueryXml_1.default(query, maxRowCount))}`, 'GET', undefined, headers);
+ });
}
exports.dynamicsQueryUrl = dynamicsQueryUrl;
- function dynamicsRequest(dynamicsEntitySetUrl, headers) {
- return request(dynamicsEntitySetUrl, 'GET', undefined, headers);
+ function dynamicsRequest(connectionOptions, dynamicsEntitySetUrl, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return yield request(connectionOptions, dynamicsEntitySetUrl, 'GET', undefined, headers);
+ });
}
exports.dynamicsRequest = dynamicsRequest;
- function dynamicsSave(entitySetName, data, id, headers) {
- if (id) {
- return request(`/api/data/${Dynamics_1.WebApiVersion}/${entitySetName}(${trimId(id)})`, 'PATCH', data, headers);
- }
- else {
- return request(`/api/data/${Dynamics_1.WebApiVersion}/${entitySetName}()`, 'POST', data, headers);
- }
+ function dynamicsSave(connectionOptions, entitySetName, data, id, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (id) {
+ return yield request(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${entitySetName}(${trimId(id)})`, 'PATCH', data, headers);
+ }
+ else {
+ return yield request(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${entitySetName}()`, 'POST', data, headers);
+ }
+ });
}
exports.dynamicsSave = dynamicsSave;
function formatDynamicsResponse(data) {
@@ -324,10 +352,10 @@ define("Dynamics/DynamicsRequest", ["require", "exports", "Query/Query", "Query/
}
if (data) {
for (var item of data) {
- var row = {};
- for (var key in item) {
+ let row = {};
+ for (let key in item) {
var name = key;
- if (name.indexOf('@odata') == 0) {
+ if (name.indexOf('@odata') === 0) {
continue;
}
if (name.indexOf('transactioncurrencyid') > -1) {
@@ -335,12 +363,12 @@ define("Dynamics/DynamicsRequest", ["require", "exports", "Query/Query", "Query/
}
if (name.indexOf('@') > -1) {
name = name.substring(0, name.indexOf('@'));
- if (name.indexOf('_') == 0) {
+ if (name.indexOf('_') === 0) {
name = name.slice(1, -6);
}
name += "_formatted";
}
- else if (name.indexOf('_') == 0) {
+ else if (name.indexOf('_') === 0) {
name = name.slice(1, -6);
}
if (name.indexOf('_x002e_') > -1) {
@@ -361,55 +389,99 @@ define("Dynamics/DynamicsRequest", ["require", "exports", "Query/Query", "Query/
return items;
}
exports.formatDynamicsResponse = formatDynamicsResponse;
- function request(url, method, body, headers) {
- return fetch(url, {
- method: method,
- headers: Object.assign({ 'Content-Type': 'application/json; charset=utf-8' }, Dynamics_1.DynamicsHeaders, headers),
- body: body
- })
- .then(response => response.json())
- .then(data => formatDynamicsResponse(data));
+ function request(connectionOptions, url, method, body, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let callUrl = connectionOptions.serverUrl;
+ if (callUrl.endsWith("/")) {
+ callUrl = callUrl.substr(0, callUrl.length - 1);
+ }
+ callUrl = `${callUrl}${url}`;
+ //TODO: fetch if we can.
+ if (connectionOptions.authType === AuthenticationType.Windows) {
+ return new Promise((resolve, reject) => {
+ httpntlm[method.toLowerCase()]({
+ url: callUrl,
+ username: connectionOptions.username,
+ password: connectionOptions.password,
+ workstation: connectionOptions.workstation || '',
+ domain: connectionOptions.domain || '',
+ body: body,
+ headers: Object.assign(Object.assign({ 'Content-Type': 'application/json; charset=utf-8' }, Dynamics_1.DynamicsHeaders), headers)
+ }, function (err, res) {
+ if (err) {
+ console.error(err);
+ reject(err);
+ }
+ const json = JSON.parse(res.body);
+ if (json.error) {
+ console.error(json.error.message);
+ reject(json.error.message);
+ }
+ else if (json.ExceptionMessage) {
+ console.error(json.ExceptionMessage);
+ reject(`The service call returned HTTP ${json.ErrorCode} - ${json.ExceptionMessage}`);
+ }
+ else {
+ resolve(formatDynamicsResponse(json));
+ }
+ });
+ });
+ }
+ else {
+ return node_fetch_1.default(url, {
+ method: method,
+ headers: Object.assign(Object.assign({ 'Authorization': `Bearer ${connectionOptions.accessToken}`, 'Content-Type': 'application/json; charset=utf-8' }, Dynamics_1.DynamicsHeaders), headers),
+ body: body
+ })
+ .then(response => response.json())
+ .then(data => formatDynamicsResponse(data));
+ }
+ });
}
function trimId(id) {
return (id || '').replace(/{|}/g, '');
}
});
-define("Dynamics/DynamicsBatch", ["require", "exports", "Query/Query", "Query/QueryXml", "Dynamics/Dynamics", "Dynamics/DynamicsRequest"], function (require, exports, Query_3, QueryXml_2, Dynamics_2, DynamicsRequest_1) {
+define("Dynamics/DynamicsBatch", ["require", "exports", "Query/Query", "Query/QueryXml", "Dynamics/Dynamics", "Dynamics/DynamicsRequest", "httpntlm", "node-fetch"], function (require, exports, Query_3, QueryXml_2, Dynamics_2, DynamicsRequest_1, httpntlm, node_fetch_2) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
- function dynamicsBatch(headers) {
- return new Batch(headers);
+ function dynamicsBatch(connectionOptions, headers) {
+ return new Batch(connectionOptions, headers);
}
exports.dynamicsBatch = dynamicsBatch;
- function dynamicsBatchRequest(...url) {
- const batch = new Batch();
+ function dynamicsBatchRequest(connectionOptions, ...url) {
+ const batch = new Batch(connectionOptions);
batch.requestAllUrls(url);
return batch.execute();
}
exports.dynamicsBatchRequest = dynamicsBatchRequest;
- function dynamicsBatchQuery(...query) {
- const batch = new Batch();
+ function dynamicsBatchQuery(connectionOptions, ...query) {
+ const batch = new Batch(connectionOptions);
batch.requestAll(query);
return batch.execute();
}
exports.dynamicsBatchQuery = dynamicsBatchQuery;
class Batch {
- constructor(headers) {
+ constructor(options, headers) {
+ this.options = options;
this.headers = headers;
+ this.ConnectionOptions = options;
this.Changes = [];
this.RelatedChanges = [];
}
execute() {
return __awaiter(this, void 0, void 0, function* () {
- const results = yield Batch.requestBatch(`/api/data/${Dynamics_2.WebApiVersion}/$batch`, this.Changes, this.headers);
+ const results = yield Batch.requestBatch(this.ConnectionOptions, `/api/data/${this.ConnectionOptions.webApiVersion}/$batch`, this.Changes, this.headers);
if (this.RelatedChanges.length > 0) {
for (let change of this.RelatedChanges) {
- let changeIndex = this.Changes.indexOf(change.relatedChange);
- let relatedId = results[changeIndex];
- change.entityData[`${change.relatedPropertyName}@odata.bind`] = `${change.relatedChange.entitySetName}(${Batch.trimId(relatedId)})`;
+ if (change !== undefined && change.relatedChange) {
+ let changeIndex = this.Changes.indexOf(change.relatedChange);
+ let relatedId = results !== undefined ? results[changeIndex] : undefined;
+ change.entityData[`${change.relatedPropertyName}@odata.bind`] = `${change.relatedChange.entitySetName}(${Batch.trimId(relatedId)})`;
+ }
}
- const related = yield Batch.requestBatch(`/api/data/${Dynamics_2.WebApiVersion}/$batch`, this.RelatedChanges, this.headers);
- return results.concat(related);
+ const related = yield Batch.requestBatch(this.ConnectionOptions, `/api/data/${this.ConnectionOptions.webApiVersion}/$batch`, this.RelatedChanges, this.headers);
+ return results !== undefined ? results.concat(related) : undefined;
}
else {
return results;
@@ -460,8 +532,9 @@ define("Dynamics/DynamicsBatch", ["require", "exports", "Query/Query", "Query/Qu
}
createRelatedEntity(entitySetName, data, navigationPropertyName) {
let lastChange = this.Changes[this.Changes.length - 1];
- if (!lastChange || lastChange.entityData == 'DELETE')
+ if (!lastChange || lastChange.entityData === 'DELETE') {
throw new Error('createRelatedEntity relies on the previous change which was not found in the batch.');
+ }
if (lastChange.entityId) {
data[`${navigationPropertyName}@odata.bind`] = `${lastChange.entitySetName}(${lastChange.entityId})`;
this.Changes.push({
@@ -478,16 +551,42 @@ define("Dynamics/DynamicsBatch", ["require", "exports", "Query/Query", "Query/Qu
});
}
}
- static requestBatch(url, requests, headers) {
+ static requestBatch(connectionOptions, url, requests, headers) {
+ let callUrl = connectionOptions.serverUrl;
+ if (callUrl.endsWith("/")) {
+ callUrl = callUrl.substr(0, callUrl.length - 1);
+ }
+ callUrl = `${callUrl}${url}`;
const batchId = Batch.createId();
- return fetch(url, {
- method: 'POST',
- headers: Object.assign({ 'Content-Type': `multipart/mixed;boundary=batch_${batchId}` }, Dynamics_2.DynamicsHeaders, headers),
- body: Batch.formatBatchRequest(batchId, requests)
- })
- .then(response => Batch.formatBatchResponse(response.text()));
- }
- static formatBatchRequest(batchId, changes) {
+ if (connectionOptions.authType === DynamicsRequest_1.AuthenticationType.Windows) {
+ return new Promise((resolve, reject) => {
+ httpntlm.post({
+ url: callUrl,
+ username: connectionOptions.username,
+ password: connectionOptions.password,
+ workstation: connectionOptions.workstation || '',
+ domain: connectionOptions.domain || '',
+ body: Batch.formatBatchRequest(connectionOptions, batchId, requests),
+ headers: Object.assign(Object.assign({ 'Content-Type': `multipart/mixed;boundary=batch_${batchId}` }, Dynamics_2.DynamicsHeaders), headers)
+ }, function (err, res) {
+ if (err) {
+ console.error(err);
+ reject(err);
+ }
+ resolve(Batch.formatBatchResponse(res.responseText));
+ });
+ });
+ }
+ else {
+ return node_fetch_2.default(callUrl, {
+ method: 'POST',
+ headers: Object.assign(Object.assign({ 'Content-Type': `multipart/mixed;boundary=batch_${batchId}`, 'Authorization': connectionOptions.accessToken }, Dynamics_2.DynamicsHeaders), headers),
+ body: Batch.formatBatchRequest(connectionOptions, batchId, requests)
+ })
+ .then(response => Batch.formatBatchResponse(response.text()));
+ }
+ }
+ static formatBatchRequest(connectionOptions, batchId, changes) {
let batchBody = [];
let requestBody = [];
let changeNumber = 1;
@@ -502,7 +601,7 @@ define("Dynamics/DynamicsBatch", ["require", "exports", "Query/Query", "Query/Qu
requestBody.push('Content-Transfer-Encoding:binary');
requestBody.push('');
if (change.entitySetName) {
- requestBody.push(`GET ${encodeURI(`/api/data/${Dynamics_2.WebApiVersion}/${change.entitySetName}?${change.entitySetQuery}`)} HTTP/1.1`);
+ requestBody.push(`GET ${encodeURI(`/api/data/${connectionOptions.webApiVersion}/${change.entitySetName}?${change.entitySetQuery}`)} HTTP/1.1`);
}
else {
requestBody.push(`GET ${encodeURI(change.entitySetQuery)} HTTP/1.1`);
@@ -517,7 +616,7 @@ define("Dynamics/DynamicsBatch", ["require", "exports", "Query/Query", "Query/Qu
batchBody.push('Content-Transfer-Encoding:binary');
batchBody.push(`Content-ID: ${changeNumber++}`);
batchBody.push('');
- batchBody.push(`${change.entityId ? 'PATCH' : 'POST'} ${encodeURI(`/api/data/${Dynamics_2.WebApiVersion}/${change.entitySetName}(${Batch.trimId(change.entityId)})`)} HTTP/1.1`);
+ batchBody.push(`${change.entityId ? 'PATCH' : 'POST'} ${encodeURI(`/api/data/${connectionOptions.webApiVersion}/${change.entitySetName}(${Batch.trimId(change.entityId)})`)} HTTP/1.1`);
batchBody.push('Content-Type: application/json;type=entry');
batchBody.push('');
batchBody.push(JSON.stringify(change.entityData));
@@ -563,38 +662,41 @@ define("Dynamics/DynamicsBatch", ["require", "exports", "Query/Query", "Query/Qu
return 'id' + Math.random().toString(16).slice(2);
}
static trimId(id) {
- return (id || '').replace(/{|}/g, '');
+ if (id !== undefined) {
+ return (id || '').replace(/{|}/g, '');
+ }
+ return undefined;
}
}
});
define("Dynamics/Dynamics", ["require", "exports", "Query/Query", "Dynamics/DynamicsBatch", "Dynamics/DynamicsRequest"], function (require, exports, Query_4, DynamicsBatch_1, DynamicsRequest_2) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
- exports.WebApiVersion = 'v9.1';
+ exports.DefaultWebApiVersion = 'v9.1';
exports.DefaultMaxRecords = 100;
exports.DynamicsHeaders = {
'OData-MaxVersion': '4.0',
'OData-Version': '4.0',
'Prefer': 'odata.include-annotations=OData.Community.Display.V1.FormattedValue'
};
- function dynamics(accessToken) {
- return new DynamicsClient(accessToken);
+ function dynamics(connectionOptions) {
+ return new DynamicsClient(connectionOptions);
}
exports.default = dynamics;
class DynamicsClient {
- constructor(accessToken) {
- this.dynamicsHeaders = accessToken && {
- 'Authorization': 'Bearer ' + accessToken
- };
+ constructor(options) {
+ if (options) {
+ this.connectionOptions = options;
+ }
}
batch() {
- return DynamicsBatch_1.dynamicsBatch(this.dynamicsHeaders);
+ return DynamicsBatch_1.dynamicsBatch(this.connectionOptions, this.dynamicsHeaders);
}
fetch(query, maxRowCount = exports.DefaultMaxRecords) {
- return DynamicsRequest_2.dynamicsQuery(query, maxRowCount, this.dynamicsHeaders);
+ return DynamicsRequest_2.dynamicsQuery(this.connectionOptions, query, maxRowCount, this.dynamicsHeaders);
}
optionset(entityName, attributeName) {
- return DynamicsRequest_2.dynamicsRequest(`/api/data/${exports.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes(LogicalName='${attributeName}')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet($select=Options),GlobalOptionSet($select=Options)`, this.dynamicsHeaders)
+ return DynamicsRequest_2.dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes(LogicalName='${attributeName}')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet($select=Options),GlobalOptionSet($select=Options)`, this.dynamicsHeaders)
.then(attribute => (attribute.OptionSet || attribute.GlobalOptionSet).Options.map((option) => ({
label: (option.Label && option.Label.UserLocalizedLabel && option.Label.UserLocalizedLabel.Label),
value: option.Value
@@ -604,7 +706,33 @@ define("Dynamics/Dynamics", ["require", "exports", "Query/Query", "Dynamics/Dyna
return Query_4.default(entityLogicalName).path(entitySetName);
}
save(entitySetName, data, id) {
- return DynamicsRequest_2.dynamicsSave(entitySetName, data, id, this.dynamicsHeaders);
+ return DynamicsRequest_2.dynamicsSave(this.connectionOptions, entitySetName, data, id, this.dynamicsHeaders);
+ }
+ }
+});
+define("Dynamics/Model/OrganizationMetadata", ["require", "exports"], function (require, exports) {
+ "use strict";
+ Object.defineProperty(exports, "__esModule", { value: true });
+});
+define("Dynamics/DynamicsDiscovery", ["require", "exports", "Dynamics/DynamicsRequest"], function (require, exports, DynamicsRequest_3) {
+ "use strict";
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.DefaultDiscoveryApiVersion = 'v9.1';
+ function dynamicsDiscovery(connectionOptions) {
+ return new DynamicsDiscoveryClient(connectionOptions);
+ }
+ exports.default = dynamicsDiscovery;
+ class DynamicsDiscoveryClient {
+ constructor(options) {
+ if (options) {
+ this.connectionOptions = options;
+ if (!options.webApiVersion) {
+ this.connectionOptions.webApiVersion = exports.DefaultDiscoveryApiVersion;
+ }
+ }
+ }
+ discover() {
+ return DynamicsRequest_3.dynamicsRequest(this.connectionOptions, `/api/discovery/${this.connectionOptions.webApiVersion}/Instances`, this.dynamicsHeaders);
}
}
});
@@ -637,13 +765,13 @@ define("Dynamics/Model/OptionSetMetadata", ["require", "exports"], function (req
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
});
-define("Dynamics/DynamicsMetadata", ["require", "exports", "Dynamics/Dynamics", "Dynamics/DynamicsBatch", "Dynamics/DynamicsRequest"], function (require, exports, Dynamics_3, DynamicsBatch_2, DynamicsRequest_3) {
+define("Dynamics/DynamicsMetadata", ["require", "exports", "Dynamics/DynamicsBatch", "Dynamics/DynamicsRequest"], function (require, exports, DynamicsBatch_2, DynamicsRequest_4) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
- function dynamicsMetadata(accessToken) {
- return new DynamicsMetadataClient(accessToken);
+ function dynamicsmetdata(connectionOptions) {
+ return new DynamicsMetadataClient(connectionOptions);
}
- exports.default = dynamicsMetadata;
+ exports.default = dynamicsmetdata;
function isLookupAttribute(attribute) {
return attribute.Type === 'Lookup' && attribute['LookupEntityName'];
}
@@ -687,31 +815,31 @@ define("Dynamics/DynamicsMetadata", ["require", "exports", "Dynamics/Dynamics",
'entityimage_timestamp'
];
class DynamicsMetadataClient {
- constructor(accessToken) {
- this.dynamicsHeaders = accessToken && {
- 'Authorization': 'Bearer ' + accessToken
- };
+ constructor(options) {
+ if (options) {
+ this.connectionOptions = options;
+ }
}
attributes(entityName) {
- return DynamicsBatch_2.dynamicsBatch(this.dynamicsHeaders)
+ return DynamicsBatch_2.dynamicsBatch(this.connectionOptions, this.dynamicsHeaders)
.requestAllUrls(this.getMetadataUrls(entityName, false))
.execute()
.then(data => this.flatten(data)
- .filter((attribute) => attribute.LogicalName.indexOf('yomi') === -1 || attribute.LogicalName.indexOf('base') != attribute.LogicalName.length - 4)
+ .filter((attribute) => attribute.LogicalName.indexOf('yomi') === -1 || attribute.LogicalName.indexOf('base') !== attribute.LogicalName.length - 4)
.map(DynamicsMetadataMapper.MapAttribute));
}
entities() {
- return DynamicsRequest_3.dynamicsRequest(`/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
+ return DynamicsRequest_4.dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
.then(data => data
.map(entity => DynamicsMetadataMapper.MapEntity(entity)));
}
entity(entityName) {
- return DynamicsRequest_3.dynamicsRequest(`/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
+ return DynamicsRequest_4.dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
.then(entity => this.attributes(entityName)
.then(attributes => DynamicsMetadataMapper.MapEntity(entity, attributes)));
}
entityAttributes(...entityNames) {
- return DynamicsBatch_2.dynamicsBatch(this.dynamicsHeaders)
+ return DynamicsBatch_2.dynamicsBatch(this.connectionOptions, this.dynamicsHeaders)
.requestAllUrls(this.flatten(entityNames.map(e => this.getMetadataUrls(e, true))))
.execute()
.then(data => {
@@ -723,7 +851,7 @@ define("Dynamics/DynamicsMetadata", ["require", "exports", "Dynamics/Dynamics",
currentEntity = DynamicsMetadataMapper.MapEntity(item);
entities.push(currentEntity);
}
- else if (item.LogicalName.indexOf('yomi') == -1 && item.LogicalName.indexOf('base') != item.LogicalName.length - 4) {
+ else if (item.LogicalName.indexOf('yomi') === -1 && item.LogicalName.indexOf('base') !== item.LogicalName.length - 4) {
currentEntity.Attributes.push(DynamicsMetadataMapper.MapAttribute(item));
}
}
@@ -734,12 +862,12 @@ define("Dynamics/DynamicsMetadata", ["require", "exports", "Dynamics/Dynamics",
const attributeTypeFilter = ExcludedAttributeTypeFilters.map(v => `AttributeType ne Microsoft.Dynamics.CRM.AttributeTypeCode'${v}'`).join(' and ');
const attributeNameFilter = ExcludedAttributeNameFilters.map(v => `LogicalName ne '${v}'`).join(' and ');
return [
- `/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=${entityProperties}`,
- `/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes?$select=${attributeProperties}&$filter=${attributeTypeFilter} and ${attributeNameFilter}`,
- `/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=${attributeProperties},Targets`,
- `/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
- `/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StatusAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
- `/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StateAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=${entityProperties}`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes?$select=${attributeProperties}&$filter=${attributeTypeFilter} and ${attributeNameFilter}`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=${attributeProperties},Targets`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StatusAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StateAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`
].slice(includeEntity ? 0 : 1);
}
flatten(values) {
@@ -783,6 +911,632 @@ define("Dynamics/DynamicsMetadata", ["require", "exports", "Dynamics/Dynamics",
return attribute['OptionSet'] && Array.isArray(attribute['OptionSet'].Options);
}
});
+define("ntlm/ntlm.flags", ["require", "exports"], function (require, exports) {
+ 'use strict';
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var NtlmFlags;
+ (function (NtlmFlags) {
+ /* Indicates that Unicode strings are supported for use in security buffer
+ data. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_UNICODE"] = 1] = "NEGOTIATE_UNICODE";
+ /* Indicates that OEM strings are supported for use in security buffer data. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_OEM"] = 2] = "NEGOTIATE_OEM";
+ /* Requests that the server's authentication realm be included in the Type 2
+ message. */
+ NtlmFlags[NtlmFlags["REQUEST_TARGET"] = 4] = "REQUEST_TARGET";
+ /* unknown (1<<3) */
+ /* Specifies that authenticated communication between the client and server
+ should carry a digital signature (message integrity). */
+ NtlmFlags[NtlmFlags["NEGOTIATE_SIGN"] = 16] = "NEGOTIATE_SIGN";
+ /* Specifies that authenticated communication between the client and server
+ should be encrypted (message confidentiality). */
+ NtlmFlags[NtlmFlags["NEGOTIATE_SEAL"] = 32] = "NEGOTIATE_SEAL";
+ /* Indicates that datagram authentication is being used. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_DATAGRAM_STYLE"] = 64] = "NEGOTIATE_DATAGRAM_STYLE";
+ /* Indicates that the LAN Manager session key should be used for signing and
+ sealing authenticated communications. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_LM_KEY"] = 128] = "NEGOTIATE_LM_KEY";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["NEGOTIATE_NETWARE"] = 256] = "NEGOTIATE_NETWARE";
+ /* Indicates that NTLM authentication is being used. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_NTLM_KEY"] = 512] = "NEGOTIATE_NTLM_KEY";
+ /* unknown (1<<10) */
+ /* Sent by the client in the Type 3 message to indicate that an anonymous
+ context has been established. This also affects the response fields. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_ANONYMOUS"] = 2048] = "NEGOTIATE_ANONYMOUS";
+ /* Sent by the client in the Type 1 message to indicate that a desired
+ authentication realm is included in the message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_DOMAIN_SUPPLIED"] = 4096] = "NEGOTIATE_DOMAIN_SUPPLIED";
+ /* Sent by the client in the Type 1 message to indicate that the client
+ workstation's name is included in the message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_WORKSTATION_SUPPLIED"] = 8192] = "NEGOTIATE_WORKSTATION_SUPPLIED";
+ /* Sent by the server to indicate that the server and client are on the same
+ machine. Implies that the client may use a pre-established local security
+ context rather than responding to the challenge. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_LOCAL_CALL"] = 16384] = "NEGOTIATE_LOCAL_CALL";
+ /* Indicates that authenticated communication between the client and server
+ should be signed with a "dummy" signature. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_ALWAYS_SIGN"] = 32768] = "NEGOTIATE_ALWAYS_SIGN";
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a domain. */
+ NtlmFlags[NtlmFlags["TARGET_TYPE_DOMAIN"] = 65536] = "TARGET_TYPE_DOMAIN";
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a server. */
+ NtlmFlags[NtlmFlags["TARGET_TYPE_SERVER"] = 131072] = "TARGET_TYPE_SERVER";
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a share. Presumably, this is for share-level
+ authentication. Usage is unclear. */
+ NtlmFlags[NtlmFlags["TARGET_TYPE_SHARE"] = 262144] = "TARGET_TYPE_SHARE";
+ /* Indicates that the NTLM2 signing and sealing scheme should be used for
+ protecting authenticated communications. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_NTLM2_KEY"] = 524288] = "NEGOTIATE_NTLM2_KEY";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["REQUEST_INIT_RESPONSE"] = 1048576] = "REQUEST_INIT_RESPONSE";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["REQUEST_ACCEPT_RESPONSE"] = 2097152] = "REQUEST_ACCEPT_RESPONSE";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["REQUEST_NONNT_SESSION_KEY"] = 4194304] = "REQUEST_NONNT_SESSION_KEY";
+ /* Sent by the client in the Type 1 message to request Target info block from server.
+ Sent by the server in the Type 2 message to indicate that it is including a
+ Target Information block in the message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_TARGET_INFO"] = 8388608] = "NEGOTIATE_TARGET_INFO";
+ /* unknown (1<24) */
+ /* Indicates that the version info block is included in the message */
+ NtlmFlags[NtlmFlags["NEGOTIATE_VERSION"] = 33554432] = "NEGOTIATE_VERSION";
+ /* unknown (1<26) */
+ /* unknown (1<27) */
+ /* unknown (1<28) */
+ /* Indicates that 128-bit encryption is supported. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_128"] = 536870912] = "NEGOTIATE_128";
+ /* Indicates that the client will provide an encrypted master key in
+ the "Session Key" field of the Type 3 message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_KEY_EXCHANGE"] = 1073741824] = "NEGOTIATE_KEY_EXCHANGE";
+ /* Indicates that 56-bit encryption is supported. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_56"] = -2147483648] = "NEGOTIATE_56";
+ })(NtlmFlags = exports.NtlmFlags || (exports.NtlmFlags = {}));
+});
+define("ntlm/ntlm.constants", ["require", "exports"], function (require, exports) {
+ "use strict";
+ Object.defineProperty(exports, "__esModule", { value: true });
+ class NtlmConstants {
+ }
+ exports.NtlmConstants = NtlmConstants;
+ NtlmConstants.NTLM_SIGNATURE = 'NTLMSSP\0';
+});
+define("ntlm/type2.message", ["require", "exports", "ntlm/ntlm.flags", "ntlm/ntlm.constants"], function (require, exports, ntlm_flags_1, ntlm_constants_1) {
+ "use strict";
+ Object.defineProperty(exports, "__esModule", { value: true });
+ class Type2Message {
+ constructor(buf) {
+ this.raw = buf;
+ //check signature
+ if (buf.toString('ascii', 0, ntlm_constants_1.NtlmConstants.NTLM_SIGNATURE.length) !== ntlm_constants_1.NtlmConstants.NTLM_SIGNATURE) {
+ throw new Error('Invalid message signature');
+ }
+ //check message type
+ if (buf.readUInt32LE(ntlm_constants_1.NtlmConstants.NTLM_SIGNATURE.length) !== 2) {
+ throw new Error('Invalid message type (no type 2)');
+ }
+ //read flags
+ this.flags = buf.readUInt32LE(20);
+ this.encoding = (this.flags & ntlm_flags_1.NtlmFlags.NEGOTIATE_OEM) ? 'ascii' : 'ucs2';
+ this.version = (this.flags & ntlm_flags_1.NtlmFlags.NEGOTIATE_NTLM2_KEY) ? 2 : 1;
+ this.challenge = buf.slice(24, 32);
+ //read target name
+ this.targetName = this.readTargetName();
+ //read target info
+ if (this.flags & ntlm_flags_1.NtlmFlags.NEGOTIATE_TARGET_INFO) {
+ this.targetInfo = this.parseTargetInfo();
+ }
+ }
+ readTargetName() {
+ let length = this.raw.readUInt16LE(12);
+ //skipping allocated space
+ let offset = this.raw.readUInt32LE(16);
+ if (length === 0) {
+ return '';
+ }
+ if ((offset + length) > this.raw.length || offset < 32) {
+ throw new Error('Bad type 2 message');
+ }
+ return this.raw.toString(this.encoding, offset, offset + length);
+ }
+ parseTargetInfo() {
+ let info = {};
+ let length = this.raw.readUInt16LE(40);
+ //skipping allocated space
+ let offset = this.raw.readUInt32LE(44);
+ let targetInfoBuffer = Buffer.alloc(length);
+ this.raw.copy(targetInfoBuffer, 0, offset, offset + length);
+ if (length === 0) {
+ return info;
+ }
+ if ((offset + length) > this.raw.length || offset < 32) {
+ throw new Error('Bad type 2 message');
+ }
+ let pos = offset;
+ while (pos < (offset + length)) {
+ let blockType = this.raw.readUInt16LE(pos);
+ pos += 2;
+ let blockLength = this.raw.readUInt16LE(pos);
+ pos += 2;
+ if (blockType === 0) {
+ //reached the terminator subblock
+ break;
+ }
+ let blockTypeStr;
+ let blockTypeOutput = 'string';
+ switch (blockType) {
+ case 0x01:
+ blockTypeStr = 'SERVER';
+ break;
+ case 0x02:
+ blockTypeStr = 'DOMAIN';
+ break;
+ case 0x03:
+ blockTypeStr = 'FQDN';
+ break;
+ case 0x04:
+ blockTypeStr = 'DNS';
+ break;
+ case 0x05:
+ blockTypeStr = 'PARENT_DNS';
+ break;
+ case 0x06:
+ blockTypeStr = 'FLAGS';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x07:
+ blockTypeStr = 'SERVER_TIMESTAMP';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x08:
+ blockTypeStr = 'SINGLE_HOST';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x09:
+ blockTypeStr = 'TARGET_NAME';
+ break;
+ case 0x0A:
+ blockTypeStr = 'CHANNEL_BINDING';
+ blockTypeOutput = 'hex';
+ break;
+ default:
+ blockTypeStr = '';
+ break;
+ }
+ if (blockTypeStr) {
+ if (blockTypeOutput === 'string') {
+ info[blockTypeStr] = this.raw.toString('ucs2', pos, pos + blockLength);
+ }
+ else {
+ // Output as hex in little endian order
+ let twoCharBlocks = this.raw.toString('hex', pos, pos + blockLength).match(/.{2}/g);
+ if (twoCharBlocks) {
+ info[blockTypeStr] = twoCharBlocks.reverse().join("");
+ }
+ else {
+ info[blockTypeStr] = null;
+ }
+ }
+ }
+ pos += blockLength;
+ }
+ return {
+ parsed: info,
+ buffer: targetInfoBuffer
+ };
+ }
+ }
+ exports.Type2Message = Type2Message;
+});
+define("ntlm/hash", ["require", "exports", "crypto"], function (require, exports, crypto) {
+ 'use strict';
+ Object.defineProperty(exports, "__esModule", { value: true });
+ class Hash {
+ static createLMResponse(challenge, lmhash) {
+ let buf = Buffer.alloc(24);
+ let pwBuffer = Buffer.alloc(21).fill(0);
+ lmhash.copy(pwBuffer);
+ Hash.calculateDES(pwBuffer.slice(0, 7), challenge).copy(buf);
+ Hash.calculateDES(pwBuffer.slice(7, 14), challenge).copy(buf, 8);
+ Hash.calculateDES(pwBuffer.slice(14), challenge).copy(buf, 16);
+ return buf;
+ }
+ static createLMHash(password) {
+ let buf = Buffer.alloc(16), pwBuffer = Buffer.alloc(14), magicKey = Buffer.from('KGS!@#$%', 'ascii');
+ if (password.length > 14) {
+ buf.fill(0);
+ return buf;
+ }
+ pwBuffer.fill(0);
+ pwBuffer.write(password.toUpperCase(), 0, 'ascii');
+ return Buffer.concat([
+ Hash.calculateDES(pwBuffer.slice(0, 7), magicKey),
+ Hash.calculateDES(pwBuffer.slice(7), magicKey)
+ ]);
+ }
+ static calculateDES(key, message) {
+ let desKey = Buffer.alloc(8);
+ desKey[0] = key[0] & 0xFE;
+ desKey[1] = ((key[0] << 7) & 0xFF) | (key[1] >> 1);
+ desKey[2] = ((key[1] << 6) & 0xFF) | (key[2] >> 2);
+ desKey[3] = ((key[2] << 5) & 0xFF) | (key[3] >> 3);
+ desKey[4] = ((key[3] << 4) & 0xFF) | (key[4] >> 4);
+ desKey[5] = ((key[4] << 3) & 0xFF) | (key[5] >> 5);
+ desKey[6] = ((key[5] << 2) & 0xFF) | (key[6] >> 6);
+ desKey[7] = (key[6] << 1) & 0xFF;
+ for (let i = 0; i < 8; i++) {
+ let parity = 0;
+ for (let j = 1; j < 8; j++) {
+ parity += (desKey[i] >> j) % 2;
+ }
+ desKey[i] |= (parity % 2) === 0 ? 1 : 0;
+ }
+ let des = crypto.createCipheriv('DES-ECB', desKey, '');
+ return des.update(message);
+ }
+ static createNTLMResponse(challenge, ntlmhash) {
+ let buf = Buffer.alloc(24), ntlmBuffer = Buffer.alloc(21).fill(0);
+ ntlmhash.copy(ntlmBuffer);
+ Hash.calculateDES(ntlmBuffer.slice(0, 7), challenge).copy(buf);
+ Hash.calculateDES(ntlmBuffer.slice(7, 14), challenge).copy(buf, 8);
+ Hash.calculateDES(ntlmBuffer.slice(14), challenge).copy(buf, 16);
+ return buf;
+ }
+ static createNTLMHash(password) {
+ let md4sum = crypto.createHash('md4');
+ md4sum.update(Buffer.from(password, 'ucs2')); // lgtm[js/insufficient-password-hash]
+ return md4sum.digest();
+ }
+ static createNTLMv2Hash(ntlmhash, username, authTargetName) {
+ let hmac = crypto.createHmac('md5', ntlmhash);
+ hmac.update(Buffer.from(username.toUpperCase() + authTargetName, 'ucs2')); // lgtm[js/weak-cryptographic-algorithm]
+ return hmac.digest();
+ }
+ static createLMv2Response(type2message, username, authTargetName, ntlmhash, nonce) {
+ let buf = Buffer.alloc(24);
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+ //server challenge
+ type2message.challenge.copy(buf, 8);
+ //client nonce
+ buf.write(nonce, 16, 'hex');
+ //create hash
+ hmac.update(buf.slice(8));
+ let hashedBuffer = hmac.digest();
+ hashedBuffer.copy(buf);
+ return buf;
+ }
+ static createNTLMv2Response(type2message, username, authTargetName, ntlmhash, nonce, timestamp, withMic) {
+ let bufferSize = 48 + type2message.targetInfo.buffer.length;
+ if (withMic) {
+ bufferSize += 8;
+ }
+ let buf = Buffer.alloc(bufferSize), ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName), hmac = crypto.createHmac('md5', ntlm2hash);
+ //the first 8 bytes are spare to store the hashed value before the blob
+ //server challenge
+ type2message.challenge.copy(buf, 8);
+ //blob signature
+ buf.writeUInt32BE(0x01010000, 16);
+ //reserved
+ buf.writeUInt32LE(0, 20);
+ //timestamp
+ let timestampLow = Number('0x' + timestamp.substring(Math.max(0, timestamp.length - 8)));
+ let timestampHigh = Number('0x' + timestamp.substring(0, Math.max(0, timestamp.length - 8)));
+ buf.writeUInt32LE(timestampLow, 24);
+ buf.writeUInt32LE(timestampHigh, 28);
+ //random client nonce
+ buf.write(nonce, 32, 'hex');
+ //zero
+ buf.writeUInt32LE(0, 40);
+ //complete target information block from type 2 message
+ type2message.targetInfo.buffer.copy(buf, 44);
+ let bufferPos = 44 + type2message.targetInfo.buffer.length;
+ if (withMic) {
+ // Should include MIC in response, indicate it in AV_FLAGS
+ buf.writeUInt16LE(0x06, bufferPos - 4);
+ buf.writeUInt16LE(0x04, bufferPos - 2);
+ buf.writeUInt32LE(0x02, bufferPos);
+ // Write new endblock
+ buf.writeUInt32LE(0, bufferPos + 4);
+ bufferPos += 8;
+ }
+ //zero
+ buf.writeUInt32LE(0, bufferPos);
+ hmac.update(buf.slice(8));
+ let hashedBuffer = hmac.digest();
+ hashedBuffer.copy(buf);
+ return buf;
+ }
+ static createMIC(type1message, type2message, type3message, username, authTargetName, ntlmhash, nonce, timestamp) {
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let ntlm2response = Hash.createNTLMv2Response(type2message, username, authTargetName, ntlmhash, nonce, timestamp, true);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+ let session_base_key = hmac.update(ntlm2response.slice(0, 16)).digest();
+ let key_exchange_key = session_base_key;
+ //create MIC hash
+ hmac = crypto.createHmac('md5', key_exchange_key);
+ hmac.update(type1message);
+ hmac.update(type2message.raw);
+ hmac.update(type3message);
+ let hashedBuffer = hmac.digest();
+ return hashedBuffer;
+ }
+ static createRandomSessionKey(type2message, username, authTargetName, ntlmhash, nonce, timestamp, withMic) {
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let ntlm2response = Hash.createNTLMv2Response(type2message, username, authTargetName, ntlmhash, nonce, timestamp, withMic);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+ let session_base_key = hmac.update(ntlm2response.slice(0, 16)).digest();
+ let key_exchange_key = session_base_key;
+ let exported_session_key_hex = Hash.createPseudoRandomValue(32);
+ let exported_session_key = Buffer.from(exported_session_key_hex, 'hex');
+ let rc4 = crypto.createCipheriv('rc4', key_exchange_key, '');
+ let encrypted_random_session_key = rc4.update(exported_session_key);
+ return encrypted_random_session_key;
+ }
+ static createPseudoRandomValue(length) {
+ let str = '';
+ while (str.length < length) {
+ str += Math.floor(Math.random() * 16).toString(16);
+ }
+ return str;
+ }
+ static createTimestamp() {
+ //TODO: we are loosing precision here since js is not able to handle those large integers
+ // maybe think about a different solution here
+ // 11644473600000 = diff between 1970 and 1601
+ return ((Date.now() + 11644473600000) * 10000).toString(16);
+ }
+ }
+ exports.Hash = Hash;
+});
+define("ntlm/ntlm.message", ["require", "exports"], function (require, exports) {
+ "use strict";
+ Object.defineProperty(exports, "__esModule", { value: true });
+ class NtlmMessage {
+ constructor(buf) {
+ this.raw = buf;
+ }
+ header() {
+ return 'NTLM ' + this.raw.toString('base64');
+ }
+ }
+ exports.NtlmMessage = NtlmMessage;
+});
+define("ntlm/interfaces/i.ntlm", ["require", "exports"], function (require, exports) {
+ "use strict";
+ Object.defineProperty(exports, "__esModule", { value: true });
+});
+// All code in this folder is heavily based on the node project ntlm-client.
+// https://github.com/clncln1/node-ntlm-client
+// ----------------------------------------------------------------------------
+// Original license statement:
+define("ntlm/ntlm", ["require", "exports", "ntlm/ntlm.flags", "ntlm/ntlm.constants", "ntlm/hash", "os", "ntlm/type2.message", "ntlm/ntlm.message"], function (require, exports, ntlm_flags_2, ntlm_constants_2, hash_1, os, type2_message_1, ntlm_message_1) {
+ // Copyright (c) 2015 Nico Haller
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
+ // of this software and associated documentation files (the "Software"), to deal
+ // in the Software without restriction, including without limitation the rights
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ // copies of the Software, and to permit persons to whom the Software is
+ // furnished to do so, subject to the following conditions:
+ // The above copyright notice and this permission notice shall be included in
+ // all copies or substantial portions of the Software.
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ // THE SOFTWARE.
+ // ----------------------------------------------------------------------------
+ 'use strict';
+ Object.defineProperty(exports, "__esModule", { value: true });
+ function ntlm() {
+ return new Ntlm();
+ }
+ exports.default = ntlm;
+ class Ntlm {
+ createType1Message(ntlm_version, workstation, target) {
+ let dataPos = 40;
+ let pos = 0;
+ let buf = Buffer.alloc(256);
+ if (target === undefined) {
+ target = '';
+ }
+ if (workstation === undefined) {
+ workstation = os.hostname().toUpperCase();
+ }
+ //signature
+ buf.write(ntlm_constants_2.NtlmConstants.NTLM_SIGNATURE, pos, ntlm_constants_2.NtlmConstants.NTLM_SIGNATURE.length, 'ascii');
+ pos += ntlm_constants_2.NtlmConstants.NTLM_SIGNATURE.length;
+ //message type
+ buf.writeUInt32LE(1, pos);
+ pos += 4;
+ //flags
+ let messageFlags = ntlm_flags_2.NtlmFlags.NEGOTIATE_OEM |
+ ntlm_flags_2.NtlmFlags.NEGOTIATE_ALWAYS_SIGN |
+ ntlm_flags_2.NtlmFlags.NEGOTIATE_VERSION;
+ if (ntlm_version == 1) {
+ messageFlags |= ntlm_flags_2.NtlmFlags.NEGOTIATE_NTLM_KEY |
+ ntlm_flags_2.NtlmFlags.NEGOTIATE_LM_KEY;
+ }
+ else {
+ messageFlags |= ntlm_flags_2.NtlmFlags.NEGOTIATE_NTLM2_KEY;
+ }
+ if (target.length > 0) {
+ messageFlags |= ntlm_flags_2.NtlmFlags.NEGOTIATE_DOMAIN_SUPPLIED;
+ }
+ if (workstation.length > 0) {
+ messageFlags |= ntlm_flags_2.NtlmFlags.NEGOTIATE_WORKSTATION_SUPPLIED;
+ }
+ // special operator to force conversion to unsigned
+ buf.writeUInt32LE(messageFlags >>> 0, pos);
+ pos += 4;
+ //domain security buffer
+ buf.writeUInt16LE(target.length, pos);
+ pos += 2;
+ buf.writeUInt16LE(target.length, pos);
+ pos += 2;
+ buf.writeUInt32LE(dataPos, pos);
+ pos += 4;
+ if (target.length > 0) {
+ dataPos += buf.write(target, dataPos, 'ascii');
+ }
+ //workstation security buffer
+ buf.writeUInt16LE(workstation.length, pos);
+ pos += 2;
+ buf.writeUInt16LE(workstation.length, pos);
+ pos += 2;
+ buf.writeUInt32LE(dataPos, pos);
+ pos += 4;
+ if (workstation.length > 0) {
+ dataPos += buf.write(workstation, dataPos, 'ascii');
+ }
+ this.addVersionStruct(buf, pos);
+ return new ntlm_message_1.NtlmMessage(buf.slice(0, dataPos));
+ }
+ // Version - hard-coded to
+ // Major version 10, minor version 0 (Windows 10)
+ // build number 18362 (1903 update), NTLM revision 15
+ addVersionStruct(buf, pos) {
+ buf.writeUInt8(10, pos);
+ pos++;
+ buf.writeUInt8(0, pos);
+ pos++;
+ buf.writeUInt16LE(18362, pos);
+ pos += 2;
+ buf.writeUInt32LE(0x0F000000, pos);
+ pos += 4;
+ return pos;
+ }
+ decodeType2Message(str) {
+ if (str === undefined) {
+ throw new Error('Invalid argument');
+ }
+ let ntlmMatch = /^NTLM ([^,\s]+)/.exec(str);
+ if (ntlmMatch) {
+ str = ntlmMatch[1];
+ }
+ let buf = Buffer.from(str, 'base64');
+ let type2message = new type2_message_1.Type2Message(buf);
+ return type2message;
+ }
+ createType3Message(type1message, type2message, username, password, workstation, target, client_nonce_override, timestamp_override) {
+ let dataPos = 72;
+ let buf = Buffer.alloc(1024);
+ if (workstation === undefined) {
+ workstation = os.hostname().toUpperCase();
+ }
+ if (target === undefined) {
+ target = type2message.targetName;
+ }
+ //signature
+ buf.write(ntlm_constants_2.NtlmConstants.NTLM_SIGNATURE, 0, ntlm_constants_2.NtlmConstants.NTLM_SIGNATURE.length, 'ascii');
+ //message type
+ buf.writeUInt32LE(3, 8);
+ let targetLen = type2message.encoding === 'ascii' ? target.length : target.length * 2;
+ let usernameLen = type2message.encoding === 'ascii' ? username.length : username.length * 2;
+ let workstationLen = type2message.encoding === 'ascii' ? workstation.length : workstation.length * 2;
+ let dataPosOffset = targetLen + usernameLen + workstationLen;
+ let timestamp = '';
+ let client_nonce = '';
+ let withMic = false;
+ let withServerTimestamp = false;
+ if (type2message.version === 2 &&
+ type2message.targetInfo &&
+ type2message.targetInfo.parsed['SERVER_TIMESTAMP']) { // Must include MIC, add room for it
+ withServerTimestamp = true;
+ withMic = true;
+ dataPos += 16;
+ }
+ let hashDataPos = dataPos + dataPosOffset;
+ let ntlmHash = hash_1.Hash.createNTLMHash(password);
+ if (type2message.version === 2) {
+ client_nonce = client_nonce_override || hash_1.Hash.createPseudoRandomValue(16);
+ if (withServerTimestamp) { // Use server timestamp if provided
+ timestamp = type2message.targetInfo.parsed['SERVER_TIMESTAMP'];
+ }
+ else {
+ timestamp = timestamp_override || hash_1.Hash.createTimestamp();
+ }
+ let lmv2;
+ if (withServerTimestamp) {
+ lmv2 = Buffer.alloc(24); // zero-filled
+ }
+ else {
+ lmv2 = hash_1.Hash.createLMv2Response(type2message, username, target, ntlmHash, client_nonce);
+ }
+ //lmv2 security buffer
+ buf.writeUInt16LE(lmv2.length, 12);
+ buf.writeUInt16LE(lmv2.length, 14);
+ buf.writeUInt32LE(hashDataPos, 16);
+ lmv2.copy(buf, hashDataPos);
+ hashDataPos += lmv2.length;
+ let ntlmv2 = hash_1.Hash.createNTLMv2Response(type2message, username, target, ntlmHash, client_nonce, timestamp, withMic);
+ //ntlmv2 security buffer
+ buf.writeUInt16LE(ntlmv2.length, 20);
+ buf.writeUInt16LE(ntlmv2.length, 22);
+ buf.writeUInt32LE(hashDataPos, 24);
+ ntlmv2.copy(buf, hashDataPos);
+ hashDataPos += ntlmv2.length;
+ }
+ else {
+ let lmHash = hash_1.Hash.createLMHash(password);
+ let lm = hash_1.Hash.createLMResponse(type2message.challenge, lmHash);
+ let ntlm = hash_1.Hash.createNTLMResponse(type2message.challenge, ntlmHash);
+ //lm security buffer
+ buf.writeUInt16LE(lm.length, 12);
+ buf.writeUInt16LE(lm.length, 14);
+ buf.writeUInt32LE(hashDataPos, 16);
+ lm.copy(buf, hashDataPos);
+ hashDataPos += lm.length;
+ //ntlm security buffer
+ buf.writeUInt16LE(ntlm.length, 20);
+ buf.writeUInt16LE(ntlm.length, 22);
+ buf.writeUInt32LE(hashDataPos, 24);
+ ntlm.copy(buf, hashDataPos);
+ hashDataPos += ntlm.length;
+ }
+ //target name security buffer
+ buf.writeUInt16LE(targetLen, 28);
+ buf.writeUInt16LE(targetLen, 30);
+ buf.writeUInt32LE(dataPos, 32);
+ dataPos += buf.write(target, dataPos, type2message.encoding);
+ //user name security buffer
+ buf.writeUInt16LE(usernameLen, 36);
+ buf.writeUInt16LE(usernameLen, 38);
+ buf.writeUInt32LE(dataPos, 40);
+ dataPos += buf.write(username, dataPos, type2message.encoding);
+ //workstation name security buffer
+ buf.writeUInt16LE(workstationLen, 44);
+ buf.writeUInt16LE(workstationLen, 46);
+ buf.writeUInt32LE(dataPos, 48);
+ dataPos += buf.write(workstation, dataPos, type2message.encoding);
+ //session key security buffer
+ let session_key = Buffer.alloc(0);
+ // if (type2message.flags & NtlmFlags.NEGOTIATE_KEY_EXCHANGE) {
+ // session_key = hash.createRandomSessionKey(type2message, username, target, ntlmHash, client_nonce, timestamp, withMic);
+ // }
+ buf.writeUInt16LE(session_key.length, 52);
+ buf.writeUInt16LE(session_key.length, 54);
+ buf.writeUInt32LE(hashDataPos, 56);
+ session_key.copy(buf, hashDataPos);
+ hashDataPos += session_key.length;
+ //flags
+ buf.writeUInt32LE(type2message.flags, 60);
+ this.addVersionStruct(buf, 64);
+ if (withMic) {
+ // Calculate and add MIC
+ let mic = hash_1.Hash.createMIC(type1message.raw, type2message, buf.slice(0, hashDataPos), username, target, ntlmHash, client_nonce, timestamp);
+ mic.copy(buf, 72);
+ }
+ return new ntlm_message_1.NtlmMessage(buf.slice(0, hashDataPos));
+ //return 'NTLM ' + buf.toString('base64', 0, hashDataPos);
+ }
+ }
+ exports.Ntlm = Ntlm;
+});
define("tests/dynamicsMetadataTests", ["require", "exports", "Dynamics/DynamicsMetadata"], function (require, exports, DynamicsMetadata_1) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
@@ -805,12 +1559,19 @@ define("tests/dynamicsMetadataTests", ["require", "exports", "Dynamics/DynamicsM
}
exports.dynamicsMetadataRetrieveAll = dynamicsMetadataRetrieveAll;
});
-define("tests/dynamicsTests", ["require", "exports", "Dynamics/Dynamics", "Query/Query"], function (require, exports, Dynamics_4, Query_5) {
+define("tests/dynamicsTests", ["require", "exports", "Dynamics/Dynamics", "Query/Query", "Dynamics/DynamicsRequest"], function (require, exports, Dynamics_3, Query_5, DynamicsRequest_5) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function dynamicsTestAll() {
return __awaiter(this, void 0, void 0, function* () {
- const dyn = Dynamics_4.default();
+ const options = new DynamicsRequest_5.ConnectionOptions();
+ options.authType = DynamicsRequest_5.AuthenticationType.Windows;
+ options.username = "Administrator";
+ options.domain = "CONTOSO";
+ options.password = "{password}";
+ options.serverUrl = "http://{server}/{org}/";
+ options.webApiVersion = "v9.0";
+ const dyn = Dynamics_3.default(options);
/* Batch Request */
const allAccounts = yield dyn.batch()
.requestAllUrls(['/api/data/v9.1/accounts'])
@@ -871,3 +1632,4 @@ define("tests/queryTests", ["require", "exports", "Query/Query", "Query/QueryXml
}
exports.createQueryWithAllExpressions = createQueryWithAllExpressions;
});
+//# sourceMappingURL=more-xrm.js.map
\ No newline at end of file
diff --git a/lib/amd/more-xrm.js.map b/lib/amd/more-xrm.js.map
new file mode 100644
index 0000000..e30b96c
--- /dev/null
+++ b/lib/amd/more-xrm.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"more-xrm.js","sourceRoot":"","sources":["../../src/Query/Query.ts","../../src/Query/QueryXml.ts","../../src/Dynamics/DynamicsRequest.ts","../../src/Dynamics/DynamicsBatch.ts","../../src/Dynamics/Dynamics.ts","../../src/Dynamics/Model/OrganizationMetadata.ts","../../src/Dynamics/DynamicsDiscovery.ts","../../src/Dynamics/Model/EntityMetadata.ts","../../src/Dynamics/Model/AttributeMetadata.ts","../../src/Dynamics/Model/OptionSetMetadata.ts","../../src/Dynamics/DynamicsMetadata.ts","../../src/ntlm/ntlm.flags.ts","../../src/ntlm/ntlm.constants.ts","../../src/ntlm/type2.message.ts","../../src/ntlm/hash.ts","../../src/ntlm/ntlm.message.ts","../../src/ntlm/interfaces/i.ntlm.ts","../../src/ntlm/ntlm.ts","../../src/tests/dynamicsMetadataTests.ts","../../src/tests/dynamicsTests.ts","../../src/tests/queryTests.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/Dynamics.d.ts b/lib/commonjs/Dynamics/Dynamics.d.ts
index 510c564..8adc0aa 100644
--- a/lib/commonjs/Dynamics/Dynamics.d.ts
+++ b/lib/commonjs/Dynamics/Dynamics.d.ts
@@ -1,6 +1,7 @@
import { Query } from "../Query/Query";
import { DynamicsBatch } from "./DynamicsBatch";
-export declare const WebApiVersion = "v9.1";
+import { ConnectionOptions } from "./DynamicsRequest";
+export declare const DefaultWebApiVersion = "v9.1";
export declare const DefaultMaxRecords = 100;
export declare const DynamicsHeaders: {
'OData-MaxVersion': string;
@@ -17,4 +18,4 @@ export interface Dynamics {
query(entityLogicalName: string, entitySetName: string): Query;
save(entitySetName: string, data: any, id?: string): Promise;
}
-export default function dynamics(accessToken?: string): Dynamics;
+export default function dynamics(connectionOptions?: ConnectionOptions): Dynamics;
diff --git a/lib/commonjs/Dynamics/Dynamics.js b/lib/commonjs/Dynamics/Dynamics.js
index 665f4c5..01de861 100644
--- a/lib/commonjs/Dynamics/Dynamics.js
+++ b/lib/commonjs/Dynamics/Dynamics.js
@@ -3,31 +3,31 @@ Object.defineProperty(exports, "__esModule", { value: true });
const Query_1 = require("../Query/Query");
const DynamicsBatch_1 = require("./DynamicsBatch");
const DynamicsRequest_1 = require("./DynamicsRequest");
-exports.WebApiVersion = 'v9.1';
+exports.DefaultWebApiVersion = 'v9.1';
exports.DefaultMaxRecords = 100;
exports.DynamicsHeaders = {
'OData-MaxVersion': '4.0',
'OData-Version': '4.0',
'Prefer': 'odata.include-annotations=OData.Community.Display.V1.FormattedValue'
};
-function dynamics(accessToken) {
- return new DynamicsClient(accessToken);
+function dynamics(connectionOptions) {
+ return new DynamicsClient(connectionOptions);
}
exports.default = dynamics;
class DynamicsClient {
- constructor(accessToken) {
- this.dynamicsHeaders = accessToken && {
- 'Authorization': 'Bearer ' + accessToken
- };
+ constructor(options) {
+ if (options) {
+ this.connectionOptions = options;
+ }
}
batch() {
- return DynamicsBatch_1.dynamicsBatch(this.dynamicsHeaders);
+ return DynamicsBatch_1.dynamicsBatch(this.connectionOptions, this.dynamicsHeaders);
}
fetch(query, maxRowCount = exports.DefaultMaxRecords) {
- return DynamicsRequest_1.dynamicsQuery(query, maxRowCount, this.dynamicsHeaders);
+ return DynamicsRequest_1.dynamicsQuery(this.connectionOptions, query, maxRowCount, this.dynamicsHeaders);
}
optionset(entityName, attributeName) {
- return DynamicsRequest_1.dynamicsRequest(`/api/data/${exports.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes(LogicalName='${attributeName}')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet($select=Options),GlobalOptionSet($select=Options)`, this.dynamicsHeaders)
+ return DynamicsRequest_1.dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes(LogicalName='${attributeName}')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet($select=Options),GlobalOptionSet($select=Options)`, this.dynamicsHeaders)
.then(attribute => (attribute.OptionSet || attribute.GlobalOptionSet).Options.map((option) => ({
label: (option.Label && option.Label.UserLocalizedLabel && option.Label.UserLocalizedLabel.Label),
value: option.Value
@@ -37,6 +37,7 @@ class DynamicsClient {
return Query_1.default(entityLogicalName).path(entitySetName);
}
save(entitySetName, data, id) {
- return DynamicsRequest_1.dynamicsSave(entitySetName, data, id, this.dynamicsHeaders);
+ return DynamicsRequest_1.dynamicsSave(this.connectionOptions, entitySetName, data, id, this.dynamicsHeaders);
}
}
+//# sourceMappingURL=Dynamics.js.map
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/Dynamics.js.map b/lib/commonjs/Dynamics/Dynamics.js.map
new file mode 100644
index 0000000..1524153
--- /dev/null
+++ b/lib/commonjs/Dynamics/Dynamics.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Dynamics.js","sourceRoot":"","sources":["../../../src/Dynamics/Dynamics.ts"],"names":[],"mappings":";;AAAA,0CAA8C;AAC9C,mDAA+D;AAC/D,uDAAoG;AAEvF,QAAA,oBAAoB,GAAG,MAAM,CAAC;AAC9B,QAAA,iBAAiB,GAAG,GAAG,CAAC;AACxB,QAAA,eAAe,GAAG;IAC3B,kBAAkB,EAAE,KAAK;IACzB,eAAe,EAAE,KAAK;IACtB,QAAQ,EAAE,qEAAqE;CAClF,CAAC;AAUF,SAAwB,QAAQ,CAAC,iBAAqC;IAClE,OAAO,IAAI,cAAc,CAAC,iBAAiB,CAAC,CAAC;AACjD,CAAC;AAFD,2BAEC;AAGD,MAAM,cAAc;IAIhB,YAAY,OAA0B;QAClC,IAAI,OAAO,EACX;YACI,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;SACpC;IACL,CAAC;IAED,KAAK;QACD,OAAO,6BAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAI,KAAY,EAAE,cAAsB,yBAAiB;QAE1D,OAAO,+BAAa,CAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9F,CAAC;IAED,SAAS,CAAC,UAAe,EAAE,aAAkB;QAEzC,OAAO,iCAAe,CAAM,IAAI,CAAC,iBAAiB,EAAE,aAAa,IAAI,CAAC,iBAAiB,CAAC,aAAa,mCAAmC,UAAU,8BAA8B,aAAa,6IAA6I,EAAE,IAAI,CAAC,eAAe,CAAC;aAChW,IAAI,CAAC,SAAS,CAAC,EAAE,CACd,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,GAAG,CAC1D,CAAC,MAAwE,EAAE,EAAE,CAAC,CAAC;YAC3E,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,kBAAkB,IAAI,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACjG,KAAK,EAAE,MAAM,CAAC,KAAK;SACtB,CAAC,CACL,CACJ,CAAC;IACN,CAAC;IAED,KAAK,CAAC,iBAAyB,EAAE,aAAqB;QAElD,OAAO,eAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,aAAqB,EAAE,IAAS,EAAE,EAAW;QAC9C,OAAO,8BAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/F,CAAC;CACJ"}
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/DynamicsBatch.d.ts b/lib/commonjs/Dynamics/DynamicsBatch.d.ts
index 715fa4b..06b0748 100644
--- a/lib/commonjs/Dynamics/DynamicsBatch.d.ts
+++ b/lib/commonjs/Dynamics/DynamicsBatch.d.ts
@@ -1,6 +1,7 @@
import { Query } from "../Query/Query";
+import { ConnectionOptions } from "./DynamicsRequest";
export interface DynamicsBatch {
- execute(): Promise;
+ execute(): Promise;
request(query: Query, maxRowCount?: number): DynamicsBatch;
requestAll(queries: Query[]): DynamicsBatch;
requestAllUrls(urls: string[]): DynamicsBatch;
@@ -8,6 +9,6 @@ export interface DynamicsBatch {
createRelatedEntity(entitySetName: string, data: any, navigationPropertyName: string): void;
};
}
-export declare function dynamicsBatch(headers?: any): DynamicsBatch;
-export declare function dynamicsBatchRequest(...url: string[]): Promise;
-export declare function dynamicsBatchQuery(...query: Query[]): Promise;
+export declare function dynamicsBatch(connectionOptions: ConnectionOptions, headers?: any): DynamicsBatch;
+export declare function dynamicsBatchRequest(connectionOptions: ConnectionOptions, ...url: string[]): Promise;
+export declare function dynamicsBatchQuery(connectionOptions: ConnectionOptions, ...query: Query[]): Promise;
diff --git a/lib/commonjs/Dynamics/DynamicsBatch.js b/lib/commonjs/Dynamics/DynamicsBatch.js
index ccf9288..9b8e075 100644
--- a/lib/commonjs/Dynamics/DynamicsBatch.js
+++ b/lib/commonjs/Dynamics/DynamicsBatch.js
@@ -1,9 +1,10 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
@@ -12,39 +13,45 @@ const Query_1 = require("../Query/Query");
const QueryXml_1 = require("../Query/QueryXml");
const Dynamics_1 = require("./Dynamics");
const DynamicsRequest_1 = require("./DynamicsRequest");
-function dynamicsBatch(headers) {
- return new Batch(headers);
+const httpntlm = require("httpntlm");
+const node_fetch_1 = require("node-fetch");
+function dynamicsBatch(connectionOptions, headers) {
+ return new Batch(connectionOptions, headers);
}
exports.dynamicsBatch = dynamicsBatch;
-function dynamicsBatchRequest(...url) {
- const batch = new Batch();
+function dynamicsBatchRequest(connectionOptions, ...url) {
+ const batch = new Batch(connectionOptions);
batch.requestAllUrls(url);
return batch.execute();
}
exports.dynamicsBatchRequest = dynamicsBatchRequest;
-function dynamicsBatchQuery(...query) {
- const batch = new Batch();
+function dynamicsBatchQuery(connectionOptions, ...query) {
+ const batch = new Batch(connectionOptions);
batch.requestAll(query);
return batch.execute();
}
exports.dynamicsBatchQuery = dynamicsBatchQuery;
class Batch {
- constructor(headers) {
+ constructor(options, headers) {
+ this.options = options;
this.headers = headers;
+ this.ConnectionOptions = options;
this.Changes = [];
this.RelatedChanges = [];
}
execute() {
return __awaiter(this, void 0, void 0, function* () {
- const results = yield Batch.requestBatch(`/api/data/${Dynamics_1.WebApiVersion}/$batch`, this.Changes, this.headers);
+ const results = yield Batch.requestBatch(this.ConnectionOptions, `/api/data/${this.ConnectionOptions.webApiVersion}/$batch`, this.Changes, this.headers);
if (this.RelatedChanges.length > 0) {
for (let change of this.RelatedChanges) {
- let changeIndex = this.Changes.indexOf(change.relatedChange);
- let relatedId = results[changeIndex];
- change.entityData[`${change.relatedPropertyName}@odata.bind`] = `${change.relatedChange.entitySetName}(${Batch.trimId(relatedId)})`;
+ if (change !== undefined && change.relatedChange) {
+ let changeIndex = this.Changes.indexOf(change.relatedChange);
+ let relatedId = results !== undefined ? results[changeIndex] : undefined;
+ change.entityData[`${change.relatedPropertyName}@odata.bind`] = `${change.relatedChange.entitySetName}(${Batch.trimId(relatedId)})`;
+ }
}
- const related = yield Batch.requestBatch(`/api/data/${Dynamics_1.WebApiVersion}/$batch`, this.RelatedChanges, this.headers);
- return results.concat(related);
+ const related = yield Batch.requestBatch(this.ConnectionOptions, `/api/data/${this.ConnectionOptions.webApiVersion}/$batch`, this.RelatedChanges, this.headers);
+ return results !== undefined ? results.concat(related) : undefined;
}
else {
return results;
@@ -95,8 +102,9 @@ class Batch {
}
createRelatedEntity(entitySetName, data, navigationPropertyName) {
let lastChange = this.Changes[this.Changes.length - 1];
- if (!lastChange || lastChange.entityData == 'DELETE')
+ if (!lastChange || lastChange.entityData === 'DELETE') {
throw new Error('createRelatedEntity relies on the previous change which was not found in the batch.');
+ }
if (lastChange.entityId) {
data[`${navigationPropertyName}@odata.bind`] = `${lastChange.entitySetName}(${lastChange.entityId})`;
this.Changes.push({
@@ -113,16 +121,42 @@ class Batch {
});
}
}
- static requestBatch(url, requests, headers) {
+ static requestBatch(connectionOptions, url, requests, headers) {
+ let callUrl = connectionOptions.serverUrl;
+ if (callUrl.endsWith("/")) {
+ callUrl = callUrl.substr(0, callUrl.length - 1);
+ }
+ callUrl = `${callUrl}${url}`;
const batchId = Batch.createId();
- return fetch(url, {
- method: 'POST',
- headers: Object.assign({ 'Content-Type': `multipart/mixed;boundary=batch_${batchId}` }, Dynamics_1.DynamicsHeaders, headers),
- body: Batch.formatBatchRequest(batchId, requests)
- })
- .then(response => Batch.formatBatchResponse(response.text()));
+ if (connectionOptions.authType === DynamicsRequest_1.AuthenticationType.Windows) {
+ return new Promise((resolve, reject) => {
+ httpntlm.post({
+ url: callUrl,
+ username: connectionOptions.username,
+ password: connectionOptions.password,
+ workstation: connectionOptions.workstation || '',
+ domain: connectionOptions.domain || '',
+ body: Batch.formatBatchRequest(connectionOptions, batchId, requests),
+ headers: Object.assign(Object.assign({ 'Content-Type': `multipart/mixed;boundary=batch_${batchId}` }, Dynamics_1.DynamicsHeaders), headers)
+ }, function (err, res) {
+ if (err) {
+ console.error(err);
+ reject(err);
+ }
+ resolve(Batch.formatBatchResponse(res.responseText));
+ });
+ });
+ }
+ else {
+ return node_fetch_1.default(callUrl, {
+ method: 'POST',
+ headers: Object.assign(Object.assign({ 'Content-Type': `multipart/mixed;boundary=batch_${batchId}`, 'Authorization': connectionOptions.accessToken }, Dynamics_1.DynamicsHeaders), headers),
+ body: Batch.formatBatchRequest(connectionOptions, batchId, requests)
+ })
+ .then(response => Batch.formatBatchResponse(response.text()));
+ }
}
- static formatBatchRequest(batchId, changes) {
+ static formatBatchRequest(connectionOptions, batchId, changes) {
let batchBody = [];
let requestBody = [];
let changeNumber = 1;
@@ -137,7 +171,7 @@ class Batch {
requestBody.push('Content-Transfer-Encoding:binary');
requestBody.push('');
if (change.entitySetName) {
- requestBody.push(`GET ${encodeURI(`/api/data/${Dynamics_1.WebApiVersion}/${change.entitySetName}?${change.entitySetQuery}`)} HTTP/1.1`);
+ requestBody.push(`GET ${encodeURI(`/api/data/${connectionOptions.webApiVersion}/${change.entitySetName}?${change.entitySetQuery}`)} HTTP/1.1`);
}
else {
requestBody.push(`GET ${encodeURI(change.entitySetQuery)} HTTP/1.1`);
@@ -152,7 +186,7 @@ class Batch {
batchBody.push('Content-Transfer-Encoding:binary');
batchBody.push(`Content-ID: ${changeNumber++}`);
batchBody.push('');
- batchBody.push(`${change.entityId ? 'PATCH' : 'POST'} ${encodeURI(`/api/data/${Dynamics_1.WebApiVersion}/${change.entitySetName}(${Batch.trimId(change.entityId)})`)} HTTP/1.1`);
+ batchBody.push(`${change.entityId ? 'PATCH' : 'POST'} ${encodeURI(`/api/data/${connectionOptions.webApiVersion}/${change.entitySetName}(${Batch.trimId(change.entityId)})`)} HTTP/1.1`);
batchBody.push('Content-Type: application/json;type=entry');
batchBody.push('');
batchBody.push(JSON.stringify(change.entityData));
@@ -198,6 +232,10 @@ class Batch {
return 'id' + Math.random().toString(16).slice(2);
}
static trimId(id) {
- return (id || '').replace(/{|}/g, '');
+ if (id !== undefined) {
+ return (id || '').replace(/{|}/g, '');
+ }
+ return undefined;
}
}
+//# sourceMappingURL=DynamicsBatch.js.map
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/DynamicsBatch.js.map b/lib/commonjs/Dynamics/DynamicsBatch.js.map
new file mode 100644
index 0000000..53a0e5b
--- /dev/null
+++ b/lib/commonjs/Dynamics/DynamicsBatch.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"DynamicsBatch.js","sourceRoot":"","sources":["../../../src/Dynamics/DynamicsBatch.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/DynamicsDiscovery.d.ts b/lib/commonjs/Dynamics/DynamicsDiscovery.d.ts
new file mode 100644
index 0000000..6c531d2
--- /dev/null
+++ b/lib/commonjs/Dynamics/DynamicsDiscovery.d.ts
@@ -0,0 +1,8 @@
+import { ConnectionOptions } from "./DynamicsRequest";
+import { OrganizationMetadata } from "./Model/OrganizationMetadata";
+export declare type OrganizationMetadata = OrganizationMetadata;
+export declare const DefaultDiscoveryApiVersion = "v9.1";
+export default function dynamicsDiscovery(connectionOptions?: ConnectionOptions): DynamicsDiscovery;
+export interface DynamicsDiscovery {
+ discover(): Promise;
+}
diff --git a/lib/commonjs/Dynamics/DynamicsDiscovery.js b/lib/commonjs/Dynamics/DynamicsDiscovery.js
new file mode 100644
index 0000000..c35ce9e
--- /dev/null
+++ b/lib/commonjs/Dynamics/DynamicsDiscovery.js
@@ -0,0 +1,22 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const DynamicsRequest_1 = require("./DynamicsRequest");
+exports.DefaultDiscoveryApiVersion = 'v9.1';
+function dynamicsDiscovery(connectionOptions) {
+ return new DynamicsDiscoveryClient(connectionOptions);
+}
+exports.default = dynamicsDiscovery;
+class DynamicsDiscoveryClient {
+ constructor(options) {
+ if (options) {
+ this.connectionOptions = options;
+ if (!options.webApiVersion) {
+ this.connectionOptions.webApiVersion = exports.DefaultDiscoveryApiVersion;
+ }
+ }
+ }
+ discover() {
+ return DynamicsRequest_1.dynamicsRequest(this.connectionOptions, `/api/discovery/${this.connectionOptions.webApiVersion}/Instances`, this.dynamicsHeaders);
+ }
+}
+//# sourceMappingURL=DynamicsDiscovery.js.map
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/DynamicsDiscovery.js.map b/lib/commonjs/Dynamics/DynamicsDiscovery.js.map
new file mode 100644
index 0000000..7fa54de
--- /dev/null
+++ b/lib/commonjs/Dynamics/DynamicsDiscovery.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"DynamicsDiscovery.js","sourceRoot":"","sources":["../../../src/Dynamics/DynamicsDiscovery.ts"],"names":[],"mappings":";;AAAA,uDAAuE;AAK1D,QAAA,0BAA0B,GAAG,MAAM,CAAC;AAEjD,SAAwB,iBAAiB,CAAC,iBAAqC;IAC3E,OAAO,IAAI,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;AAC1D,CAAC;AAFD,oCAEC;AAMD,MAAM,uBAAuB;IAIzB,YAAY,OAA0B;QAClC,IAAI,OAAO,EACX;YACI,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;YAEjC,IAAI,CAAC,OAAO,CAAC,aAAa,EAC1B;gBACI,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAG,kCAA0B,CAAC;aACrE;SACJ;IACL,CAAC;IAED,QAAQ;QACJ,OAAO,iCAAe,CAAyB,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,IAAI,CAAC,iBAAiB,CAAC,aAAa,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACrK,CAAC;CACJ"}
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/DynamicsMetadata.d.ts b/lib/commonjs/Dynamics/DynamicsMetadata.d.ts
index e1c6ff1..c64f886 100644
--- a/lib/commonjs/Dynamics/DynamicsMetadata.d.ts
+++ b/lib/commonjs/Dynamics/DynamicsMetadata.d.ts
@@ -1,3 +1,4 @@
+import { ConnectionOptions } from "./DynamicsRequest";
import { AttributeMetadata, EntityAttributeMetadata, LookupAttributeMetadata } from "./Model/AttributeMetadata";
import { EntityMetadata } from "./Model/EntityMetadata";
import { OptionSetAttributeMetadata, OptionSetMetadata } from "./Model/OptionSetMetadata";
@@ -6,7 +7,7 @@ export declare type DynamicsAttributeMetadata = AnyAttributeMetadata;
export declare type DynamicsOptionSetMetadata = OptionSetMetadata;
export declare type DynamicsLookupAttributeMetadata = LookupAttributeMetadata;
export declare type DynamicsOptionSetAttributeMetadata = OptionSetAttributeMetadata;
-export default function dynamicsMetadata(accessToken?: string): DynamicsMetadata;
+export default function dynamicsmetdata(connectionOptions?: ConnectionOptions): DynamicsMetadata;
export declare function isLookupAttribute(attribute: DynamicsAttributeMetadata): attribute is DynamicsLookupAttributeMetadata;
export declare function isOptionSetAttribute(attribute: DynamicsAttributeMetadata): attribute is DynamicsOptionSetAttributeMetadata;
export interface DynamicsMetadata {
diff --git a/lib/commonjs/Dynamics/DynamicsMetadata.js b/lib/commonjs/Dynamics/DynamicsMetadata.js
index b9ebe80..de8a1e6 100644
--- a/lib/commonjs/Dynamics/DynamicsMetadata.js
+++ b/lib/commonjs/Dynamics/DynamicsMetadata.js
@@ -1,12 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-const Dynamics_1 = require("./Dynamics");
const DynamicsBatch_1 = require("./DynamicsBatch");
const DynamicsRequest_1 = require("./DynamicsRequest");
-function dynamicsMetadata(accessToken) {
- return new DynamicsMetadataClient(accessToken);
+function dynamicsmetdata(connectionOptions) {
+ return new DynamicsMetadataClient(connectionOptions);
}
-exports.default = dynamicsMetadata;
+exports.default = dynamicsmetdata;
function isLookupAttribute(attribute) {
return attribute.Type === 'Lookup' && attribute['LookupEntityName'];
}
@@ -50,31 +49,31 @@ const ExcludedAttributeNameFilters = [
'entityimage_timestamp'
];
class DynamicsMetadataClient {
- constructor(accessToken) {
- this.dynamicsHeaders = accessToken && {
- 'Authorization': 'Bearer ' + accessToken
- };
+ constructor(options) {
+ if (options) {
+ this.connectionOptions = options;
+ }
}
attributes(entityName) {
- return DynamicsBatch_1.dynamicsBatch(this.dynamicsHeaders)
+ return DynamicsBatch_1.dynamicsBatch(this.connectionOptions, this.dynamicsHeaders)
.requestAllUrls(this.getMetadataUrls(entityName, false))
.execute()
.then(data => this.flatten(data)
- .filter((attribute) => attribute.LogicalName.indexOf('yomi') === -1 || attribute.LogicalName.indexOf('base') != attribute.LogicalName.length - 4)
+ .filter((attribute) => attribute.LogicalName.indexOf('yomi') === -1 || attribute.LogicalName.indexOf('base') !== attribute.LogicalName.length - 4)
.map(DynamicsMetadataMapper.MapAttribute));
}
entities() {
- return DynamicsRequest_1.dynamicsRequest(`/api/data/${Dynamics_1.WebApiVersion}/EntityDefinitions?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
+ return DynamicsRequest_1.dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
.then(data => data
.map(entity => DynamicsMetadataMapper.MapEntity(entity)));
}
entity(entityName) {
- return DynamicsRequest_1.dynamicsRequest(`/api/data/${Dynamics_1.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
+ return DynamicsRequest_1.dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
.then(entity => this.attributes(entityName)
.then(attributes => DynamicsMetadataMapper.MapEntity(entity, attributes)));
}
entityAttributes(...entityNames) {
- return DynamicsBatch_1.dynamicsBatch(this.dynamicsHeaders)
+ return DynamicsBatch_1.dynamicsBatch(this.connectionOptions, this.dynamicsHeaders)
.requestAllUrls(this.flatten(entityNames.map(e => this.getMetadataUrls(e, true))))
.execute()
.then(data => {
@@ -86,7 +85,7 @@ class DynamicsMetadataClient {
currentEntity = DynamicsMetadataMapper.MapEntity(item);
entities.push(currentEntity);
}
- else if (item.LogicalName.indexOf('yomi') == -1 && item.LogicalName.indexOf('base') != item.LogicalName.length - 4) {
+ else if (item.LogicalName.indexOf('yomi') === -1 && item.LogicalName.indexOf('base') !== item.LogicalName.length - 4) {
currentEntity.Attributes.push(DynamicsMetadataMapper.MapAttribute(item));
}
}
@@ -97,12 +96,12 @@ class DynamicsMetadataClient {
const attributeTypeFilter = ExcludedAttributeTypeFilters.map(v => `AttributeType ne Microsoft.Dynamics.CRM.AttributeTypeCode'${v}'`).join(' and ');
const attributeNameFilter = ExcludedAttributeNameFilters.map(v => `LogicalName ne '${v}'`).join(' and ');
return [
- `/api/data/${Dynamics_1.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=${entityProperties}`,
- `/api/data/${Dynamics_1.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes?$select=${attributeProperties}&$filter=${attributeTypeFilter} and ${attributeNameFilter}`,
- `/api/data/${Dynamics_1.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=${attributeProperties},Targets`,
- `/api/data/${Dynamics_1.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
- `/api/data/${Dynamics_1.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StatusAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
- `/api/data/${Dynamics_1.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StateAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=${entityProperties}`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes?$select=${attributeProperties}&$filter=${attributeTypeFilter} and ${attributeNameFilter}`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=${attributeProperties},Targets`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StatusAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StateAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`
].slice(includeEntity ? 0 : 1);
}
flatten(values) {
@@ -145,3 +144,4 @@ function isLookup(attribute) {
function isOptionSet(attribute) {
return attribute['OptionSet'] && Array.isArray(attribute['OptionSet'].Options);
}
+//# sourceMappingURL=DynamicsMetadata.js.map
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/DynamicsMetadata.js.map b/lib/commonjs/Dynamics/DynamicsMetadata.js.map
new file mode 100644
index 0000000..7caa0dd
--- /dev/null
+++ b/lib/commonjs/Dynamics/DynamicsMetadata.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"DynamicsMetadata.js","sourceRoot":"","sources":["../../../src/Dynamics/DynamicsMetadata.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/DynamicsRequest.d.ts b/lib/commonjs/Dynamics/DynamicsRequest.d.ts
index a6d8062..9e1e264 100644
--- a/lib/commonjs/Dynamics/DynamicsRequest.d.ts
+++ b/lib/commonjs/Dynamics/DynamicsRequest.d.ts
@@ -1,6 +1,20 @@
import { Query } from "../Query/Query";
-export declare function dynamicsQuery(query: Query, maxRowCount?: number, headers?: any): Promise;
-export declare function dynamicsQueryUrl(dynamicsEntitySetUrl: string, query: Query, maxRowCount?: number, headers?: any): Promise;
-export declare function dynamicsRequest(dynamicsEntitySetUrl: string, headers?: any): Promise;
-export declare function dynamicsSave(entitySetName: string, data: any, id?: string, headers?: any): Promise;
+export declare enum AuthenticationType {
+ Windows = 1,
+ OAuth = 2
+}
+export declare class ConnectionOptions {
+ authType: AuthenticationType;
+ username?: string;
+ password?: string;
+ domain?: string;
+ workstation?: string;
+ accessToken?: string;
+ serverUrl: string;
+ webApiVersion: string;
+}
+export declare function dynamicsQuery(connectionOptions: ConnectionOptions, query: Query, maxRowCount?: number, headers?: any): Promise;
+export declare function dynamicsQueryUrl(connectionOptions: ConnectionOptions, dynamicsEntitySetUrl: string, query: Query, maxRowCount?: number, headers?: any): Promise;
+export declare function dynamicsRequest(connectionOptions: ConnectionOptions, dynamicsEntitySetUrl: string, headers?: any): Promise;
+export declare function dynamicsSave(connectionOptions: ConnectionOptions, entitySetName: string, data: any, id?: string, headers?: any): Promise;
export declare function formatDynamicsResponse(data: any): any;
diff --git a/lib/commonjs/Dynamics/DynamicsRequest.js b/lib/commonjs/Dynamics/DynamicsRequest.js
index 62fa14a..aae3eba 100644
--- a/lib/commonjs/Dynamics/DynamicsRequest.js
+++ b/lib/commonjs/Dynamics/DynamicsRequest.js
@@ -1,32 +1,64 @@
"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
Object.defineProperty(exports, "__esModule", { value: true });
const Query_1 = require("../Query/Query");
const QueryXml_1 = require("../Query/QueryXml");
const Dynamics_1 = require("./Dynamics");
-function dynamicsQuery(query, maxRowCount, headers) {
- const dataQuery = Query_1.GetRootQuery(query);
- if (!dataQuery.EntityPath) {
- throw new Error('dynamicsQuery requires a Query object with an EntityPath');
+const httpntlm = require("httpntlm");
+const node_fetch_1 = require("node-fetch");
+var AuthenticationType;
+(function (AuthenticationType) {
+ AuthenticationType[AuthenticationType["Windows"] = 1] = "Windows";
+ AuthenticationType[AuthenticationType["OAuth"] = 2] = "OAuth";
+})(AuthenticationType = exports.AuthenticationType || (exports.AuthenticationType = {}));
+class ConnectionOptions {
+ constructor() {
+ this.authType = AuthenticationType.OAuth;
+ this.serverUrl = "";
+ this.webApiVersion = Dynamics_1.DefaultWebApiVersion;
}
- return dynamicsQueryUrl(`/api/data/${Dynamics_1.WebApiVersion}/${dataQuery.EntityPath}`, query, maxRowCount, headers);
+}
+exports.ConnectionOptions = ConnectionOptions;
+function dynamicsQuery(connectionOptions, query, maxRowCount, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const dataQuery = Query_1.GetRootQuery(query);
+ if (!dataQuery.EntityPath) {
+ throw new Error('dynamicsQuery requires a Query object with an EntityPath');
+ }
+ return yield dynamicsQueryUrl(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${dataQuery.EntityPath}`, query, maxRowCount, headers);
+ });
}
exports.dynamicsQuery = dynamicsQuery;
-function dynamicsQueryUrl(dynamicsEntitySetUrl, query, maxRowCount, headers) {
- const querySeparator = (dynamicsEntitySetUrl.indexOf('?') > -1 ? '&' : '?');
- return request(`${dynamicsEntitySetUrl}${querySeparator}fetchXml=${escape(QueryXml_1.default(query, maxRowCount))}`, 'GET', undefined, headers);
+function dynamicsQueryUrl(connectionOptions, dynamicsEntitySetUrl, query, maxRowCount, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const querySeparator = (dynamicsEntitySetUrl.indexOf('?') > -1 ? '&' : '?');
+ return yield request(connectionOptions, `${dynamicsEntitySetUrl}${querySeparator}fetchXml=${escape(QueryXml_1.default(query, maxRowCount))}`, 'GET', undefined, headers);
+ });
}
exports.dynamicsQueryUrl = dynamicsQueryUrl;
-function dynamicsRequest(dynamicsEntitySetUrl, headers) {
- return request(dynamicsEntitySetUrl, 'GET', undefined, headers);
+function dynamicsRequest(connectionOptions, dynamicsEntitySetUrl, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return yield request(connectionOptions, dynamicsEntitySetUrl, 'GET', undefined, headers);
+ });
}
exports.dynamicsRequest = dynamicsRequest;
-function dynamicsSave(entitySetName, data, id, headers) {
- if (id) {
- return request(`/api/data/${Dynamics_1.WebApiVersion}/${entitySetName}(${trimId(id)})`, 'PATCH', data, headers);
- }
- else {
- return request(`/api/data/${Dynamics_1.WebApiVersion}/${entitySetName}()`, 'POST', data, headers);
- }
+function dynamicsSave(connectionOptions, entitySetName, data, id, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (id) {
+ return yield request(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${entitySetName}(${trimId(id)})`, 'PATCH', data, headers);
+ }
+ else {
+ return yield request(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${entitySetName}()`, 'POST', data, headers);
+ }
+ });
}
exports.dynamicsSave = dynamicsSave;
function formatDynamicsResponse(data) {
@@ -42,10 +74,10 @@ function formatDynamicsResponse(data) {
}
if (data) {
for (var item of data) {
- var row = {};
- for (var key in item) {
+ let row = {};
+ for (let key in item) {
var name = key;
- if (name.indexOf('@odata') == 0) {
+ if (name.indexOf('@odata') === 0) {
continue;
}
if (name.indexOf('transactioncurrencyid') > -1) {
@@ -53,12 +85,12 @@ function formatDynamicsResponse(data) {
}
if (name.indexOf('@') > -1) {
name = name.substring(0, name.indexOf('@'));
- if (name.indexOf('_') == 0) {
+ if (name.indexOf('_') === 0) {
name = name.slice(1, -6);
}
name += "_formatted";
}
- else if (name.indexOf('_') == 0) {
+ else if (name.indexOf('_') === 0) {
name = name.slice(1, -6);
}
if (name.indexOf('_x002e_') > -1) {
@@ -79,15 +111,56 @@ function formatDynamicsResponse(data) {
return items;
}
exports.formatDynamicsResponse = formatDynamicsResponse;
-function request(url, method, body, headers) {
- return fetch(url, {
- method: method,
- headers: Object.assign({ 'Content-Type': 'application/json; charset=utf-8' }, Dynamics_1.DynamicsHeaders, headers),
- body: body
- })
- .then(response => response.json())
- .then(data => formatDynamicsResponse(data));
+function request(connectionOptions, url, method, body, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let callUrl = connectionOptions.serverUrl;
+ if (callUrl.endsWith("/")) {
+ callUrl = callUrl.substr(0, callUrl.length - 1);
+ }
+ callUrl = `${callUrl}${url}`;
+ //TODO: fetch if we can.
+ if (connectionOptions.authType === AuthenticationType.Windows) {
+ return new Promise((resolve, reject) => {
+ httpntlm[method.toLowerCase()]({
+ url: callUrl,
+ username: connectionOptions.username,
+ password: connectionOptions.password,
+ workstation: connectionOptions.workstation || '',
+ domain: connectionOptions.domain || '',
+ body: body,
+ headers: Object.assign(Object.assign({ 'Content-Type': 'application/json; charset=utf-8' }, Dynamics_1.DynamicsHeaders), headers)
+ }, function (err, res) {
+ if (err) {
+ console.error(err);
+ reject(err);
+ }
+ const json = JSON.parse(res.body);
+ if (json.error) {
+ console.error(json.error.message);
+ reject(json.error.message);
+ }
+ else if (json.ExceptionMessage) {
+ console.error(json.ExceptionMessage);
+ reject(`The service call returned HTTP ${json.ErrorCode} - ${json.ExceptionMessage}`);
+ }
+ else {
+ resolve(formatDynamicsResponse(json));
+ }
+ });
+ });
+ }
+ else {
+ return node_fetch_1.default(url, {
+ method: method,
+ headers: Object.assign(Object.assign({ 'Authorization': `Bearer ${connectionOptions.accessToken}`, 'Content-Type': 'application/json; charset=utf-8' }, Dynamics_1.DynamicsHeaders), headers),
+ body: body
+ })
+ .then(response => response.json())
+ .then(data => formatDynamicsResponse(data));
+ }
+ });
}
function trimId(id) {
return (id || '').replace(/{|}/g, '');
}
+//# sourceMappingURL=DynamicsRequest.js.map
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/DynamicsRequest.js.map b/lib/commonjs/Dynamics/DynamicsRequest.js.map
new file mode 100644
index 0000000..0d3bfc4
--- /dev/null
+++ b/lib/commonjs/Dynamics/DynamicsRequest.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"DynamicsRequest.js","sourceRoot":"","sources":["../../../src/Dynamics/DynamicsRequest.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/Model/AttributeMetadata.js b/lib/commonjs/Dynamics/Model/AttributeMetadata.js
index a892b1d..8de72fa 100644
--- a/lib/commonjs/Dynamics/Model/AttributeMetadata.js
+++ b/lib/commonjs/Dynamics/Model/AttributeMetadata.js
@@ -17,3 +17,4 @@ exports.AttributeTypeCodes = [
'Status',
'String'
];
+//# sourceMappingURL=AttributeMetadata.js.map
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/Model/AttributeMetadata.js.map b/lib/commonjs/Dynamics/Model/AttributeMetadata.js.map
new file mode 100644
index 0000000..36dc13c
--- /dev/null
+++ b/lib/commonjs/Dynamics/Model/AttributeMetadata.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"AttributeMetadata.js","sourceRoot":"","sources":["../../../../src/Dynamics/Model/AttributeMetadata.ts"],"names":[],"mappings":";;AAoCa,QAAA,kBAAkB,GAAG;IAC9B,QAAQ;IACR,SAAS;IACT,UAAU;IACV,UAAU;IACV,SAAS;IACT,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,MAAM;IACN,OAAO;IACP,WAAW;IACX,UAAU;IACV,OAAO;IACP,QAAQ;IACR,QAAQ;CACX,CAAC"}
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/Model/EntityMetadata.js b/lib/commonjs/Dynamics/Model/EntityMetadata.js
index c8ad2e5..b0421ce 100644
--- a/lib/commonjs/Dynamics/Model/EntityMetadata.js
+++ b/lib/commonjs/Dynamics/Model/EntityMetadata.js
@@ -1,2 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=EntityMetadata.js.map
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/Model/EntityMetadata.js.map b/lib/commonjs/Dynamics/Model/EntityMetadata.js.map
new file mode 100644
index 0000000..26dfcd7
--- /dev/null
+++ b/lib/commonjs/Dynamics/Model/EntityMetadata.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"EntityMetadata.js","sourceRoot":"","sources":["../../../../src/Dynamics/Model/EntityMetadata.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/Model/OptionSetMetadata.js b/lib/commonjs/Dynamics/Model/OptionSetMetadata.js
index c8ad2e5..5ad45d2 100644
--- a/lib/commonjs/Dynamics/Model/OptionSetMetadata.js
+++ b/lib/commonjs/Dynamics/Model/OptionSetMetadata.js
@@ -1,2 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=OptionSetMetadata.js.map
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/Model/OptionSetMetadata.js.map b/lib/commonjs/Dynamics/Model/OptionSetMetadata.js.map
new file mode 100644
index 0000000..8410470
--- /dev/null
+++ b/lib/commonjs/Dynamics/Model/OptionSetMetadata.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"OptionSetMetadata.js","sourceRoot":"","sources":["../../../../src/Dynamics/Model/OptionSetMetadata.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/Model/OrganizationMetadata.d.ts b/lib/commonjs/Dynamics/Model/OrganizationMetadata.d.ts
new file mode 100644
index 0000000..15e6602
--- /dev/null
+++ b/lib/commonjs/Dynamics/Model/OrganizationMetadata.d.ts
@@ -0,0 +1,11 @@
+export interface OrganizationMetadata {
+ Id?: string;
+ UniqueName?: string;
+ UrlName?: string;
+ FriendlyName?: string;
+ State?: number;
+ Version?: string;
+ Uri?: string;
+ AppUri?: string;
+ LastUpdated?: Date;
+}
diff --git a/lib/commonjs/Dynamics/Model/OrganizationMetadata.js b/lib/commonjs/Dynamics/Model/OrganizationMetadata.js
new file mode 100644
index 0000000..67b0407
--- /dev/null
+++ b/lib/commonjs/Dynamics/Model/OrganizationMetadata.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=OrganizationMetadata.js.map
\ No newline at end of file
diff --git a/lib/commonjs/Dynamics/Model/OrganizationMetadata.js.map b/lib/commonjs/Dynamics/Model/OrganizationMetadata.js.map
new file mode 100644
index 0000000..c636362
--- /dev/null
+++ b/lib/commonjs/Dynamics/Model/OrganizationMetadata.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"OrganizationMetadata.js","sourceRoot":"","sources":["../../../../src/Dynamics/Model/OrganizationMetadata.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/lib/commonjs/Query/Query.d.ts b/lib/commonjs/Query/Query.d.ts
index d9ab90a..af078d7 100644
--- a/lib/commonjs/Query/Query.d.ts
+++ b/lib/commonjs/Query/Query.d.ts
@@ -19,6 +19,7 @@ export interface DataQueryJoin extends DataQuery {
IsOuterJoin?: boolean;
}
export interface Query {
+ [key: string]: any;
alias(attributeName: string, alias: string): Query;
path(entityPath: string): Query;
select(...attributeNames: string[]): Query;
diff --git a/lib/commonjs/Query/Query.js b/lib/commonjs/Query/Query.js
index 12e3fec..81a20f8 100644
--- a/lib/commonjs/Query/Query.js
+++ b/lib/commonjs/Query/Query.js
@@ -68,7 +68,7 @@ class QueryProvider {
return this;
}
whereAny(any) {
- var conditions = [];
+ let conditions = [];
any((attributeName, operator, ...values) => {
conditions.push({
AttributeName: attributeName,
@@ -103,3 +103,4 @@ class QueryProvider {
return [].concat(...values);
}
}
+//# sourceMappingURL=Query.js.map
\ No newline at end of file
diff --git a/lib/commonjs/Query/Query.js.map b/lib/commonjs/Query/Query.js.map
new file mode 100644
index 0000000..629e029
--- /dev/null
+++ b/lib/commonjs/Query/Query.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Query.js","sourceRoot":"","sources":["../../../src/Query/Query.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/commonjs/Query/QueryXml.js b/lib/commonjs/Query/QueryXml.js
index c2aa88f..0daa234 100644
--- a/lib/commonjs/Query/QueryXml.js
+++ b/lib/commonjs/Query/QueryXml.js
@@ -35,7 +35,7 @@ function getQueryXml(query) {
}
});
query.OrderBy.forEach(attribute => {
- if (attribute.indexOf('_') == 0) {
+ if (attribute.indexOf('_') === 0) {
xml.push(``);
}
else {
@@ -112,16 +112,21 @@ function getConditionXml(condition) {
return xml.join('\n');
}
function encodeValue(value) {
- if (value === 0)
+ if (value === 0) {
return '0';
- if (value === true)
+ }
+ if (value === true) {
return 'true';
- if (value === false)
+ }
+ if (value === false) {
return 'false';
- if (!value)
+ }
+ if (!value) {
return '';
- if (typeof (value.toISOString) === 'function')
+ }
+ if (typeof (value.toISOString) === 'function') {
return value.toISOString();
+ }
return xmlEncode(value.toString());
}
function xmlEncode(text) {
@@ -140,8 +145,9 @@ function formatXml(xmlString) {
return xmlString.replace(/\s*<[^>\/]*>[^<>]*<\/[^>]*>|\s*<.+?>|\s*[^<]+/g, //pattern to match nodes (angled brackets or text)
function (m, i) {
m = m.replace(/^\s+|\s+$/g, ""); //trim the match just in case
- if (i < 38 && /^<[?]xml/.test(m))
- return m + "\n"; //if the match is a header, ignore it
+ if (i < 38 && /^<[?]xml/.test(m)) {
+ return m + "\n";
+ } //if the match is a header, ignore it
if (/^<[/]/.test(m)) //if the match is a closing tag
{
tabs = tabs.replace(indent, ""); //remove one indent from the store
@@ -166,3 +172,4 @@ function formatXml(xmlString) {
return "\n" + m; //content has additional space(match) from header
});
}
+//# sourceMappingURL=QueryXml.js.map
\ No newline at end of file
diff --git a/lib/commonjs/Query/QueryXml.js.map b/lib/commonjs/Query/QueryXml.js.map
new file mode 100644
index 0000000..b9e98e2
--- /dev/null
+++ b/lib/commonjs/Query/QueryXml.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"QueryXml.js","sourceRoot":"","sources":["../../../src/Query/QueryXml.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/commonjs/ntlm/hash.d.ts b/lib/commonjs/ntlm/hash.d.ts
new file mode 100644
index 0000000..726df27
--- /dev/null
+++ b/lib/commonjs/ntlm/hash.d.ts
@@ -0,0 +1,16 @@
+///
+import { Type2Message } from './type2.message';
+export declare class Hash {
+ static createLMResponse(challenge: Buffer, lmhash: Buffer): Buffer;
+ static createLMHash(password: string): Buffer;
+ static calculateDES(key: Buffer, message: Buffer): Buffer;
+ static createNTLMResponse(challenge: Buffer, ntlmhash: Buffer): Buffer;
+ static createNTLMHash(password: string): Buffer;
+ static createNTLMv2Hash(ntlmhash: Buffer, username: string, authTargetName: string): Buffer;
+ static createLMv2Response(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string): Buffer;
+ static createNTLMv2Response(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string, withMic: boolean): Buffer;
+ static createMIC(type1message: Buffer, type2message: Type2Message, type3message: Buffer, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string): Buffer;
+ static createRandomSessionKey(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string, withMic: boolean): Buffer;
+ static createPseudoRandomValue(length: number): string;
+ static createTimestamp(): string;
+}
diff --git a/lib/commonjs/ntlm/hash.js b/lib/commonjs/ntlm/hash.js
new file mode 100644
index 0000000..b950f0f
--- /dev/null
+++ b/lib/commonjs/ntlm/hash.js
@@ -0,0 +1,161 @@
+'use strict';
+Object.defineProperty(exports, "__esModule", { value: true });
+const crypto = require("crypto");
+class Hash {
+ static createLMResponse(challenge, lmhash) {
+ let buf = Buffer.alloc(24);
+ let pwBuffer = Buffer.alloc(21).fill(0);
+ lmhash.copy(pwBuffer);
+ Hash.calculateDES(pwBuffer.slice(0, 7), challenge).copy(buf);
+ Hash.calculateDES(pwBuffer.slice(7, 14), challenge).copy(buf, 8);
+ Hash.calculateDES(pwBuffer.slice(14), challenge).copy(buf, 16);
+ return buf;
+ }
+ static createLMHash(password) {
+ let buf = Buffer.alloc(16), pwBuffer = Buffer.alloc(14), magicKey = Buffer.from('KGS!@#$%', 'ascii');
+ if (password.length > 14) {
+ buf.fill(0);
+ return buf;
+ }
+ pwBuffer.fill(0);
+ pwBuffer.write(password.toUpperCase(), 0, 'ascii');
+ return Buffer.concat([
+ Hash.calculateDES(pwBuffer.slice(0, 7), magicKey),
+ Hash.calculateDES(pwBuffer.slice(7), magicKey)
+ ]);
+ }
+ static calculateDES(key, message) {
+ let desKey = Buffer.alloc(8);
+ desKey[0] = key[0] & 0xFE;
+ desKey[1] = ((key[0] << 7) & 0xFF) | (key[1] >> 1);
+ desKey[2] = ((key[1] << 6) & 0xFF) | (key[2] >> 2);
+ desKey[3] = ((key[2] << 5) & 0xFF) | (key[3] >> 3);
+ desKey[4] = ((key[3] << 4) & 0xFF) | (key[4] >> 4);
+ desKey[5] = ((key[4] << 3) & 0xFF) | (key[5] >> 5);
+ desKey[6] = ((key[5] << 2) & 0xFF) | (key[6] >> 6);
+ desKey[7] = (key[6] << 1) & 0xFF;
+ for (let i = 0; i < 8; i++) {
+ let parity = 0;
+ for (let j = 1; j < 8; j++) {
+ parity += (desKey[i] >> j) % 2;
+ }
+ desKey[i] |= (parity % 2) === 0 ? 1 : 0;
+ }
+ let des = crypto.createCipheriv('DES-ECB', desKey, '');
+ return des.update(message);
+ }
+ static createNTLMResponse(challenge, ntlmhash) {
+ let buf = Buffer.alloc(24), ntlmBuffer = Buffer.alloc(21).fill(0);
+ ntlmhash.copy(ntlmBuffer);
+ Hash.calculateDES(ntlmBuffer.slice(0, 7), challenge).copy(buf);
+ Hash.calculateDES(ntlmBuffer.slice(7, 14), challenge).copy(buf, 8);
+ Hash.calculateDES(ntlmBuffer.slice(14), challenge).copy(buf, 16);
+ return buf;
+ }
+ static createNTLMHash(password) {
+ let md4sum = crypto.createHash('md4');
+ md4sum.update(Buffer.from(password, 'ucs2')); // lgtm[js/insufficient-password-hash]
+ return md4sum.digest();
+ }
+ static createNTLMv2Hash(ntlmhash, username, authTargetName) {
+ let hmac = crypto.createHmac('md5', ntlmhash);
+ hmac.update(Buffer.from(username.toUpperCase() + authTargetName, 'ucs2')); // lgtm[js/weak-cryptographic-algorithm]
+ return hmac.digest();
+ }
+ static createLMv2Response(type2message, username, authTargetName, ntlmhash, nonce) {
+ let buf = Buffer.alloc(24);
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+ //server challenge
+ type2message.challenge.copy(buf, 8);
+ //client nonce
+ buf.write(nonce, 16, 'hex');
+ //create hash
+ hmac.update(buf.slice(8));
+ let hashedBuffer = hmac.digest();
+ hashedBuffer.copy(buf);
+ return buf;
+ }
+ static createNTLMv2Response(type2message, username, authTargetName, ntlmhash, nonce, timestamp, withMic) {
+ let bufferSize = 48 + type2message.targetInfo.buffer.length;
+ if (withMic) {
+ bufferSize += 8;
+ }
+ let buf = Buffer.alloc(bufferSize), ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName), hmac = crypto.createHmac('md5', ntlm2hash);
+ //the first 8 bytes are spare to store the hashed value before the blob
+ //server challenge
+ type2message.challenge.copy(buf, 8);
+ //blob signature
+ buf.writeUInt32BE(0x01010000, 16);
+ //reserved
+ buf.writeUInt32LE(0, 20);
+ //timestamp
+ let timestampLow = Number('0x' + timestamp.substring(Math.max(0, timestamp.length - 8)));
+ let timestampHigh = Number('0x' + timestamp.substring(0, Math.max(0, timestamp.length - 8)));
+ buf.writeUInt32LE(timestampLow, 24);
+ buf.writeUInt32LE(timestampHigh, 28);
+ //random client nonce
+ buf.write(nonce, 32, 'hex');
+ //zero
+ buf.writeUInt32LE(0, 40);
+ //complete target information block from type 2 message
+ type2message.targetInfo.buffer.copy(buf, 44);
+ let bufferPos = 44 + type2message.targetInfo.buffer.length;
+ if (withMic) {
+ // Should include MIC in response, indicate it in AV_FLAGS
+ buf.writeUInt16LE(0x06, bufferPos - 4);
+ buf.writeUInt16LE(0x04, bufferPos - 2);
+ buf.writeUInt32LE(0x02, bufferPos);
+ // Write new endblock
+ buf.writeUInt32LE(0, bufferPos + 4);
+ bufferPos += 8;
+ }
+ //zero
+ buf.writeUInt32LE(0, bufferPos);
+ hmac.update(buf.slice(8));
+ let hashedBuffer = hmac.digest();
+ hashedBuffer.copy(buf);
+ return buf;
+ }
+ static createMIC(type1message, type2message, type3message, username, authTargetName, ntlmhash, nonce, timestamp) {
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let ntlm2response = Hash.createNTLMv2Response(type2message, username, authTargetName, ntlmhash, nonce, timestamp, true);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+ let session_base_key = hmac.update(ntlm2response.slice(0, 16)).digest();
+ let key_exchange_key = session_base_key;
+ //create MIC hash
+ hmac = crypto.createHmac('md5', key_exchange_key);
+ hmac.update(type1message);
+ hmac.update(type2message.raw);
+ hmac.update(type3message);
+ let hashedBuffer = hmac.digest();
+ return hashedBuffer;
+ }
+ static createRandomSessionKey(type2message, username, authTargetName, ntlmhash, nonce, timestamp, withMic) {
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let ntlm2response = Hash.createNTLMv2Response(type2message, username, authTargetName, ntlmhash, nonce, timestamp, withMic);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+ let session_base_key = hmac.update(ntlm2response.slice(0, 16)).digest();
+ let key_exchange_key = session_base_key;
+ let exported_session_key_hex = Hash.createPseudoRandomValue(32);
+ let exported_session_key = Buffer.from(exported_session_key_hex, 'hex');
+ let rc4 = crypto.createCipheriv('rc4', key_exchange_key, '');
+ let encrypted_random_session_key = rc4.update(exported_session_key);
+ return encrypted_random_session_key;
+ }
+ static createPseudoRandomValue(length) {
+ let str = '';
+ while (str.length < length) {
+ str += Math.floor(Math.random() * 16).toString(16);
+ }
+ return str;
+ }
+ static createTimestamp() {
+ //TODO: we are loosing precision here since js is not able to handle those large integers
+ // maybe think about a different solution here
+ // 11644473600000 = diff between 1970 and 1601
+ return ((Date.now() + 11644473600000) * 10000).toString(16);
+ }
+}
+exports.Hash = Hash;
+//# sourceMappingURL=hash.js.map
\ No newline at end of file
diff --git a/lib/commonjs/ntlm/hash.js.map b/lib/commonjs/ntlm/hash.js.map
new file mode 100644
index 0000000..61ade75
--- /dev/null
+++ b/lib/commonjs/ntlm/hash.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../src/ntlm/hash.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/commonjs/ntlm/interfaces/i.ntlm.d.ts b/lib/commonjs/ntlm/interfaces/i.ntlm.d.ts
new file mode 100644
index 0000000..855a424
--- /dev/null
+++ b/lib/commonjs/ntlm/interfaces/i.ntlm.d.ts
@@ -0,0 +1,7 @@
+import { Type2Message } from "../type2.message";
+import { NtlmMessage } from "../ntlm.message";
+export interface INtlm {
+ createType1Message(ntlm_version: number, workstation: string | undefined, target: string | undefined): NtlmMessage;
+ decodeType2Message(str: string | undefined): Type2Message;
+ createType3Message(type1message: NtlmMessage, type2Message: Type2Message, username: string, password: string, workstation: string | undefined, target: string | undefined, client_nonce: string | undefined, timestamp: string | undefined): NtlmMessage;
+}
diff --git a/lib/commonjs/ntlm/interfaces/i.ntlm.js b/lib/commonjs/ntlm/interfaces/i.ntlm.js
new file mode 100644
index 0000000..f0f9bdf
--- /dev/null
+++ b/lib/commonjs/ntlm/interfaces/i.ntlm.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=i.ntlm.js.map
\ No newline at end of file
diff --git a/lib/commonjs/ntlm/interfaces/i.ntlm.js.map b/lib/commonjs/ntlm/interfaces/i.ntlm.js.map
new file mode 100644
index 0000000..fc3fbdc
--- /dev/null
+++ b/lib/commonjs/ntlm/interfaces/i.ntlm.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"i.ntlm.js","sourceRoot":"","sources":["../../../../src/ntlm/interfaces/i.ntlm.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/lib/commonjs/ntlm/ntlm.constants.d.ts b/lib/commonjs/ntlm/ntlm.constants.d.ts
new file mode 100644
index 0000000..0a98088
--- /dev/null
+++ b/lib/commonjs/ntlm/ntlm.constants.d.ts
@@ -0,0 +1,3 @@
+export declare class NtlmConstants {
+ static readonly NTLM_SIGNATURE = "NTLMSSP\0";
+}
diff --git a/lib/commonjs/ntlm/ntlm.constants.js b/lib/commonjs/ntlm/ntlm.constants.js
new file mode 100644
index 0000000..88c19ca
--- /dev/null
+++ b/lib/commonjs/ntlm/ntlm.constants.js
@@ -0,0 +1,7 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+class NtlmConstants {
+}
+exports.NtlmConstants = NtlmConstants;
+NtlmConstants.NTLM_SIGNATURE = 'NTLMSSP\0';
+//# sourceMappingURL=ntlm.constants.js.map
\ No newline at end of file
diff --git a/lib/commonjs/ntlm/ntlm.constants.js.map b/lib/commonjs/ntlm/ntlm.constants.js.map
new file mode 100644
index 0000000..5061a7d
--- /dev/null
+++ b/lib/commonjs/ntlm/ntlm.constants.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ntlm.constants.js","sourceRoot":"","sources":["../../../src/ntlm/ntlm.constants.ts"],"names":[],"mappings":";;AAAA,MAAa,aAAa;;AAA1B,sCAEC;AADiB,4BAAc,GAAG,WAAW,CAAC"}
\ No newline at end of file
diff --git a/lib/commonjs/ntlm/ntlm.d.ts b/lib/commonjs/ntlm/ntlm.d.ts
new file mode 100644
index 0000000..0a12dbc
--- /dev/null
+++ b/lib/commonjs/ntlm/ntlm.d.ts
@@ -0,0 +1,10 @@
+import { INtlm } from './interfaces/i.ntlm';
+import { Type2Message } from './type2.message';
+import { NtlmMessage } from './ntlm.message';
+export default function ntlm(): INtlm;
+export declare class Ntlm implements INtlm {
+ createType1Message(ntlm_version: number, workstation: string | undefined, target: string | undefined): NtlmMessage;
+ private addVersionStruct;
+ decodeType2Message(str: string | undefined): Type2Message;
+ createType3Message(type1message: NtlmMessage, type2message: Type2Message, username: string, password: string, workstation: string | undefined, target: string | undefined, client_nonce_override: string | undefined, timestamp_override: string | undefined): NtlmMessage;
+}
diff --git a/lib/commonjs/ntlm/ntlm.flags.d.ts b/lib/commonjs/ntlm/ntlm.flags.d.ts
new file mode 100644
index 0000000..37c462f
--- /dev/null
+++ b/lib/commonjs/ntlm/ntlm.flags.d.ts
@@ -0,0 +1,28 @@
+export declare enum NtlmFlags {
+ NEGOTIATE_UNICODE = 1,
+ NEGOTIATE_OEM = 2,
+ REQUEST_TARGET = 4,
+ NEGOTIATE_SIGN = 16,
+ NEGOTIATE_SEAL = 32,
+ NEGOTIATE_DATAGRAM_STYLE = 64,
+ NEGOTIATE_LM_KEY = 128,
+ NEGOTIATE_NETWARE = 256,
+ NEGOTIATE_NTLM_KEY = 512,
+ NEGOTIATE_ANONYMOUS = 2048,
+ NEGOTIATE_DOMAIN_SUPPLIED = 4096,
+ NEGOTIATE_WORKSTATION_SUPPLIED = 8192,
+ NEGOTIATE_LOCAL_CALL = 16384,
+ NEGOTIATE_ALWAYS_SIGN = 32768,
+ TARGET_TYPE_DOMAIN = 65536,
+ TARGET_TYPE_SERVER = 131072,
+ TARGET_TYPE_SHARE = 262144,
+ NEGOTIATE_NTLM2_KEY = 524288,
+ REQUEST_INIT_RESPONSE = 1048576,
+ REQUEST_ACCEPT_RESPONSE = 2097152,
+ REQUEST_NONNT_SESSION_KEY = 4194304,
+ NEGOTIATE_TARGET_INFO = 8388608,
+ NEGOTIATE_VERSION = 33554432,
+ NEGOTIATE_128 = 536870912,
+ NEGOTIATE_KEY_EXCHANGE = 1073741824,
+ NEGOTIATE_56 = -2147483648
+}
diff --git a/lib/commonjs/ntlm/ntlm.flags.js b/lib/commonjs/ntlm/ntlm.flags.js
new file mode 100644
index 0000000..db3c6fa
--- /dev/null
+++ b/lib/commonjs/ntlm/ntlm.flags.js
@@ -0,0 +1,83 @@
+'use strict';
+Object.defineProperty(exports, "__esModule", { value: true });
+var NtlmFlags;
+(function (NtlmFlags) {
+ /* Indicates that Unicode strings are supported for use in security buffer
+ data. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_UNICODE"] = 1] = "NEGOTIATE_UNICODE";
+ /* Indicates that OEM strings are supported for use in security buffer data. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_OEM"] = 2] = "NEGOTIATE_OEM";
+ /* Requests that the server's authentication realm be included in the Type 2
+ message. */
+ NtlmFlags[NtlmFlags["REQUEST_TARGET"] = 4] = "REQUEST_TARGET";
+ /* unknown (1<<3) */
+ /* Specifies that authenticated communication between the client and server
+ should carry a digital signature (message integrity). */
+ NtlmFlags[NtlmFlags["NEGOTIATE_SIGN"] = 16] = "NEGOTIATE_SIGN";
+ /* Specifies that authenticated communication between the client and server
+ should be encrypted (message confidentiality). */
+ NtlmFlags[NtlmFlags["NEGOTIATE_SEAL"] = 32] = "NEGOTIATE_SEAL";
+ /* Indicates that datagram authentication is being used. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_DATAGRAM_STYLE"] = 64] = "NEGOTIATE_DATAGRAM_STYLE";
+ /* Indicates that the LAN Manager session key should be used for signing and
+ sealing authenticated communications. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_LM_KEY"] = 128] = "NEGOTIATE_LM_KEY";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["NEGOTIATE_NETWARE"] = 256] = "NEGOTIATE_NETWARE";
+ /* Indicates that NTLM authentication is being used. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_NTLM_KEY"] = 512] = "NEGOTIATE_NTLM_KEY";
+ /* unknown (1<<10) */
+ /* Sent by the client in the Type 3 message to indicate that an anonymous
+ context has been established. This also affects the response fields. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_ANONYMOUS"] = 2048] = "NEGOTIATE_ANONYMOUS";
+ /* Sent by the client in the Type 1 message to indicate that a desired
+ authentication realm is included in the message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_DOMAIN_SUPPLIED"] = 4096] = "NEGOTIATE_DOMAIN_SUPPLIED";
+ /* Sent by the client in the Type 1 message to indicate that the client
+ workstation's name is included in the message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_WORKSTATION_SUPPLIED"] = 8192] = "NEGOTIATE_WORKSTATION_SUPPLIED";
+ /* Sent by the server to indicate that the server and client are on the same
+ machine. Implies that the client may use a pre-established local security
+ context rather than responding to the challenge. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_LOCAL_CALL"] = 16384] = "NEGOTIATE_LOCAL_CALL";
+ /* Indicates that authenticated communication between the client and server
+ should be signed with a "dummy" signature. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_ALWAYS_SIGN"] = 32768] = "NEGOTIATE_ALWAYS_SIGN";
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a domain. */
+ NtlmFlags[NtlmFlags["TARGET_TYPE_DOMAIN"] = 65536] = "TARGET_TYPE_DOMAIN";
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a server. */
+ NtlmFlags[NtlmFlags["TARGET_TYPE_SERVER"] = 131072] = "TARGET_TYPE_SERVER";
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a share. Presumably, this is for share-level
+ authentication. Usage is unclear. */
+ NtlmFlags[NtlmFlags["TARGET_TYPE_SHARE"] = 262144] = "TARGET_TYPE_SHARE";
+ /* Indicates that the NTLM2 signing and sealing scheme should be used for
+ protecting authenticated communications. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_NTLM2_KEY"] = 524288] = "NEGOTIATE_NTLM2_KEY";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["REQUEST_INIT_RESPONSE"] = 1048576] = "REQUEST_INIT_RESPONSE";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["REQUEST_ACCEPT_RESPONSE"] = 2097152] = "REQUEST_ACCEPT_RESPONSE";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["REQUEST_NONNT_SESSION_KEY"] = 4194304] = "REQUEST_NONNT_SESSION_KEY";
+ /* Sent by the client in the Type 1 message to request Target info block from server.
+ Sent by the server in the Type 2 message to indicate that it is including a
+ Target Information block in the message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_TARGET_INFO"] = 8388608] = "NEGOTIATE_TARGET_INFO";
+ /* unknown (1<24) */
+ /* Indicates that the version info block is included in the message */
+ NtlmFlags[NtlmFlags["NEGOTIATE_VERSION"] = 33554432] = "NEGOTIATE_VERSION";
+ /* unknown (1<26) */
+ /* unknown (1<27) */
+ /* unknown (1<28) */
+ /* Indicates that 128-bit encryption is supported. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_128"] = 536870912] = "NEGOTIATE_128";
+ /* Indicates that the client will provide an encrypted master key in
+ the "Session Key" field of the Type 3 message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_KEY_EXCHANGE"] = 1073741824] = "NEGOTIATE_KEY_EXCHANGE";
+ /* Indicates that 56-bit encryption is supported. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_56"] = -2147483648] = "NEGOTIATE_56";
+})(NtlmFlags = exports.NtlmFlags || (exports.NtlmFlags = {}));
+//# sourceMappingURL=ntlm.flags.js.map
\ No newline at end of file
diff --git a/lib/commonjs/ntlm/ntlm.flags.js.map b/lib/commonjs/ntlm/ntlm.flags.js.map
new file mode 100644
index 0000000..3208b7d
--- /dev/null
+++ b/lib/commonjs/ntlm/ntlm.flags.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ntlm.flags.js","sourceRoot":"","sources":["../../../src/ntlm/ntlm.flags.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,IAAY,SA2GX;AA3GD,WAAY,SAAS;IACnB;eACW;IACX,mEAAwB,CAAA;IAExB,+EAA+E;IAC/E,2DAAoB,CAAA;IAEpB;kBACc;IACd,6DAAqB,CAAA;IAErB,oBAAoB;IAEpB;+DAC2D;IAC3D,8DAAqB,CAAA;IAErB;wDACoD;IACpD,8DAAqB,CAAA;IAErB,2DAA2D;IAC3D,kFAA+B,CAAA;IAE/B;+CAC2C;IAC3C,mEAAuB,CAAA;IAEvB,qBAAqB;IACrB,qEAAwB,CAAA;IAExB,uDAAuD;IACvD,uEAAyB,CAAA;IAEzB,qBAAqB;IAErB;8EAC0E;IAC1E,0EAA2B,CAAA;IAE3B;0DACsD;IACtD,sFAAiC,CAAA;IAEjC;wDACoD;IACpD,gGAAsC,CAAA;IAEtC;;0DAEsD;IACtD,6EAA4B,CAAA;IAE5B;oDACgD;IAChD,+EAA6B,CAAA;IAE7B;2CACuC;IACvC,yEAA0B,CAAA;IAE1B;2CACuC;IACvC,0EAA0B,CAAA;IAE1B;;2CAEuC;IACvC,wEAAyB,CAAA;IAEzB;kDAC8C;IAC9C,4EAA2B,CAAA;IAE3B,qBAAqB;IACrB,iFAA6B,CAAA;IAE7B,qBAAqB;IACrB,qFAA+B,CAAA;IAE/B,qBAAqB;IACrB,yFAAiC,CAAA;IAEjC;;kDAE8C;IAC9C,iFAA6B,CAAA;IAE7B,oBAAoB;IAEpB,sEAAsE;IACtE,0EAAyB,CAAA;IAEzB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IAEpB,qDAAqD;IACrD,mEAAqB,CAAA;IAErB;wDACoD;IACpD,sFAA8B,CAAA;IAE9B,oDAAoD;IACpD,mEAAoB,CAAA;AACtB,CAAC,EA3GW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QA2GpB"}
\ No newline at end of file
diff --git a/lib/commonjs/ntlm/ntlm.js b/lib/commonjs/ntlm/ntlm.js
new file mode 100644
index 0000000..842a685
--- /dev/null
+++ b/lib/commonjs/ntlm/ntlm.js
@@ -0,0 +1,234 @@
+// All code in this folder is heavily based on the node project ntlm-client.
+// https://github.com/clncln1/node-ntlm-client
+// ----------------------------------------------------------------------------
+// Original license statement:
+// Copyright (c) 2015 Nico Haller
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+// ----------------------------------------------------------------------------
+'use strict';
+Object.defineProperty(exports, "__esModule", { value: true });
+const ntlm_flags_1 = require("./ntlm.flags");
+const ntlm_constants_1 = require("./ntlm.constants");
+const hash_1 = require("./hash");
+const os = require("os");
+const type2_message_1 = require("./type2.message");
+const ntlm_message_1 = require("./ntlm.message");
+function ntlm() {
+ return new Ntlm();
+}
+exports.default = ntlm;
+class Ntlm {
+ createType1Message(ntlm_version, workstation, target) {
+ let dataPos = 40;
+ let pos = 0;
+ let buf = Buffer.alloc(256);
+ if (target === undefined) {
+ target = '';
+ }
+ if (workstation === undefined) {
+ workstation = os.hostname().toUpperCase();
+ }
+ //signature
+ buf.write(ntlm_constants_1.NtlmConstants.NTLM_SIGNATURE, pos, ntlm_constants_1.NtlmConstants.NTLM_SIGNATURE.length, 'ascii');
+ pos += ntlm_constants_1.NtlmConstants.NTLM_SIGNATURE.length;
+ //message type
+ buf.writeUInt32LE(1, pos);
+ pos += 4;
+ //flags
+ let messageFlags = ntlm_flags_1.NtlmFlags.NEGOTIATE_OEM |
+ ntlm_flags_1.NtlmFlags.NEGOTIATE_ALWAYS_SIGN |
+ ntlm_flags_1.NtlmFlags.NEGOTIATE_VERSION;
+ if (ntlm_version == 1) {
+ messageFlags |= ntlm_flags_1.NtlmFlags.NEGOTIATE_NTLM_KEY |
+ ntlm_flags_1.NtlmFlags.NEGOTIATE_LM_KEY;
+ }
+ else {
+ messageFlags |= ntlm_flags_1.NtlmFlags.NEGOTIATE_NTLM2_KEY;
+ }
+ if (target.length > 0) {
+ messageFlags |= ntlm_flags_1.NtlmFlags.NEGOTIATE_DOMAIN_SUPPLIED;
+ }
+ if (workstation.length > 0) {
+ messageFlags |= ntlm_flags_1.NtlmFlags.NEGOTIATE_WORKSTATION_SUPPLIED;
+ }
+ // special operator to force conversion to unsigned
+ buf.writeUInt32LE(messageFlags >>> 0, pos);
+ pos += 4;
+ //domain security buffer
+ buf.writeUInt16LE(target.length, pos);
+ pos += 2;
+ buf.writeUInt16LE(target.length, pos);
+ pos += 2;
+ buf.writeUInt32LE(dataPos, pos);
+ pos += 4;
+ if (target.length > 0) {
+ dataPos += buf.write(target, dataPos, 'ascii');
+ }
+ //workstation security buffer
+ buf.writeUInt16LE(workstation.length, pos);
+ pos += 2;
+ buf.writeUInt16LE(workstation.length, pos);
+ pos += 2;
+ buf.writeUInt32LE(dataPos, pos);
+ pos += 4;
+ if (workstation.length > 0) {
+ dataPos += buf.write(workstation, dataPos, 'ascii');
+ }
+ this.addVersionStruct(buf, pos);
+ return new ntlm_message_1.NtlmMessage(buf.slice(0, dataPos));
+ }
+ // Version - hard-coded to
+ // Major version 10, minor version 0 (Windows 10)
+ // build number 18362 (1903 update), NTLM revision 15
+ addVersionStruct(buf, pos) {
+ buf.writeUInt8(10, pos);
+ pos++;
+ buf.writeUInt8(0, pos);
+ pos++;
+ buf.writeUInt16LE(18362, pos);
+ pos += 2;
+ buf.writeUInt32LE(0x0F000000, pos);
+ pos += 4;
+ return pos;
+ }
+ decodeType2Message(str) {
+ if (str === undefined) {
+ throw new Error('Invalid argument');
+ }
+ let ntlmMatch = /^NTLM ([^,\s]+)/.exec(str);
+ if (ntlmMatch) {
+ str = ntlmMatch[1];
+ }
+ let buf = Buffer.from(str, 'base64');
+ let type2message = new type2_message_1.Type2Message(buf);
+ return type2message;
+ }
+ createType3Message(type1message, type2message, username, password, workstation, target, client_nonce_override, timestamp_override) {
+ let dataPos = 72;
+ let buf = Buffer.alloc(1024);
+ if (workstation === undefined) {
+ workstation = os.hostname().toUpperCase();
+ }
+ if (target === undefined) {
+ target = type2message.targetName;
+ }
+ //signature
+ buf.write(ntlm_constants_1.NtlmConstants.NTLM_SIGNATURE, 0, ntlm_constants_1.NtlmConstants.NTLM_SIGNATURE.length, 'ascii');
+ //message type
+ buf.writeUInt32LE(3, 8);
+ let targetLen = type2message.encoding === 'ascii' ? target.length : target.length * 2;
+ let usernameLen = type2message.encoding === 'ascii' ? username.length : username.length * 2;
+ let workstationLen = type2message.encoding === 'ascii' ? workstation.length : workstation.length * 2;
+ let dataPosOffset = targetLen + usernameLen + workstationLen;
+ let timestamp = '';
+ let client_nonce = '';
+ let withMic = false;
+ let withServerTimestamp = false;
+ if (type2message.version === 2 &&
+ type2message.targetInfo &&
+ type2message.targetInfo.parsed['SERVER_TIMESTAMP']) { // Must include MIC, add room for it
+ withServerTimestamp = true;
+ withMic = true;
+ dataPos += 16;
+ }
+ let hashDataPos = dataPos + dataPosOffset;
+ let ntlmHash = hash_1.Hash.createNTLMHash(password);
+ if (type2message.version === 2) {
+ client_nonce = client_nonce_override || hash_1.Hash.createPseudoRandomValue(16);
+ if (withServerTimestamp) { // Use server timestamp if provided
+ timestamp = type2message.targetInfo.parsed['SERVER_TIMESTAMP'];
+ }
+ else {
+ timestamp = timestamp_override || hash_1.Hash.createTimestamp();
+ }
+ let lmv2;
+ if (withServerTimestamp) {
+ lmv2 = Buffer.alloc(24); // zero-filled
+ }
+ else {
+ lmv2 = hash_1.Hash.createLMv2Response(type2message, username, target, ntlmHash, client_nonce);
+ }
+ //lmv2 security buffer
+ buf.writeUInt16LE(lmv2.length, 12);
+ buf.writeUInt16LE(lmv2.length, 14);
+ buf.writeUInt32LE(hashDataPos, 16);
+ lmv2.copy(buf, hashDataPos);
+ hashDataPos += lmv2.length;
+ let ntlmv2 = hash_1.Hash.createNTLMv2Response(type2message, username, target, ntlmHash, client_nonce, timestamp, withMic);
+ //ntlmv2 security buffer
+ buf.writeUInt16LE(ntlmv2.length, 20);
+ buf.writeUInt16LE(ntlmv2.length, 22);
+ buf.writeUInt32LE(hashDataPos, 24);
+ ntlmv2.copy(buf, hashDataPos);
+ hashDataPos += ntlmv2.length;
+ }
+ else {
+ let lmHash = hash_1.Hash.createLMHash(password);
+ let lm = hash_1.Hash.createLMResponse(type2message.challenge, lmHash);
+ let ntlm = hash_1.Hash.createNTLMResponse(type2message.challenge, ntlmHash);
+ //lm security buffer
+ buf.writeUInt16LE(lm.length, 12);
+ buf.writeUInt16LE(lm.length, 14);
+ buf.writeUInt32LE(hashDataPos, 16);
+ lm.copy(buf, hashDataPos);
+ hashDataPos += lm.length;
+ //ntlm security buffer
+ buf.writeUInt16LE(ntlm.length, 20);
+ buf.writeUInt16LE(ntlm.length, 22);
+ buf.writeUInt32LE(hashDataPos, 24);
+ ntlm.copy(buf, hashDataPos);
+ hashDataPos += ntlm.length;
+ }
+ //target name security buffer
+ buf.writeUInt16LE(targetLen, 28);
+ buf.writeUInt16LE(targetLen, 30);
+ buf.writeUInt32LE(dataPos, 32);
+ dataPos += buf.write(target, dataPos, type2message.encoding);
+ //user name security buffer
+ buf.writeUInt16LE(usernameLen, 36);
+ buf.writeUInt16LE(usernameLen, 38);
+ buf.writeUInt32LE(dataPos, 40);
+ dataPos += buf.write(username, dataPos, type2message.encoding);
+ //workstation name security buffer
+ buf.writeUInt16LE(workstationLen, 44);
+ buf.writeUInt16LE(workstationLen, 46);
+ buf.writeUInt32LE(dataPos, 48);
+ dataPos += buf.write(workstation, dataPos, type2message.encoding);
+ //session key security buffer
+ let session_key = Buffer.alloc(0);
+ // if (type2message.flags & NtlmFlags.NEGOTIATE_KEY_EXCHANGE) {
+ // session_key = hash.createRandomSessionKey(type2message, username, target, ntlmHash, client_nonce, timestamp, withMic);
+ // }
+ buf.writeUInt16LE(session_key.length, 52);
+ buf.writeUInt16LE(session_key.length, 54);
+ buf.writeUInt32LE(hashDataPos, 56);
+ session_key.copy(buf, hashDataPos);
+ hashDataPos += session_key.length;
+ //flags
+ buf.writeUInt32LE(type2message.flags, 60);
+ this.addVersionStruct(buf, 64);
+ if (withMic) {
+ // Calculate and add MIC
+ let mic = hash_1.Hash.createMIC(type1message.raw, type2message, buf.slice(0, hashDataPos), username, target, ntlmHash, client_nonce, timestamp);
+ mic.copy(buf, 72);
+ }
+ return new ntlm_message_1.NtlmMessage(buf.slice(0, hashDataPos));
+ //return 'NTLM ' + buf.toString('base64', 0, hashDataPos);
+ }
+}
+exports.Ntlm = Ntlm;
+//# sourceMappingURL=ntlm.js.map
\ No newline at end of file
diff --git a/lib/commonjs/ntlm/ntlm.js.map b/lib/commonjs/ntlm/ntlm.js.map
new file mode 100644
index 0000000..83d31f9
--- /dev/null
+++ b/lib/commonjs/ntlm/ntlm.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ntlm.js","sourceRoot":"","sources":["../../../src/ntlm/ntlm.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/commonjs/ntlm/ntlm.message.d.ts b/lib/commonjs/ntlm/ntlm.message.d.ts
new file mode 100644
index 0000000..65dc231
--- /dev/null
+++ b/lib/commonjs/ntlm/ntlm.message.d.ts
@@ -0,0 +1,6 @@
+///
+export declare class NtlmMessage {
+ raw: Buffer;
+ constructor(buf: Buffer);
+ header(): string;
+}
diff --git a/lib/commonjs/ntlm/ntlm.message.js b/lib/commonjs/ntlm/ntlm.message.js
new file mode 100644
index 0000000..11f3f60
--- /dev/null
+++ b/lib/commonjs/ntlm/ntlm.message.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+class NtlmMessage {
+ constructor(buf) {
+ this.raw = buf;
+ }
+ header() {
+ return 'NTLM ' + this.raw.toString('base64');
+ }
+}
+exports.NtlmMessage = NtlmMessage;
+//# sourceMappingURL=ntlm.message.js.map
\ No newline at end of file
diff --git a/lib/commonjs/ntlm/ntlm.message.js.map b/lib/commonjs/ntlm/ntlm.message.js.map
new file mode 100644
index 0000000..1d7ba0b
--- /dev/null
+++ b/lib/commonjs/ntlm/ntlm.message.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ntlm.message.js","sourceRoot":"","sources":["../../../src/ntlm/ntlm.message.ts"],"names":[],"mappings":";;AAAA,MAAa,WAAW;IAGtB,YAAY,GAAW;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,MAAM;QACJ,OAAO,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;CACF;AAVD,kCAUC"}
\ No newline at end of file
diff --git a/lib/commonjs/ntlm/type2.message.d.ts b/lib/commonjs/ntlm/type2.message.d.ts
new file mode 100644
index 0000000..f1ce986
--- /dev/null
+++ b/lib/commonjs/ntlm/type2.message.d.ts
@@ -0,0 +1,13 @@
+///
+export declare class Type2Message {
+ raw: Buffer;
+ flags: number;
+ encoding: 'ascii' | 'ucs2';
+ version: number;
+ challenge: Buffer;
+ targetName: string;
+ targetInfo: any;
+ constructor(buf: Buffer);
+ private readTargetName;
+ private parseTargetInfo;
+}
diff --git a/lib/commonjs/ntlm/type2.message.js b/lib/commonjs/ntlm/type2.message.js
new file mode 100644
index 0000000..571f5d3
--- /dev/null
+++ b/lib/commonjs/ntlm/type2.message.js
@@ -0,0 +1,128 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const ntlm_flags_1 = require("./ntlm.flags");
+const ntlm_constants_1 = require("./ntlm.constants");
+class Type2Message {
+ constructor(buf) {
+ this.raw = buf;
+ //check signature
+ if (buf.toString('ascii', 0, ntlm_constants_1.NtlmConstants.NTLM_SIGNATURE.length) !== ntlm_constants_1.NtlmConstants.NTLM_SIGNATURE) {
+ throw new Error('Invalid message signature');
+ }
+ //check message type
+ if (buf.readUInt32LE(ntlm_constants_1.NtlmConstants.NTLM_SIGNATURE.length) !== 2) {
+ throw new Error('Invalid message type (no type 2)');
+ }
+ //read flags
+ this.flags = buf.readUInt32LE(20);
+ this.encoding = (this.flags & ntlm_flags_1.NtlmFlags.NEGOTIATE_OEM) ? 'ascii' : 'ucs2';
+ this.version = (this.flags & ntlm_flags_1.NtlmFlags.NEGOTIATE_NTLM2_KEY) ? 2 : 1;
+ this.challenge = buf.slice(24, 32);
+ //read target name
+ this.targetName = this.readTargetName();
+ //read target info
+ if (this.flags & ntlm_flags_1.NtlmFlags.NEGOTIATE_TARGET_INFO) {
+ this.targetInfo = this.parseTargetInfo();
+ }
+ }
+ readTargetName() {
+ let length = this.raw.readUInt16LE(12);
+ //skipping allocated space
+ let offset = this.raw.readUInt32LE(16);
+ if (length === 0) {
+ return '';
+ }
+ if ((offset + length) > this.raw.length || offset < 32) {
+ throw new Error('Bad type 2 message');
+ }
+ return this.raw.toString(this.encoding, offset, offset + length);
+ }
+ parseTargetInfo() {
+ let info = {};
+ let length = this.raw.readUInt16LE(40);
+ //skipping allocated space
+ let offset = this.raw.readUInt32LE(44);
+ let targetInfoBuffer = Buffer.alloc(length);
+ this.raw.copy(targetInfoBuffer, 0, offset, offset + length);
+ if (length === 0) {
+ return info;
+ }
+ if ((offset + length) > this.raw.length || offset < 32) {
+ throw new Error('Bad type 2 message');
+ }
+ let pos = offset;
+ while (pos < (offset + length)) {
+ let blockType = this.raw.readUInt16LE(pos);
+ pos += 2;
+ let blockLength = this.raw.readUInt16LE(pos);
+ pos += 2;
+ if (blockType === 0) {
+ //reached the terminator subblock
+ break;
+ }
+ let blockTypeStr;
+ let blockTypeOutput = 'string';
+ switch (blockType) {
+ case 0x01:
+ blockTypeStr = 'SERVER';
+ break;
+ case 0x02:
+ blockTypeStr = 'DOMAIN';
+ break;
+ case 0x03:
+ blockTypeStr = 'FQDN';
+ break;
+ case 0x04:
+ blockTypeStr = 'DNS';
+ break;
+ case 0x05:
+ blockTypeStr = 'PARENT_DNS';
+ break;
+ case 0x06:
+ blockTypeStr = 'FLAGS';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x07:
+ blockTypeStr = 'SERVER_TIMESTAMP';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x08:
+ blockTypeStr = 'SINGLE_HOST';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x09:
+ blockTypeStr = 'TARGET_NAME';
+ break;
+ case 0x0A:
+ blockTypeStr = 'CHANNEL_BINDING';
+ blockTypeOutput = 'hex';
+ break;
+ default:
+ blockTypeStr = '';
+ break;
+ }
+ if (blockTypeStr) {
+ if (blockTypeOutput === 'string') {
+ info[blockTypeStr] = this.raw.toString('ucs2', pos, pos + blockLength);
+ }
+ else {
+ // Output as hex in little endian order
+ let twoCharBlocks = this.raw.toString('hex', pos, pos + blockLength).match(/.{2}/g);
+ if (twoCharBlocks) {
+ info[blockTypeStr] = twoCharBlocks.reverse().join("");
+ }
+ else {
+ info[blockTypeStr] = null;
+ }
+ }
+ }
+ pos += blockLength;
+ }
+ return {
+ parsed: info,
+ buffer: targetInfoBuffer
+ };
+ }
+}
+exports.Type2Message = Type2Message;
+//# sourceMappingURL=type2.message.js.map
\ No newline at end of file
diff --git a/lib/commonjs/ntlm/type2.message.js.map b/lib/commonjs/ntlm/type2.message.js.map
new file mode 100644
index 0000000..bb9c797
--- /dev/null
+++ b/lib/commonjs/ntlm/type2.message.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"type2.message.js","sourceRoot":"","sources":["../../../src/ntlm/type2.message.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/commonjs/tests/dynamicsMetadataTests.js b/lib/commonjs/tests/dynamicsMetadataTests.js
index f335697..949d26f 100644
--- a/lib/commonjs/tests/dynamicsMetadataTests.js
+++ b/lib/commonjs/tests/dynamicsMetadataTests.js
@@ -1,9 +1,10 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
@@ -27,3 +28,4 @@ function dynamicsMetadataRetrieveAll() {
});
}
exports.dynamicsMetadataRetrieveAll = dynamicsMetadataRetrieveAll;
+//# sourceMappingURL=dynamicsMetadataTests.js.map
\ No newline at end of file
diff --git a/lib/commonjs/tests/dynamicsMetadataTests.js.map b/lib/commonjs/tests/dynamicsMetadataTests.js.map
new file mode 100644
index 0000000..1e24a78
--- /dev/null
+++ b/lib/commonjs/tests/dynamicsMetadataTests.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dynamicsMetadataTests.js","sourceRoot":"","sources":["../../../src/tests/dynamicsMetadataTests.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,mEAA4D;AAE5D,SAAsB,2BAA2B;;QAC7C,MAAM,IAAI,GAAG,0BAAgB,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,eAAe,GAAG,WAAW,CAAC,WAAW,KAAK,aAAa,CAAC,WAAW,CAAC;QAE9E,IAAI,CAAC,eAAe,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;SACtD;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5E,IAAI,CAAC,eAAe,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC5D;IACL,CAAC;CAAA;AAnBD,kEAmBC"}
\ No newline at end of file
diff --git a/lib/commonjs/tests/dynamicsTests.js b/lib/commonjs/tests/dynamicsTests.js
index 8faa730..aa754b3 100644
--- a/lib/commonjs/tests/dynamicsTests.js
+++ b/lib/commonjs/tests/dynamicsTests.js
@@ -1,18 +1,27 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const Dynamics_1 = require("../Dynamics/Dynamics");
const Query_1 = require("../Query/Query");
+const DynamicsRequest_1 = require("../Dynamics/DynamicsRequest");
function dynamicsTestAll() {
return __awaiter(this, void 0, void 0, function* () {
- const dyn = Dynamics_1.default();
+ const options = new DynamicsRequest_1.ConnectionOptions();
+ options.authType = DynamicsRequest_1.AuthenticationType.Windows;
+ options.username = "Administrator";
+ options.domain = "CONTOSO";
+ options.password = "{password}";
+ options.serverUrl = "http://{server}/{org}/";
+ options.webApiVersion = "v9.0";
+ const dyn = Dynamics_1.default(options);
/* Batch Request */
const allAccounts = yield dyn.batch()
.requestAllUrls(['/api/data/v9.1/accounts'])
@@ -46,3 +55,4 @@ function dynamicsTestAll() {
});
}
exports.dynamicsTestAll = dynamicsTestAll;
+//# sourceMappingURL=dynamicsTests.js.map
\ No newline at end of file
diff --git a/lib/commonjs/tests/dynamicsTests.js.map b/lib/commonjs/tests/dynamicsTests.js.map
new file mode 100644
index 0000000..19c62ed
--- /dev/null
+++ b/lib/commonjs/tests/dynamicsTests.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dynamicsTests.js","sourceRoot":"","sources":["../../../src/tests/dynamicsTests.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,mDAA4C;AAC5C,0CAA+C;AAC/C,iEAAoF;AAEpF,SAAsB,eAAe;;QACjC,MAAM,OAAO,GAAG,IAAI,mCAAiB,EAAE,CAAC;QACxC,OAAO,CAAC,QAAQ,GAAG,oCAAkB,CAAC,OAAO,CAAC;QAC9C,OAAO,CAAC,QAAQ,GAAG,eAAe,CAAC;QACnC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;QAC3B,OAAO,CAAC,QAAQ,GAAG,YAAY,CAAC;QAChC,OAAO,CAAC,SAAS,GAAG,wBAAwB,CAAC;QAC7C,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC;QAE/B,MAAM,GAAG,GAAG,kBAAQ,CAAC,OAAO,CAAC,CAAC;QAE9B,mBAAmB;QACnB,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE;aAChC,cAAc,CAAC,CAAC,yBAAyB,CAAC,CAAC;aAC3C,OAAO,EAAE,CAAC;QAEf,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;YACzB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;SACzC;QAED,mBAAmB;QACnB,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAE5D,IAAI,CAAC,EAAE,EAAE;YACL,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SACpD;QAED,mBAAmB;QACnB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAEjE,IAAI,EAAE,KAAK,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SACpD;QAED,iBAAiB;QACjB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,KAAK,CAE9B,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC;aAC3B,KAAK,CAAC,MAAM,EAAE,qBAAa,CAAC,UAAU,EAAE,KAAK,CAAC;aAC9C,OAAO,CAAC,MAAM,CAAC;aACf,MAAM,CAAC,MAAM,CAAC,CAEtB,CAAC,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,UAAU,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAClD;QAED,qBAAqB;QACrB,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAEnE,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;SAC1D;IACL,CAAC;CAAA;AAtDD,0CAsDC"}
\ No newline at end of file
diff --git a/lib/commonjs/tests/queryTests.js b/lib/commonjs/tests/queryTests.js
index a2a1dcb..5fb99b7 100644
--- a/lib/commonjs/tests/queryTests.js
+++ b/lib/commonjs/tests/queryTests.js
@@ -24,3 +24,4 @@ function createQueryWithAllExpressions() {
}
}
exports.createQueryWithAllExpressions = createQueryWithAllExpressions;
+//# sourceMappingURL=queryTests.js.map
\ No newline at end of file
diff --git a/lib/commonjs/tests/queryTests.js.map b/lib/commonjs/tests/queryTests.js.map
new file mode 100644
index 0000000..4d91d17
--- /dev/null
+++ b/lib/commonjs/tests/queryTests.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"queryTests.js","sourceRoot":"","sources":["../../../src/tests/queryTests.ts"],"names":[],"mappings":";;AAAA,0CAAsD;AACtD,gDAA4C;AAE5C,SAAgB,6BAA6B;IACzC,MAAM,SAAS,GAAG,eAAK,CAAC,SAAS,CAAC,CAAC;IACnC,SAAS;SACJ,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;SAC3B,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC;SACxB,OAAO,CAAC,MAAM,CAAC;SACf,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1B,IAAI,CAAC,UAAU,CAAC;SAChB,KAAK,CAAC,MAAM,EAAE,qBAAa,CAAC,QAAQ,EAAE,KAAK,CAAC;SAC5C,KAAK,CAAC,eAAe,EAAE,qBAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SACpD,QAAQ,CAAC,EAAE,CAAC,EAAE;QACX,EAAE,CAAC,MAAM,EAAE,qBAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtC,EAAE,CAAC,MAAM,EAAE,qBAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtC,EAAE,CAAC,MAAM,EAAE,qBAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC;SACD,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAEnC,MAAM,QAAQ,GAAG,kBAAW,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAEnD,IAAI,CAAC,QAAQ,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;KACvD;AACL,CAAC;AAtBD,sEAsBC"}
\ No newline at end of file
diff --git a/lib/es6/Dynamics/Dynamics.d.ts b/lib/es6/Dynamics/Dynamics.d.ts
index 510c564..8adc0aa 100644
--- a/lib/es6/Dynamics/Dynamics.d.ts
+++ b/lib/es6/Dynamics/Dynamics.d.ts
@@ -1,6 +1,7 @@
import { Query } from "../Query/Query";
import { DynamicsBatch } from "./DynamicsBatch";
-export declare const WebApiVersion = "v9.1";
+import { ConnectionOptions } from "./DynamicsRequest";
+export declare const DefaultWebApiVersion = "v9.1";
export declare const DefaultMaxRecords = 100;
export declare const DynamicsHeaders: {
'OData-MaxVersion': string;
@@ -17,4 +18,4 @@ export interface Dynamics {
query(entityLogicalName: string, entitySetName: string): Query;
save(entitySetName: string, data: any, id?: string): Promise;
}
-export default function dynamics(accessToken?: string): Dynamics;
+export default function dynamics(connectionOptions?: ConnectionOptions): Dynamics;
diff --git a/lib/es6/Dynamics/Dynamics.js b/lib/es6/Dynamics/Dynamics.js
index c125945..9d842d4 100644
--- a/lib/es6/Dynamics/Dynamics.js
+++ b/lib/es6/Dynamics/Dynamics.js
@@ -1,30 +1,30 @@
import query from "../Query/Query";
import { dynamicsBatch } from "./DynamicsBatch";
import { dynamicsQuery, dynamicsRequest, dynamicsSave } from "./DynamicsRequest";
-export const WebApiVersion = 'v9.1';
+export const DefaultWebApiVersion = 'v9.1';
export const DefaultMaxRecords = 100;
export const DynamicsHeaders = {
'OData-MaxVersion': '4.0',
'OData-Version': '4.0',
'Prefer': 'odata.include-annotations=OData.Community.Display.V1.FormattedValue'
};
-export default function dynamics(accessToken) {
- return new DynamicsClient(accessToken);
+export default function dynamics(connectionOptions) {
+ return new DynamicsClient(connectionOptions);
}
class DynamicsClient {
- constructor(accessToken) {
- this.dynamicsHeaders = accessToken && {
- 'Authorization': 'Bearer ' + accessToken
- };
+ constructor(options) {
+ if (options) {
+ this.connectionOptions = options;
+ }
}
batch() {
- return dynamicsBatch(this.dynamicsHeaders);
+ return dynamicsBatch(this.connectionOptions, this.dynamicsHeaders);
}
fetch(query, maxRowCount = DefaultMaxRecords) {
- return dynamicsQuery(query, maxRowCount, this.dynamicsHeaders);
+ return dynamicsQuery(this.connectionOptions, query, maxRowCount, this.dynamicsHeaders);
}
optionset(entityName, attributeName) {
- return dynamicsRequest(`/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes(LogicalName='${attributeName}')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet($select=Options),GlobalOptionSet($select=Options)`, this.dynamicsHeaders)
+ return dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes(LogicalName='${attributeName}')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet($select=Options),GlobalOptionSet($select=Options)`, this.dynamicsHeaders)
.then(attribute => (attribute.OptionSet || attribute.GlobalOptionSet).Options.map((option) => ({
label: (option.Label && option.Label.UserLocalizedLabel && option.Label.UserLocalizedLabel.Label),
value: option.Value
@@ -34,6 +34,7 @@ class DynamicsClient {
return query(entityLogicalName).path(entitySetName);
}
save(entitySetName, data, id) {
- return dynamicsSave(entitySetName, data, id, this.dynamicsHeaders);
+ return dynamicsSave(this.connectionOptions, entitySetName, data, id, this.dynamicsHeaders);
}
}
+//# sourceMappingURL=Dynamics.js.map
\ No newline at end of file
diff --git a/lib/es6/Dynamics/Dynamics.js.map b/lib/es6/Dynamics/Dynamics.js.map
new file mode 100644
index 0000000..2137cfa
--- /dev/null
+++ b/lib/es6/Dynamics/Dynamics.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Dynamics.js","sourceRoot":"","sources":["../../../src/Dynamics/Dynamics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAgB,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAiB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAqB,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEpG,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG;IAC3B,kBAAkB,EAAE,KAAK;IACzB,eAAe,EAAE,KAAK;IACtB,QAAQ,EAAE,qEAAqE;CAClF,CAAC;AAUF,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,iBAAqC;IAClE,OAAO,IAAI,cAAc,CAAC,iBAAiB,CAAC,CAAC;AACjD,CAAC;AAGD,MAAM,cAAc;IAIhB,YAAY,OAA0B;QAClC,IAAI,OAAO,EACX;YACI,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;SACpC;IACL,CAAC;IAED,KAAK;QACD,OAAO,aAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAI,KAAY,EAAE,cAAsB,iBAAiB;QAE1D,OAAO,aAAa,CAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9F,CAAC;IAED,SAAS,CAAC,UAAe,EAAE,aAAkB;QAEzC,OAAO,eAAe,CAAM,IAAI,CAAC,iBAAiB,EAAE,aAAa,IAAI,CAAC,iBAAiB,CAAC,aAAa,mCAAmC,UAAU,8BAA8B,aAAa,6IAA6I,EAAE,IAAI,CAAC,eAAe,CAAC;aAChW,IAAI,CAAC,SAAS,CAAC,EAAE,CACd,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,GAAG,CAC1D,CAAC,MAAwE,EAAE,EAAE,CAAC,CAAC;YAC3E,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,kBAAkB,IAAI,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACjG,KAAK,EAAE,MAAM,CAAC,KAAK;SACtB,CAAC,CACL,CACJ,CAAC;IACN,CAAC;IAED,KAAK,CAAC,iBAAyB,EAAE,aAAqB;QAElD,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,aAAqB,EAAE,IAAS,EAAE,EAAW;QAC9C,OAAO,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/F,CAAC;CACJ"}
\ No newline at end of file
diff --git a/lib/es6/Dynamics/DynamicsBatch.d.ts b/lib/es6/Dynamics/DynamicsBatch.d.ts
index 715fa4b..06b0748 100644
--- a/lib/es6/Dynamics/DynamicsBatch.d.ts
+++ b/lib/es6/Dynamics/DynamicsBatch.d.ts
@@ -1,6 +1,7 @@
import { Query } from "../Query/Query";
+import { ConnectionOptions } from "./DynamicsRequest";
export interface DynamicsBatch {
- execute(): Promise;
+ execute(): Promise;
request(query: Query, maxRowCount?: number): DynamicsBatch;
requestAll(queries: Query[]): DynamicsBatch;
requestAllUrls(urls: string[]): DynamicsBatch;
@@ -8,6 +9,6 @@ export interface DynamicsBatch {
createRelatedEntity(entitySetName: string, data: any, navigationPropertyName: string): void;
};
}
-export declare function dynamicsBatch(headers?: any): DynamicsBatch;
-export declare function dynamicsBatchRequest(...url: string[]): Promise;
-export declare function dynamicsBatchQuery(...query: Query[]): Promise;
+export declare function dynamicsBatch(connectionOptions: ConnectionOptions, headers?: any): DynamicsBatch;
+export declare function dynamicsBatchRequest(connectionOptions: ConnectionOptions, ...url: string[]): Promise;
+export declare function dynamicsBatchQuery(connectionOptions: ConnectionOptions, ...query: Query[]): Promise;
diff --git a/lib/es6/Dynamics/DynamicsBatch.js b/lib/es6/Dynamics/DynamicsBatch.js
index 16e2335..f793ac9 100644
--- a/lib/es6/Dynamics/DynamicsBatch.js
+++ b/lib/es6/Dynamics/DynamicsBatch.js
@@ -1,45 +1,52 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { GetRootQuery } from "../Query/Query";
import GetQueryXml from "../Query/QueryXml";
-import { DefaultMaxRecords, DynamicsHeaders, WebApiVersion } from "./Dynamics";
-import { formatDynamicsResponse } from "./DynamicsRequest";
-export function dynamicsBatch(headers) {
- return new Batch(headers);
+import { DefaultMaxRecords, DynamicsHeaders } from "./Dynamics";
+import { formatDynamicsResponse, AuthenticationType } from "./DynamicsRequest";
+import * as httpntlm from "httpntlm";
+import fetch from "node-fetch";
+export function dynamicsBatch(connectionOptions, headers) {
+ return new Batch(connectionOptions, headers);
}
-export function dynamicsBatchRequest(...url) {
- const batch = new Batch();
+export function dynamicsBatchRequest(connectionOptions, ...url) {
+ const batch = new Batch(connectionOptions);
batch.requestAllUrls(url);
return batch.execute();
}
-export function dynamicsBatchQuery(...query) {
- const batch = new Batch();
+export function dynamicsBatchQuery(connectionOptions, ...query) {
+ const batch = new Batch(connectionOptions);
batch.requestAll(query);
return batch.execute();
}
class Batch {
- constructor(headers) {
+ constructor(options, headers) {
+ this.options = options;
this.headers = headers;
+ this.ConnectionOptions = options;
this.Changes = [];
this.RelatedChanges = [];
}
execute() {
return __awaiter(this, void 0, void 0, function* () {
- const results = yield Batch.requestBatch(`/api/data/${WebApiVersion}/$batch`, this.Changes, this.headers);
+ const results = yield Batch.requestBatch(this.ConnectionOptions, `/api/data/${this.ConnectionOptions.webApiVersion}/$batch`, this.Changes, this.headers);
if (this.RelatedChanges.length > 0) {
for (let change of this.RelatedChanges) {
- let changeIndex = this.Changes.indexOf(change.relatedChange);
- let relatedId = results[changeIndex];
- change.entityData[`${change.relatedPropertyName}@odata.bind`] = `${change.relatedChange.entitySetName}(${Batch.trimId(relatedId)})`;
+ if (change !== undefined && change.relatedChange) {
+ let changeIndex = this.Changes.indexOf(change.relatedChange);
+ let relatedId = results !== undefined ? results[changeIndex] : undefined;
+ change.entityData[`${change.relatedPropertyName}@odata.bind`] = `${change.relatedChange.entitySetName}(${Batch.trimId(relatedId)})`;
+ }
}
- const related = yield Batch.requestBatch(`/api/data/${WebApiVersion}/$batch`, this.RelatedChanges, this.headers);
- return results.concat(related);
+ const related = yield Batch.requestBatch(this.ConnectionOptions, `/api/data/${this.ConnectionOptions.webApiVersion}/$batch`, this.RelatedChanges, this.headers);
+ return results !== undefined ? results.concat(related) : undefined;
}
else {
return results;
@@ -90,8 +97,9 @@ class Batch {
}
createRelatedEntity(entitySetName, data, navigationPropertyName) {
let lastChange = this.Changes[this.Changes.length - 1];
- if (!lastChange || lastChange.entityData == 'DELETE')
+ if (!lastChange || lastChange.entityData === 'DELETE') {
throw new Error('createRelatedEntity relies on the previous change which was not found in the batch.');
+ }
if (lastChange.entityId) {
data[`${navigationPropertyName}@odata.bind`] = `${lastChange.entitySetName}(${lastChange.entityId})`;
this.Changes.push({
@@ -108,16 +116,42 @@ class Batch {
});
}
}
- static requestBatch(url, requests, headers) {
+ static requestBatch(connectionOptions, url, requests, headers) {
+ let callUrl = connectionOptions.serverUrl;
+ if (callUrl.endsWith("/")) {
+ callUrl = callUrl.substr(0, callUrl.length - 1);
+ }
+ callUrl = `${callUrl}${url}`;
const batchId = Batch.createId();
- return fetch(url, {
- method: 'POST',
- headers: Object.assign({ 'Content-Type': `multipart/mixed;boundary=batch_${batchId}` }, DynamicsHeaders, headers),
- body: Batch.formatBatchRequest(batchId, requests)
- })
- .then(response => Batch.formatBatchResponse(response.text()));
+ if (connectionOptions.authType === AuthenticationType.Windows) {
+ return new Promise((resolve, reject) => {
+ httpntlm.post({
+ url: callUrl,
+ username: connectionOptions.username,
+ password: connectionOptions.password,
+ workstation: connectionOptions.workstation || '',
+ domain: connectionOptions.domain || '',
+ body: Batch.formatBatchRequest(connectionOptions, batchId, requests),
+ headers: Object.assign(Object.assign({ 'Content-Type': `multipart/mixed;boundary=batch_${batchId}` }, DynamicsHeaders), headers)
+ }, function (err, res) {
+ if (err) {
+ console.error(err);
+ reject(err);
+ }
+ resolve(Batch.formatBatchResponse(res.responseText));
+ });
+ });
+ }
+ else {
+ return fetch(callUrl, {
+ method: 'POST',
+ headers: Object.assign(Object.assign({ 'Content-Type': `multipart/mixed;boundary=batch_${batchId}`, 'Authorization': connectionOptions.accessToken }, DynamicsHeaders), headers),
+ body: Batch.formatBatchRequest(connectionOptions, batchId, requests)
+ })
+ .then(response => Batch.formatBatchResponse(response.text()));
+ }
}
- static formatBatchRequest(batchId, changes) {
+ static formatBatchRequest(connectionOptions, batchId, changes) {
let batchBody = [];
let requestBody = [];
let changeNumber = 1;
@@ -132,7 +166,7 @@ class Batch {
requestBody.push('Content-Transfer-Encoding:binary');
requestBody.push('');
if (change.entitySetName) {
- requestBody.push(`GET ${encodeURI(`/api/data/${WebApiVersion}/${change.entitySetName}?${change.entitySetQuery}`)} HTTP/1.1`);
+ requestBody.push(`GET ${encodeURI(`/api/data/${connectionOptions.webApiVersion}/${change.entitySetName}?${change.entitySetQuery}`)} HTTP/1.1`);
}
else {
requestBody.push(`GET ${encodeURI(change.entitySetQuery)} HTTP/1.1`);
@@ -147,7 +181,7 @@ class Batch {
batchBody.push('Content-Transfer-Encoding:binary');
batchBody.push(`Content-ID: ${changeNumber++}`);
batchBody.push('');
- batchBody.push(`${change.entityId ? 'PATCH' : 'POST'} ${encodeURI(`/api/data/${WebApiVersion}/${change.entitySetName}(${Batch.trimId(change.entityId)})`)} HTTP/1.1`);
+ batchBody.push(`${change.entityId ? 'PATCH' : 'POST'} ${encodeURI(`/api/data/${connectionOptions.webApiVersion}/${change.entitySetName}(${Batch.trimId(change.entityId)})`)} HTTP/1.1`);
batchBody.push('Content-Type: application/json;type=entry');
batchBody.push('');
batchBody.push(JSON.stringify(change.entityData));
@@ -193,6 +227,10 @@ class Batch {
return 'id' + Math.random().toString(16).slice(2);
}
static trimId(id) {
- return (id || '').replace(/{|}/g, '');
+ if (id !== undefined) {
+ return (id || '').replace(/{|}/g, '');
+ }
+ return undefined;
}
}
+//# sourceMappingURL=DynamicsBatch.js.map
\ No newline at end of file
diff --git a/lib/es6/Dynamics/DynamicsBatch.js.map b/lib/es6/Dynamics/DynamicsBatch.js.map
new file mode 100644
index 0000000..c4a9120
--- /dev/null
+++ b/lib/es6/Dynamics/DynamicsBatch.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"DynamicsBatch.js","sourceRoot":"","sources":["../../../src/Dynamics/DynamicsBatch.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/es6/Dynamics/DynamicsDiscovery.d.ts b/lib/es6/Dynamics/DynamicsDiscovery.d.ts
new file mode 100644
index 0000000..6c531d2
--- /dev/null
+++ b/lib/es6/Dynamics/DynamicsDiscovery.d.ts
@@ -0,0 +1,8 @@
+import { ConnectionOptions } from "./DynamicsRequest";
+import { OrganizationMetadata } from "./Model/OrganizationMetadata";
+export declare type OrganizationMetadata = OrganizationMetadata;
+export declare const DefaultDiscoveryApiVersion = "v9.1";
+export default function dynamicsDiscovery(connectionOptions?: ConnectionOptions): DynamicsDiscovery;
+export interface DynamicsDiscovery {
+ discover(): Promise;
+}
diff --git a/lib/es6/Dynamics/DynamicsDiscovery.js b/lib/es6/Dynamics/DynamicsDiscovery.js
new file mode 100644
index 0000000..ec037a3
--- /dev/null
+++ b/lib/es6/Dynamics/DynamicsDiscovery.js
@@ -0,0 +1,19 @@
+import { dynamicsRequest } from "./DynamicsRequest";
+export const DefaultDiscoveryApiVersion = 'v9.1';
+export default function dynamicsDiscovery(connectionOptions) {
+ return new DynamicsDiscoveryClient(connectionOptions);
+}
+class DynamicsDiscoveryClient {
+ constructor(options) {
+ if (options) {
+ this.connectionOptions = options;
+ if (!options.webApiVersion) {
+ this.connectionOptions.webApiVersion = DefaultDiscoveryApiVersion;
+ }
+ }
+ }
+ discover() {
+ return dynamicsRequest(this.connectionOptions, `/api/discovery/${this.connectionOptions.webApiVersion}/Instances`, this.dynamicsHeaders);
+ }
+}
+//# sourceMappingURL=DynamicsDiscovery.js.map
\ No newline at end of file
diff --git a/lib/es6/Dynamics/DynamicsDiscovery.js.map b/lib/es6/Dynamics/DynamicsDiscovery.js.map
new file mode 100644
index 0000000..6543440
--- /dev/null
+++ b/lib/es6/Dynamics/DynamicsDiscovery.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"DynamicsDiscovery.js","sourceRoot":"","sources":["../../../src/Dynamics/DynamicsDiscovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAqB,MAAM,mBAAmB,CAAC;AAKvE,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAEjD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,iBAAqC;IAC3E,OAAO,IAAI,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;AAC1D,CAAC;AAMD,MAAM,uBAAuB;IAIzB,YAAY,OAA0B;QAClC,IAAI,OAAO,EACX;YACI,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;YAEjC,IAAI,CAAC,OAAO,CAAC,aAAa,EAC1B;gBACI,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAG,0BAA0B,CAAC;aACrE;SACJ;IACL,CAAC;IAED,QAAQ;QACJ,OAAO,eAAe,CAAyB,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,IAAI,CAAC,iBAAiB,CAAC,aAAa,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACrK,CAAC;CACJ"}
\ No newline at end of file
diff --git a/lib/es6/Dynamics/DynamicsMetadata.d.ts b/lib/es6/Dynamics/DynamicsMetadata.d.ts
index e1c6ff1..c64f886 100644
--- a/lib/es6/Dynamics/DynamicsMetadata.d.ts
+++ b/lib/es6/Dynamics/DynamicsMetadata.d.ts
@@ -1,3 +1,4 @@
+import { ConnectionOptions } from "./DynamicsRequest";
import { AttributeMetadata, EntityAttributeMetadata, LookupAttributeMetadata } from "./Model/AttributeMetadata";
import { EntityMetadata } from "./Model/EntityMetadata";
import { OptionSetAttributeMetadata, OptionSetMetadata } from "./Model/OptionSetMetadata";
@@ -6,7 +7,7 @@ export declare type DynamicsAttributeMetadata = AnyAttributeMetadata;
export declare type DynamicsOptionSetMetadata = OptionSetMetadata;
export declare type DynamicsLookupAttributeMetadata = LookupAttributeMetadata;
export declare type DynamicsOptionSetAttributeMetadata = OptionSetAttributeMetadata;
-export default function dynamicsMetadata(accessToken?: string): DynamicsMetadata;
+export default function dynamicsmetdata(connectionOptions?: ConnectionOptions): DynamicsMetadata;
export declare function isLookupAttribute(attribute: DynamicsAttributeMetadata): attribute is DynamicsLookupAttributeMetadata;
export declare function isOptionSetAttribute(attribute: DynamicsAttributeMetadata): attribute is DynamicsOptionSetAttributeMetadata;
export interface DynamicsMetadata {
diff --git a/lib/es6/Dynamics/DynamicsMetadata.js b/lib/es6/Dynamics/DynamicsMetadata.js
index 05b6506..55113ec 100644
--- a/lib/es6/Dynamics/DynamicsMetadata.js
+++ b/lib/es6/Dynamics/DynamicsMetadata.js
@@ -1,8 +1,7 @@
-import { WebApiVersion } from "./Dynamics";
import { dynamicsBatch } from "./DynamicsBatch";
import { dynamicsRequest } from "./DynamicsRequest";
-export default function dynamicsMetadata(accessToken) {
- return new DynamicsMetadataClient(accessToken);
+export default function dynamicsmetdata(connectionOptions) {
+ return new DynamicsMetadataClient(connectionOptions);
}
export function isLookupAttribute(attribute) {
return attribute.Type === 'Lookup' && attribute['LookupEntityName'];
@@ -45,31 +44,31 @@ const ExcludedAttributeNameFilters = [
'entityimage_timestamp'
];
class DynamicsMetadataClient {
- constructor(accessToken) {
- this.dynamicsHeaders = accessToken && {
- 'Authorization': 'Bearer ' + accessToken
- };
+ constructor(options) {
+ if (options) {
+ this.connectionOptions = options;
+ }
}
attributes(entityName) {
- return dynamicsBatch(this.dynamicsHeaders)
+ return dynamicsBatch(this.connectionOptions, this.dynamicsHeaders)
.requestAllUrls(this.getMetadataUrls(entityName, false))
.execute()
.then(data => this.flatten(data)
- .filter((attribute) => attribute.LogicalName.indexOf('yomi') === -1 || attribute.LogicalName.indexOf('base') != attribute.LogicalName.length - 4)
+ .filter((attribute) => attribute.LogicalName.indexOf('yomi') === -1 || attribute.LogicalName.indexOf('base') !== attribute.LogicalName.length - 4)
.map(DynamicsMetadataMapper.MapAttribute));
}
entities() {
- return dynamicsRequest(`/api/data/${WebApiVersion}/EntityDefinitions?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
+ return dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
.then(data => data
.map(entity => DynamicsMetadataMapper.MapEntity(entity)));
}
entity(entityName) {
- return dynamicsRequest(`/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
+ return dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
.then(entity => this.attributes(entityName)
.then(attributes => DynamicsMetadataMapper.MapEntity(entity, attributes)));
}
entityAttributes(...entityNames) {
- return dynamicsBatch(this.dynamicsHeaders)
+ return dynamicsBatch(this.connectionOptions, this.dynamicsHeaders)
.requestAllUrls(this.flatten(entityNames.map(e => this.getMetadataUrls(e, true))))
.execute()
.then(data => {
@@ -81,7 +80,7 @@ class DynamicsMetadataClient {
currentEntity = DynamicsMetadataMapper.MapEntity(item);
entities.push(currentEntity);
}
- else if (item.LogicalName.indexOf('yomi') == -1 && item.LogicalName.indexOf('base') != item.LogicalName.length - 4) {
+ else if (item.LogicalName.indexOf('yomi') === -1 && item.LogicalName.indexOf('base') !== item.LogicalName.length - 4) {
currentEntity.Attributes.push(DynamicsMetadataMapper.MapAttribute(item));
}
}
@@ -92,12 +91,12 @@ class DynamicsMetadataClient {
const attributeTypeFilter = ExcludedAttributeTypeFilters.map(v => `AttributeType ne Microsoft.Dynamics.CRM.AttributeTypeCode'${v}'`).join(' and ');
const attributeNameFilter = ExcludedAttributeNameFilters.map(v => `LogicalName ne '${v}'`).join(' and ');
return [
- `/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=${entityProperties}`,
- `/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes?$select=${attributeProperties}&$filter=${attributeTypeFilter} and ${attributeNameFilter}`,
- `/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=${attributeProperties},Targets`,
- `/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
- `/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StatusAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
- `/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StateAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=${entityProperties}`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes?$select=${attributeProperties}&$filter=${attributeTypeFilter} and ${attributeNameFilter}`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=${attributeProperties},Targets`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StatusAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StateAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`
].slice(includeEntity ? 0 : 1);
}
flatten(values) {
@@ -140,3 +139,4 @@ function isLookup(attribute) {
function isOptionSet(attribute) {
return attribute['OptionSet'] && Array.isArray(attribute['OptionSet'].Options);
}
+//# sourceMappingURL=DynamicsMetadata.js.map
\ No newline at end of file
diff --git a/lib/es6/Dynamics/DynamicsMetadata.js.map b/lib/es6/Dynamics/DynamicsMetadata.js.map
new file mode 100644
index 0000000..f5c1f29
--- /dev/null
+++ b/lib/es6/Dynamics/DynamicsMetadata.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"DynamicsMetadata.js","sourceRoot":"","sources":["../../../src/Dynamics/DynamicsMetadata.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/es6/Dynamics/DynamicsRequest.d.ts b/lib/es6/Dynamics/DynamicsRequest.d.ts
index a6d8062..9e1e264 100644
--- a/lib/es6/Dynamics/DynamicsRequest.d.ts
+++ b/lib/es6/Dynamics/DynamicsRequest.d.ts
@@ -1,6 +1,20 @@
import { Query } from "../Query/Query";
-export declare function dynamicsQuery(query: Query, maxRowCount?: number, headers?: any): Promise;
-export declare function dynamicsQueryUrl(dynamicsEntitySetUrl: string, query: Query, maxRowCount?: number, headers?: any): Promise;
-export declare function dynamicsRequest(dynamicsEntitySetUrl: string, headers?: any): Promise;
-export declare function dynamicsSave(entitySetName: string, data: any, id?: string, headers?: any): Promise;
+export declare enum AuthenticationType {
+ Windows = 1,
+ OAuth = 2
+}
+export declare class ConnectionOptions {
+ authType: AuthenticationType;
+ username?: string;
+ password?: string;
+ domain?: string;
+ workstation?: string;
+ accessToken?: string;
+ serverUrl: string;
+ webApiVersion: string;
+}
+export declare function dynamicsQuery(connectionOptions: ConnectionOptions, query: Query, maxRowCount?: number, headers?: any): Promise;
+export declare function dynamicsQueryUrl(connectionOptions: ConnectionOptions, dynamicsEntitySetUrl: string, query: Query, maxRowCount?: number, headers?: any): Promise;
+export declare function dynamicsRequest(connectionOptions: ConnectionOptions, dynamicsEntitySetUrl: string, headers?: any): Promise;
+export declare function dynamicsSave(connectionOptions: ConnectionOptions, entitySetName: string, data: any, id?: string, headers?: any): Promise;
export declare function formatDynamicsResponse(data: any): any;
diff --git a/lib/es6/Dynamics/DynamicsRequest.js b/lib/es6/Dynamics/DynamicsRequest.js
index e267914..a38b2c7 100644
--- a/lib/es6/Dynamics/DynamicsRequest.js
+++ b/lib/es6/Dynamics/DynamicsRequest.js
@@ -1,27 +1,58 @@
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
import { GetRootQuery } from "../Query/Query";
import GetQueryXml from "../Query/QueryXml";
-import { DynamicsHeaders, WebApiVersion } from "./Dynamics";
-export function dynamicsQuery(query, maxRowCount, headers) {
- const dataQuery = GetRootQuery(query);
- if (!dataQuery.EntityPath) {
- throw new Error('dynamicsQuery requires a Query object with an EntityPath');
+import { DynamicsHeaders, DefaultWebApiVersion } from "./Dynamics";
+import * as httpntlm from "httpntlm";
+import fetch from "node-fetch";
+export var AuthenticationType;
+(function (AuthenticationType) {
+ AuthenticationType[AuthenticationType["Windows"] = 1] = "Windows";
+ AuthenticationType[AuthenticationType["OAuth"] = 2] = "OAuth";
+})(AuthenticationType || (AuthenticationType = {}));
+export class ConnectionOptions {
+ constructor() {
+ this.authType = AuthenticationType.OAuth;
+ this.serverUrl = "";
+ this.webApiVersion = DefaultWebApiVersion;
}
- return dynamicsQueryUrl(`/api/data/${WebApiVersion}/${dataQuery.EntityPath}`, query, maxRowCount, headers);
}
-export function dynamicsQueryUrl(dynamicsEntitySetUrl, query, maxRowCount, headers) {
- const querySeparator = (dynamicsEntitySetUrl.indexOf('?') > -1 ? '&' : '?');
- return request(`${dynamicsEntitySetUrl}${querySeparator}fetchXml=${escape(GetQueryXml(query, maxRowCount))}`, 'GET', undefined, headers);
+export function dynamicsQuery(connectionOptions, query, maxRowCount, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const dataQuery = GetRootQuery(query);
+ if (!dataQuery.EntityPath) {
+ throw new Error('dynamicsQuery requires a Query object with an EntityPath');
+ }
+ return yield dynamicsQueryUrl(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${dataQuery.EntityPath}`, query, maxRowCount, headers);
+ });
}
-export function dynamicsRequest(dynamicsEntitySetUrl, headers) {
- return request(dynamicsEntitySetUrl, 'GET', undefined, headers);
+export function dynamicsQueryUrl(connectionOptions, dynamicsEntitySetUrl, query, maxRowCount, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const querySeparator = (dynamicsEntitySetUrl.indexOf('?') > -1 ? '&' : '?');
+ return yield request(connectionOptions, `${dynamicsEntitySetUrl}${querySeparator}fetchXml=${escape(GetQueryXml(query, maxRowCount))}`, 'GET', undefined, headers);
+ });
}
-export function dynamicsSave(entitySetName, data, id, headers) {
- if (id) {
- return request(`/api/data/${WebApiVersion}/${entitySetName}(${trimId(id)})`, 'PATCH', data, headers);
- }
- else {
- return request(`/api/data/${WebApiVersion}/${entitySetName}()`, 'POST', data, headers);
- }
+export function dynamicsRequest(connectionOptions, dynamicsEntitySetUrl, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return yield request(connectionOptions, dynamicsEntitySetUrl, 'GET', undefined, headers);
+ });
+}
+export function dynamicsSave(connectionOptions, entitySetName, data, id, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (id) {
+ return yield request(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${entitySetName}(${trimId(id)})`, 'PATCH', data, headers);
+ }
+ else {
+ return yield request(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${entitySetName}()`, 'POST', data, headers);
+ }
+ });
}
export function formatDynamicsResponse(data) {
var items = [];
@@ -36,10 +67,10 @@ export function formatDynamicsResponse(data) {
}
if (data) {
for (var item of data) {
- var row = {};
- for (var key in item) {
+ let row = {};
+ for (let key in item) {
var name = key;
- if (name.indexOf('@odata') == 0) {
+ if (name.indexOf('@odata') === 0) {
continue;
}
if (name.indexOf('transactioncurrencyid') > -1) {
@@ -47,12 +78,12 @@ export function formatDynamicsResponse(data) {
}
if (name.indexOf('@') > -1) {
name = name.substring(0, name.indexOf('@'));
- if (name.indexOf('_') == 0) {
+ if (name.indexOf('_') === 0) {
name = name.slice(1, -6);
}
name += "_formatted";
}
- else if (name.indexOf('_') == 0) {
+ else if (name.indexOf('_') === 0) {
name = name.slice(1, -6);
}
if (name.indexOf('_x002e_') > -1) {
@@ -72,15 +103,56 @@ export function formatDynamicsResponse(data) {
}
return items;
}
-function request(url, method, body, headers) {
- return fetch(url, {
- method: method,
- headers: Object.assign({ 'Content-Type': 'application/json; charset=utf-8' }, DynamicsHeaders, headers),
- body: body
- })
- .then(response => response.json())
- .then(data => formatDynamicsResponse(data));
+function request(connectionOptions, url, method, body, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let callUrl = connectionOptions.serverUrl;
+ if (callUrl.endsWith("/")) {
+ callUrl = callUrl.substr(0, callUrl.length - 1);
+ }
+ callUrl = `${callUrl}${url}`;
+ //TODO: fetch if we can.
+ if (connectionOptions.authType === AuthenticationType.Windows) {
+ return new Promise((resolve, reject) => {
+ httpntlm[method.toLowerCase()]({
+ url: callUrl,
+ username: connectionOptions.username,
+ password: connectionOptions.password,
+ workstation: connectionOptions.workstation || '',
+ domain: connectionOptions.domain || '',
+ body: body,
+ headers: Object.assign(Object.assign({ 'Content-Type': 'application/json; charset=utf-8' }, DynamicsHeaders), headers)
+ }, function (err, res) {
+ if (err) {
+ console.error(err);
+ reject(err);
+ }
+ const json = JSON.parse(res.body);
+ if (json.error) {
+ console.error(json.error.message);
+ reject(json.error.message);
+ }
+ else if (json.ExceptionMessage) {
+ console.error(json.ExceptionMessage);
+ reject(`The service call returned HTTP ${json.ErrorCode} - ${json.ExceptionMessage}`);
+ }
+ else {
+ resolve(formatDynamicsResponse(json));
+ }
+ });
+ });
+ }
+ else {
+ return fetch(url, {
+ method: method,
+ headers: Object.assign(Object.assign({ 'Authorization': `Bearer ${connectionOptions.accessToken}`, 'Content-Type': 'application/json; charset=utf-8' }, DynamicsHeaders), headers),
+ body: body
+ })
+ .then(response => response.json())
+ .then(data => formatDynamicsResponse(data));
+ }
+ });
}
function trimId(id) {
return (id || '').replace(/{|}/g, '');
}
+//# sourceMappingURL=DynamicsRequest.js.map
\ No newline at end of file
diff --git a/lib/es6/Dynamics/DynamicsRequest.js.map b/lib/es6/Dynamics/DynamicsRequest.js.map
new file mode 100644
index 0000000..7e1feed
--- /dev/null
+++ b/lib/es6/Dynamics/DynamicsRequest.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"DynamicsRequest.js","sourceRoot":"","sources":["../../../src/Dynamics/DynamicsRequest.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/es6/Dynamics/Model/AttributeMetadata.js b/lib/es6/Dynamics/Model/AttributeMetadata.js
index 3c38485..71b95ce 100644
--- a/lib/es6/Dynamics/Model/AttributeMetadata.js
+++ b/lib/es6/Dynamics/Model/AttributeMetadata.js
@@ -15,3 +15,4 @@ export const AttributeTypeCodes = [
'Status',
'String'
];
+//# sourceMappingURL=AttributeMetadata.js.map
\ No newline at end of file
diff --git a/lib/es6/Dynamics/Model/AttributeMetadata.js.map b/lib/es6/Dynamics/Model/AttributeMetadata.js.map
new file mode 100644
index 0000000..b1dfbcd
--- /dev/null
+++ b/lib/es6/Dynamics/Model/AttributeMetadata.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"AttributeMetadata.js","sourceRoot":"","sources":["../../../../src/Dynamics/Model/AttributeMetadata.ts"],"names":[],"mappings":"AAoCA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAC9B,QAAQ;IACR,SAAS;IACT,UAAU;IACV,UAAU;IACV,SAAS;IACT,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,MAAM;IACN,OAAO;IACP,WAAW;IACX,UAAU;IACV,OAAO;IACP,QAAQ;IACR,QAAQ;CACX,CAAC"}
\ No newline at end of file
diff --git a/lib/es6/Dynamics/Model/EntityMetadata.js b/lib/es6/Dynamics/Model/EntityMetadata.js
index e69de29..0a1c5ba 100644
--- a/lib/es6/Dynamics/Model/EntityMetadata.js
+++ b/lib/es6/Dynamics/Model/EntityMetadata.js
@@ -0,0 +1 @@
+//# sourceMappingURL=EntityMetadata.js.map
\ No newline at end of file
diff --git a/lib/es6/Dynamics/Model/EntityMetadata.js.map b/lib/es6/Dynamics/Model/EntityMetadata.js.map
new file mode 100644
index 0000000..26dfcd7
--- /dev/null
+++ b/lib/es6/Dynamics/Model/EntityMetadata.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"EntityMetadata.js","sourceRoot":"","sources":["../../../../src/Dynamics/Model/EntityMetadata.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/lib/es6/Dynamics/Model/OptionSetMetadata.js b/lib/es6/Dynamics/Model/OptionSetMetadata.js
index e69de29..e569170 100644
--- a/lib/es6/Dynamics/Model/OptionSetMetadata.js
+++ b/lib/es6/Dynamics/Model/OptionSetMetadata.js
@@ -0,0 +1 @@
+//# sourceMappingURL=OptionSetMetadata.js.map
\ No newline at end of file
diff --git a/lib/es6/Dynamics/Model/OptionSetMetadata.js.map b/lib/es6/Dynamics/Model/OptionSetMetadata.js.map
new file mode 100644
index 0000000..8410470
--- /dev/null
+++ b/lib/es6/Dynamics/Model/OptionSetMetadata.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"OptionSetMetadata.js","sourceRoot":"","sources":["../../../../src/Dynamics/Model/OptionSetMetadata.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/lib/es6/Dynamics/Model/OrganizationMetadata.d.ts b/lib/es6/Dynamics/Model/OrganizationMetadata.d.ts
new file mode 100644
index 0000000..15e6602
--- /dev/null
+++ b/lib/es6/Dynamics/Model/OrganizationMetadata.d.ts
@@ -0,0 +1,11 @@
+export interface OrganizationMetadata {
+ Id?: string;
+ UniqueName?: string;
+ UrlName?: string;
+ FriendlyName?: string;
+ State?: number;
+ Version?: string;
+ Uri?: string;
+ AppUri?: string;
+ LastUpdated?: Date;
+}
diff --git a/lib/es6/Dynamics/Model/OrganizationMetadata.js b/lib/es6/Dynamics/Model/OrganizationMetadata.js
new file mode 100644
index 0000000..913d8d1
--- /dev/null
+++ b/lib/es6/Dynamics/Model/OrganizationMetadata.js
@@ -0,0 +1 @@
+//# sourceMappingURL=OrganizationMetadata.js.map
\ No newline at end of file
diff --git a/lib/es6/Dynamics/Model/OrganizationMetadata.js.map b/lib/es6/Dynamics/Model/OrganizationMetadata.js.map
new file mode 100644
index 0000000..c636362
--- /dev/null
+++ b/lib/es6/Dynamics/Model/OrganizationMetadata.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"OrganizationMetadata.js","sourceRoot":"","sources":["../../../../src/Dynamics/Model/OrganizationMetadata.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/lib/es6/Query/Query.d.ts b/lib/es6/Query/Query.d.ts
index d9ab90a..af078d7 100644
--- a/lib/es6/Query/Query.d.ts
+++ b/lib/es6/Query/Query.d.ts
@@ -19,6 +19,7 @@ export interface DataQueryJoin extends DataQuery {
IsOuterJoin?: boolean;
}
export interface Query {
+ [key: string]: any;
alias(attributeName: string, alias: string): Query;
path(entityPath: string): Query;
select(...attributeNames: string[]): Query;
diff --git a/lib/es6/Query/Query.js b/lib/es6/Query/Query.js
index 898dedf..1ebfb55 100644
--- a/lib/es6/Query/Query.js
+++ b/lib/es6/Query/Query.js
@@ -64,7 +64,7 @@ class QueryProvider {
return this;
}
whereAny(any) {
- var conditions = [];
+ let conditions = [];
any((attributeName, operator, ...values) => {
conditions.push({
AttributeName: attributeName,
@@ -99,3 +99,4 @@ class QueryProvider {
return [].concat(...values);
}
}
+//# sourceMappingURL=Query.js.map
\ No newline at end of file
diff --git a/lib/es6/Query/Query.js.map b/lib/es6/Query/Query.js.map
new file mode 100644
index 0000000..5f8ea6f
--- /dev/null
+++ b/lib/es6/Query/Query.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Query.js","sourceRoot":"","sources":["../../../src/Query/Query.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/es6/Query/QueryXml.js b/lib/es6/Query/QueryXml.js
index e2693d5..54dddbc 100644
--- a/lib/es6/Query/QueryXml.js
+++ b/lib/es6/Query/QueryXml.js
@@ -32,7 +32,7 @@ function getQueryXml(query) {
}
});
query.OrderBy.forEach(attribute => {
- if (attribute.indexOf('_') == 0) {
+ if (attribute.indexOf('_') === 0) {
xml.push(``);
}
else {
@@ -109,16 +109,21 @@ function getConditionXml(condition) {
return xml.join('\n');
}
function encodeValue(value) {
- if (value === 0)
+ if (value === 0) {
return '0';
- if (value === true)
+ }
+ if (value === true) {
return 'true';
- if (value === false)
+ }
+ if (value === false) {
return 'false';
- if (!value)
+ }
+ if (!value) {
return '';
- if (typeof (value.toISOString) === 'function')
+ }
+ if (typeof (value.toISOString) === 'function') {
return value.toISOString();
+ }
return xmlEncode(value.toString());
}
function xmlEncode(text) {
@@ -137,8 +142,9 @@ function formatXml(xmlString) {
return xmlString.replace(/\s*<[^>\/]*>[^<>]*<\/[^>]*>|\s*<.+?>|\s*[^<]+/g, //pattern to match nodes (angled brackets or text)
function (m, i) {
m = m.replace(/^\s+|\s+$/g, ""); //trim the match just in case
- if (i < 38 && /^<[?]xml/.test(m))
- return m + "\n"; //if the match is a header, ignore it
+ if (i < 38 && /^<[?]xml/.test(m)) {
+ return m + "\n";
+ } //if the match is a header, ignore it
if (/^<[/]/.test(m)) //if the match is a closing tag
{
tabs = tabs.replace(indent, ""); //remove one indent from the store
@@ -163,3 +169,4 @@ function formatXml(xmlString) {
return "\n" + m; //content has additional space(match) from header
});
}
+//# sourceMappingURL=QueryXml.js.map
\ No newline at end of file
diff --git a/lib/es6/Query/QueryXml.js.map b/lib/es6/Query/QueryXml.js.map
new file mode 100644
index 0000000..4619b38
--- /dev/null
+++ b/lib/es6/Query/QueryXml.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"QueryXml.js","sourceRoot":"","sources":["../../../src/Query/QueryXml.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/es6/ntlm/hash.d.ts b/lib/es6/ntlm/hash.d.ts
new file mode 100644
index 0000000..726df27
--- /dev/null
+++ b/lib/es6/ntlm/hash.d.ts
@@ -0,0 +1,16 @@
+///
+import { Type2Message } from './type2.message';
+export declare class Hash {
+ static createLMResponse(challenge: Buffer, lmhash: Buffer): Buffer;
+ static createLMHash(password: string): Buffer;
+ static calculateDES(key: Buffer, message: Buffer): Buffer;
+ static createNTLMResponse(challenge: Buffer, ntlmhash: Buffer): Buffer;
+ static createNTLMHash(password: string): Buffer;
+ static createNTLMv2Hash(ntlmhash: Buffer, username: string, authTargetName: string): Buffer;
+ static createLMv2Response(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string): Buffer;
+ static createNTLMv2Response(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string, withMic: boolean): Buffer;
+ static createMIC(type1message: Buffer, type2message: Type2Message, type3message: Buffer, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string): Buffer;
+ static createRandomSessionKey(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string, withMic: boolean): Buffer;
+ static createPseudoRandomValue(length: number): string;
+ static createTimestamp(): string;
+}
diff --git a/lib/es6/ntlm/hash.js b/lib/es6/ntlm/hash.js
new file mode 100644
index 0000000..2880e15
--- /dev/null
+++ b/lib/es6/ntlm/hash.js
@@ -0,0 +1,159 @@
+'use strict';
+import * as crypto from 'crypto';
+export class Hash {
+ static createLMResponse(challenge, lmhash) {
+ let buf = Buffer.alloc(24);
+ let pwBuffer = Buffer.alloc(21).fill(0);
+ lmhash.copy(pwBuffer);
+ Hash.calculateDES(pwBuffer.slice(0, 7), challenge).copy(buf);
+ Hash.calculateDES(pwBuffer.slice(7, 14), challenge).copy(buf, 8);
+ Hash.calculateDES(pwBuffer.slice(14), challenge).copy(buf, 16);
+ return buf;
+ }
+ static createLMHash(password) {
+ let buf = Buffer.alloc(16), pwBuffer = Buffer.alloc(14), magicKey = Buffer.from('KGS!@#$%', 'ascii');
+ if (password.length > 14) {
+ buf.fill(0);
+ return buf;
+ }
+ pwBuffer.fill(0);
+ pwBuffer.write(password.toUpperCase(), 0, 'ascii');
+ return Buffer.concat([
+ Hash.calculateDES(pwBuffer.slice(0, 7), magicKey),
+ Hash.calculateDES(pwBuffer.slice(7), magicKey)
+ ]);
+ }
+ static calculateDES(key, message) {
+ let desKey = Buffer.alloc(8);
+ desKey[0] = key[0] & 0xFE;
+ desKey[1] = ((key[0] << 7) & 0xFF) | (key[1] >> 1);
+ desKey[2] = ((key[1] << 6) & 0xFF) | (key[2] >> 2);
+ desKey[3] = ((key[2] << 5) & 0xFF) | (key[3] >> 3);
+ desKey[4] = ((key[3] << 4) & 0xFF) | (key[4] >> 4);
+ desKey[5] = ((key[4] << 3) & 0xFF) | (key[5] >> 5);
+ desKey[6] = ((key[5] << 2) & 0xFF) | (key[6] >> 6);
+ desKey[7] = (key[6] << 1) & 0xFF;
+ for (let i = 0; i < 8; i++) {
+ let parity = 0;
+ for (let j = 1; j < 8; j++) {
+ parity += (desKey[i] >> j) % 2;
+ }
+ desKey[i] |= (parity % 2) === 0 ? 1 : 0;
+ }
+ let des = crypto.createCipheriv('DES-ECB', desKey, '');
+ return des.update(message);
+ }
+ static createNTLMResponse(challenge, ntlmhash) {
+ let buf = Buffer.alloc(24), ntlmBuffer = Buffer.alloc(21).fill(0);
+ ntlmhash.copy(ntlmBuffer);
+ Hash.calculateDES(ntlmBuffer.slice(0, 7), challenge).copy(buf);
+ Hash.calculateDES(ntlmBuffer.slice(7, 14), challenge).copy(buf, 8);
+ Hash.calculateDES(ntlmBuffer.slice(14), challenge).copy(buf, 16);
+ return buf;
+ }
+ static createNTLMHash(password) {
+ let md4sum = crypto.createHash('md4');
+ md4sum.update(Buffer.from(password, 'ucs2')); // lgtm[js/insufficient-password-hash]
+ return md4sum.digest();
+ }
+ static createNTLMv2Hash(ntlmhash, username, authTargetName) {
+ let hmac = crypto.createHmac('md5', ntlmhash);
+ hmac.update(Buffer.from(username.toUpperCase() + authTargetName, 'ucs2')); // lgtm[js/weak-cryptographic-algorithm]
+ return hmac.digest();
+ }
+ static createLMv2Response(type2message, username, authTargetName, ntlmhash, nonce) {
+ let buf = Buffer.alloc(24);
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+ //server challenge
+ type2message.challenge.copy(buf, 8);
+ //client nonce
+ buf.write(nonce, 16, 'hex');
+ //create hash
+ hmac.update(buf.slice(8));
+ let hashedBuffer = hmac.digest();
+ hashedBuffer.copy(buf);
+ return buf;
+ }
+ static createNTLMv2Response(type2message, username, authTargetName, ntlmhash, nonce, timestamp, withMic) {
+ let bufferSize = 48 + type2message.targetInfo.buffer.length;
+ if (withMic) {
+ bufferSize += 8;
+ }
+ let buf = Buffer.alloc(bufferSize), ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName), hmac = crypto.createHmac('md5', ntlm2hash);
+ //the first 8 bytes are spare to store the hashed value before the blob
+ //server challenge
+ type2message.challenge.copy(buf, 8);
+ //blob signature
+ buf.writeUInt32BE(0x01010000, 16);
+ //reserved
+ buf.writeUInt32LE(0, 20);
+ //timestamp
+ let timestampLow = Number('0x' + timestamp.substring(Math.max(0, timestamp.length - 8)));
+ let timestampHigh = Number('0x' + timestamp.substring(0, Math.max(0, timestamp.length - 8)));
+ buf.writeUInt32LE(timestampLow, 24);
+ buf.writeUInt32LE(timestampHigh, 28);
+ //random client nonce
+ buf.write(nonce, 32, 'hex');
+ //zero
+ buf.writeUInt32LE(0, 40);
+ //complete target information block from type 2 message
+ type2message.targetInfo.buffer.copy(buf, 44);
+ let bufferPos = 44 + type2message.targetInfo.buffer.length;
+ if (withMic) {
+ // Should include MIC in response, indicate it in AV_FLAGS
+ buf.writeUInt16LE(0x06, bufferPos - 4);
+ buf.writeUInt16LE(0x04, bufferPos - 2);
+ buf.writeUInt32LE(0x02, bufferPos);
+ // Write new endblock
+ buf.writeUInt32LE(0, bufferPos + 4);
+ bufferPos += 8;
+ }
+ //zero
+ buf.writeUInt32LE(0, bufferPos);
+ hmac.update(buf.slice(8));
+ let hashedBuffer = hmac.digest();
+ hashedBuffer.copy(buf);
+ return buf;
+ }
+ static createMIC(type1message, type2message, type3message, username, authTargetName, ntlmhash, nonce, timestamp) {
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let ntlm2response = Hash.createNTLMv2Response(type2message, username, authTargetName, ntlmhash, nonce, timestamp, true);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+ let session_base_key = hmac.update(ntlm2response.slice(0, 16)).digest();
+ let key_exchange_key = session_base_key;
+ //create MIC hash
+ hmac = crypto.createHmac('md5', key_exchange_key);
+ hmac.update(type1message);
+ hmac.update(type2message.raw);
+ hmac.update(type3message);
+ let hashedBuffer = hmac.digest();
+ return hashedBuffer;
+ }
+ static createRandomSessionKey(type2message, username, authTargetName, ntlmhash, nonce, timestamp, withMic) {
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let ntlm2response = Hash.createNTLMv2Response(type2message, username, authTargetName, ntlmhash, nonce, timestamp, withMic);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+ let session_base_key = hmac.update(ntlm2response.slice(0, 16)).digest();
+ let key_exchange_key = session_base_key;
+ let exported_session_key_hex = Hash.createPseudoRandomValue(32);
+ let exported_session_key = Buffer.from(exported_session_key_hex, 'hex');
+ let rc4 = crypto.createCipheriv('rc4', key_exchange_key, '');
+ let encrypted_random_session_key = rc4.update(exported_session_key);
+ return encrypted_random_session_key;
+ }
+ static createPseudoRandomValue(length) {
+ let str = '';
+ while (str.length < length) {
+ str += Math.floor(Math.random() * 16).toString(16);
+ }
+ return str;
+ }
+ static createTimestamp() {
+ //TODO: we are loosing precision here since js is not able to handle those large integers
+ // maybe think about a different solution here
+ // 11644473600000 = diff between 1970 and 1601
+ return ((Date.now() + 11644473600000) * 10000).toString(16);
+ }
+}
+//# sourceMappingURL=hash.js.map
\ No newline at end of file
diff --git a/lib/es6/ntlm/hash.js.map b/lib/es6/ntlm/hash.js.map
new file mode 100644
index 0000000..3203003
--- /dev/null
+++ b/lib/es6/ntlm/hash.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../src/ntlm/hash.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAGjC,MAAM,OAAO,IAAI;IACf,MAAM,CAAC,gBAAgB,CAAC,SAAiB,EAAE,MAAc;QACvD,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAExC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAE/D,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,QAAgB;QAClC,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EACxB,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAC3B,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAE9C,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE;YACxB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACZ,OAAO,GAAG,CAAC;SACZ;QAED,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAEnD,OAAO,MAAM,CAAC,MAAM,CAAC;YACjB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;YACjD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;SACjD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,GAAW,EAAE,OAAe;QAC9C,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE7B,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,MAAM,GAAG,CAAC,CAAC;YAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;aAChC;YAED,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACzC;QAED,IAAI,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,SAAiB,EAAE,QAAgB;QAC3D,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EACxB,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAExC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1B,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/D,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAEjE,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,QAAgB;QACpC,IAAI,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,sCAAsC;QACpF,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,QAAgB,EAAE,QAAgB,EAAE,cAAsB;QAChF,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,wCAAwC;QACnH,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,YAA0B,EAAE,QAAgB,EAAE,cAAsB,EAAE,QAAgB,EAAE,KAAa;QAC7H,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC1E,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAE/C,kBAAkB;QAClB,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAEpC,cAAc;QACd,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAE5B,aAAa;QACb,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAEjC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEvB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,YAA0B,EAAE,QAAgB,EAAE,cAAsB,EAAE,QAAgB,EAAE,KAAa,EAAE,SAAiB,EAAE,OAAgB;QACpK,IAAI,UAAU,GAAG,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5D,IAAI,OAAO,EAAE;YACX,UAAU,IAAI,CAAC,CAAC;SACjB;QACD,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAChC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,EACrE,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAE7C,uEAAuE;QAEvE,kBAAkB;QAClB,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAEpC,gBAAgB;QAChB,GAAG,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAElC,UAAU;QACV,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEzB,WAAW;QACX,IAAI,YAAY,GAAG,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7F,GAAG,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACpC,GAAG,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAErC,qBAAqB;QACrB,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAE5B,MAAM;QACN,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEzB,uDAAuD;QACvD,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAE7C,IAAI,SAAS,GAAG,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3D,IAAI,OAAO,EAAE;YACX,0DAA0D;YAC1D,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;YACvC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;YACvC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACnC,qBAAqB;YACrB,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;YACpC,SAAS,IAAI,CAAC,CAAC;SAChB;QAED,MAAM;QACN,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAEhC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAEjC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEvB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,YAAoB,EAAE,YAA0B,EAAE,YAAoB,EAAE,QAAgB,EAAE,cAAsB,EAAE,QAAgB,EAAE,KAAa,EAAE,SAAiB;QACnL,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC1E,IAAI,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACxH,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACvE,IAAI,gBAAgB,GAAG,gBAAgB,CAAC;QACxC,iBAAiB;QACjB,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1B,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,sBAAsB,CAAC,YAA0B,EAAE,QAAgB,EAAE,cAAsB,EAAE,QAAgB,EAAE,KAAa,EAAE,SAAiB,EAAE,OAAgB;QACtK,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC1E,IAAI,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC3H,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACvE,IAAI,gBAAgB,GAAG,gBAAgB,CAAC;QAExC,IAAI,wBAAwB,GAAG,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAChE,IAAI,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QACxE,IAAI,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,4BAA4B,GAAG,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACpE,OAAO,4BAA4B,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,uBAAuB,CAAC,MAAc;QAC3C,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE;YAC1B,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SACpD;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,eAAe;QACpB,yFAAyF;QACzF,8CAA8C;QAC9C,8CAA8C;QAC9C,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF"}
\ No newline at end of file
diff --git a/lib/es6/ntlm/interfaces/i.ntlm.d.ts b/lib/es6/ntlm/interfaces/i.ntlm.d.ts
new file mode 100644
index 0000000..855a424
--- /dev/null
+++ b/lib/es6/ntlm/interfaces/i.ntlm.d.ts
@@ -0,0 +1,7 @@
+import { Type2Message } from "../type2.message";
+import { NtlmMessage } from "../ntlm.message";
+export interface INtlm {
+ createType1Message(ntlm_version: number, workstation: string | undefined, target: string | undefined): NtlmMessage;
+ decodeType2Message(str: string | undefined): Type2Message;
+ createType3Message(type1message: NtlmMessage, type2Message: Type2Message, username: string, password: string, workstation: string | undefined, target: string | undefined, client_nonce: string | undefined, timestamp: string | undefined): NtlmMessage;
+}
diff --git a/lib/es6/ntlm/interfaces/i.ntlm.js b/lib/es6/ntlm/interfaces/i.ntlm.js
new file mode 100644
index 0000000..e9ec7b3
--- /dev/null
+++ b/lib/es6/ntlm/interfaces/i.ntlm.js
@@ -0,0 +1 @@
+//# sourceMappingURL=i.ntlm.js.map
\ No newline at end of file
diff --git a/lib/es6/ntlm/interfaces/i.ntlm.js.map b/lib/es6/ntlm/interfaces/i.ntlm.js.map
new file mode 100644
index 0000000..fc3fbdc
--- /dev/null
+++ b/lib/es6/ntlm/interfaces/i.ntlm.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"i.ntlm.js","sourceRoot":"","sources":["../../../../src/ntlm/interfaces/i.ntlm.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/lib/es6/ntlm/ntlm.constants.d.ts b/lib/es6/ntlm/ntlm.constants.d.ts
new file mode 100644
index 0000000..0a98088
--- /dev/null
+++ b/lib/es6/ntlm/ntlm.constants.d.ts
@@ -0,0 +1,3 @@
+export declare class NtlmConstants {
+ static readonly NTLM_SIGNATURE = "NTLMSSP\0";
+}
diff --git a/lib/es6/ntlm/ntlm.constants.js b/lib/es6/ntlm/ntlm.constants.js
new file mode 100644
index 0000000..6b7ae60
--- /dev/null
+++ b/lib/es6/ntlm/ntlm.constants.js
@@ -0,0 +1,4 @@
+export class NtlmConstants {
+}
+NtlmConstants.NTLM_SIGNATURE = 'NTLMSSP\0';
+//# sourceMappingURL=ntlm.constants.js.map
\ No newline at end of file
diff --git a/lib/es6/ntlm/ntlm.constants.js.map b/lib/es6/ntlm/ntlm.constants.js.map
new file mode 100644
index 0000000..23b28ce
--- /dev/null
+++ b/lib/es6/ntlm/ntlm.constants.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ntlm.constants.js","sourceRoot":"","sources":["../../../src/ntlm/ntlm.constants.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAa;;AACR,4BAAc,GAAG,WAAW,CAAC"}
\ No newline at end of file
diff --git a/lib/es6/ntlm/ntlm.d.ts b/lib/es6/ntlm/ntlm.d.ts
new file mode 100644
index 0000000..0a12dbc
--- /dev/null
+++ b/lib/es6/ntlm/ntlm.d.ts
@@ -0,0 +1,10 @@
+import { INtlm } from './interfaces/i.ntlm';
+import { Type2Message } from './type2.message';
+import { NtlmMessage } from './ntlm.message';
+export default function ntlm(): INtlm;
+export declare class Ntlm implements INtlm {
+ createType1Message(ntlm_version: number, workstation: string | undefined, target: string | undefined): NtlmMessage;
+ private addVersionStruct;
+ decodeType2Message(str: string | undefined): Type2Message;
+ createType3Message(type1message: NtlmMessage, type2message: Type2Message, username: string, password: string, workstation: string | undefined, target: string | undefined, client_nonce_override: string | undefined, timestamp_override: string | undefined): NtlmMessage;
+}
diff --git a/lib/es6/ntlm/ntlm.flags.d.ts b/lib/es6/ntlm/ntlm.flags.d.ts
new file mode 100644
index 0000000..37c462f
--- /dev/null
+++ b/lib/es6/ntlm/ntlm.flags.d.ts
@@ -0,0 +1,28 @@
+export declare enum NtlmFlags {
+ NEGOTIATE_UNICODE = 1,
+ NEGOTIATE_OEM = 2,
+ REQUEST_TARGET = 4,
+ NEGOTIATE_SIGN = 16,
+ NEGOTIATE_SEAL = 32,
+ NEGOTIATE_DATAGRAM_STYLE = 64,
+ NEGOTIATE_LM_KEY = 128,
+ NEGOTIATE_NETWARE = 256,
+ NEGOTIATE_NTLM_KEY = 512,
+ NEGOTIATE_ANONYMOUS = 2048,
+ NEGOTIATE_DOMAIN_SUPPLIED = 4096,
+ NEGOTIATE_WORKSTATION_SUPPLIED = 8192,
+ NEGOTIATE_LOCAL_CALL = 16384,
+ NEGOTIATE_ALWAYS_SIGN = 32768,
+ TARGET_TYPE_DOMAIN = 65536,
+ TARGET_TYPE_SERVER = 131072,
+ TARGET_TYPE_SHARE = 262144,
+ NEGOTIATE_NTLM2_KEY = 524288,
+ REQUEST_INIT_RESPONSE = 1048576,
+ REQUEST_ACCEPT_RESPONSE = 2097152,
+ REQUEST_NONNT_SESSION_KEY = 4194304,
+ NEGOTIATE_TARGET_INFO = 8388608,
+ NEGOTIATE_VERSION = 33554432,
+ NEGOTIATE_128 = 536870912,
+ NEGOTIATE_KEY_EXCHANGE = 1073741824,
+ NEGOTIATE_56 = -2147483648
+}
diff --git a/lib/es6/ntlm/ntlm.flags.js b/lib/es6/ntlm/ntlm.flags.js
new file mode 100644
index 0000000..e26774a
--- /dev/null
+++ b/lib/es6/ntlm/ntlm.flags.js
@@ -0,0 +1,82 @@
+'use strict';
+export var NtlmFlags;
+(function (NtlmFlags) {
+ /* Indicates that Unicode strings are supported for use in security buffer
+ data. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_UNICODE"] = 1] = "NEGOTIATE_UNICODE";
+ /* Indicates that OEM strings are supported for use in security buffer data. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_OEM"] = 2] = "NEGOTIATE_OEM";
+ /* Requests that the server's authentication realm be included in the Type 2
+ message. */
+ NtlmFlags[NtlmFlags["REQUEST_TARGET"] = 4] = "REQUEST_TARGET";
+ /* unknown (1<<3) */
+ /* Specifies that authenticated communication between the client and server
+ should carry a digital signature (message integrity). */
+ NtlmFlags[NtlmFlags["NEGOTIATE_SIGN"] = 16] = "NEGOTIATE_SIGN";
+ /* Specifies that authenticated communication between the client and server
+ should be encrypted (message confidentiality). */
+ NtlmFlags[NtlmFlags["NEGOTIATE_SEAL"] = 32] = "NEGOTIATE_SEAL";
+ /* Indicates that datagram authentication is being used. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_DATAGRAM_STYLE"] = 64] = "NEGOTIATE_DATAGRAM_STYLE";
+ /* Indicates that the LAN Manager session key should be used for signing and
+ sealing authenticated communications. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_LM_KEY"] = 128] = "NEGOTIATE_LM_KEY";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["NEGOTIATE_NETWARE"] = 256] = "NEGOTIATE_NETWARE";
+ /* Indicates that NTLM authentication is being used. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_NTLM_KEY"] = 512] = "NEGOTIATE_NTLM_KEY";
+ /* unknown (1<<10) */
+ /* Sent by the client in the Type 3 message to indicate that an anonymous
+ context has been established. This also affects the response fields. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_ANONYMOUS"] = 2048] = "NEGOTIATE_ANONYMOUS";
+ /* Sent by the client in the Type 1 message to indicate that a desired
+ authentication realm is included in the message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_DOMAIN_SUPPLIED"] = 4096] = "NEGOTIATE_DOMAIN_SUPPLIED";
+ /* Sent by the client in the Type 1 message to indicate that the client
+ workstation's name is included in the message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_WORKSTATION_SUPPLIED"] = 8192] = "NEGOTIATE_WORKSTATION_SUPPLIED";
+ /* Sent by the server to indicate that the server and client are on the same
+ machine. Implies that the client may use a pre-established local security
+ context rather than responding to the challenge. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_LOCAL_CALL"] = 16384] = "NEGOTIATE_LOCAL_CALL";
+ /* Indicates that authenticated communication between the client and server
+ should be signed with a "dummy" signature. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_ALWAYS_SIGN"] = 32768] = "NEGOTIATE_ALWAYS_SIGN";
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a domain. */
+ NtlmFlags[NtlmFlags["TARGET_TYPE_DOMAIN"] = 65536] = "TARGET_TYPE_DOMAIN";
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a server. */
+ NtlmFlags[NtlmFlags["TARGET_TYPE_SERVER"] = 131072] = "TARGET_TYPE_SERVER";
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a share. Presumably, this is for share-level
+ authentication. Usage is unclear. */
+ NtlmFlags[NtlmFlags["TARGET_TYPE_SHARE"] = 262144] = "TARGET_TYPE_SHARE";
+ /* Indicates that the NTLM2 signing and sealing scheme should be used for
+ protecting authenticated communications. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_NTLM2_KEY"] = 524288] = "NEGOTIATE_NTLM2_KEY";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["REQUEST_INIT_RESPONSE"] = 1048576] = "REQUEST_INIT_RESPONSE";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["REQUEST_ACCEPT_RESPONSE"] = 2097152] = "REQUEST_ACCEPT_RESPONSE";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["REQUEST_NONNT_SESSION_KEY"] = 4194304] = "REQUEST_NONNT_SESSION_KEY";
+ /* Sent by the client in the Type 1 message to request Target info block from server.
+ Sent by the server in the Type 2 message to indicate that it is including a
+ Target Information block in the message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_TARGET_INFO"] = 8388608] = "NEGOTIATE_TARGET_INFO";
+ /* unknown (1<24) */
+ /* Indicates that the version info block is included in the message */
+ NtlmFlags[NtlmFlags["NEGOTIATE_VERSION"] = 33554432] = "NEGOTIATE_VERSION";
+ /* unknown (1<26) */
+ /* unknown (1<27) */
+ /* unknown (1<28) */
+ /* Indicates that 128-bit encryption is supported. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_128"] = 536870912] = "NEGOTIATE_128";
+ /* Indicates that the client will provide an encrypted master key in
+ the "Session Key" field of the Type 3 message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_KEY_EXCHANGE"] = 1073741824] = "NEGOTIATE_KEY_EXCHANGE";
+ /* Indicates that 56-bit encryption is supported. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_56"] = -2147483648] = "NEGOTIATE_56";
+})(NtlmFlags || (NtlmFlags = {}));
+//# sourceMappingURL=ntlm.flags.js.map
\ No newline at end of file
diff --git a/lib/es6/ntlm/ntlm.flags.js.map b/lib/es6/ntlm/ntlm.flags.js.map
new file mode 100644
index 0000000..a5f20c9
--- /dev/null
+++ b/lib/es6/ntlm/ntlm.flags.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ntlm.flags.js","sourceRoot":"","sources":["../../../src/ntlm/ntlm.flags.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,MAAM,CAAN,IAAY,SA2GX;AA3GD,WAAY,SAAS;IACnB;eACW;IACX,mEAAwB,CAAA;IAExB,+EAA+E;IAC/E,2DAAoB,CAAA;IAEpB;kBACc;IACd,6DAAqB,CAAA;IAErB,oBAAoB;IAEpB;+DAC2D;IAC3D,8DAAqB,CAAA;IAErB;wDACoD;IACpD,8DAAqB,CAAA;IAErB,2DAA2D;IAC3D,kFAA+B,CAAA;IAE/B;+CAC2C;IAC3C,mEAAuB,CAAA;IAEvB,qBAAqB;IACrB,qEAAwB,CAAA;IAExB,uDAAuD;IACvD,uEAAyB,CAAA;IAEzB,qBAAqB;IAErB;8EAC0E;IAC1E,0EAA2B,CAAA;IAE3B;0DACsD;IACtD,sFAAiC,CAAA;IAEjC;wDACoD;IACpD,gGAAsC,CAAA;IAEtC;;0DAEsD;IACtD,6EAA4B,CAAA;IAE5B;oDACgD;IAChD,+EAA6B,CAAA;IAE7B;2CACuC;IACvC,yEAA0B,CAAA;IAE1B;2CACuC;IACvC,0EAA0B,CAAA;IAE1B;;2CAEuC;IACvC,wEAAyB,CAAA;IAEzB;kDAC8C;IAC9C,4EAA2B,CAAA;IAE3B,qBAAqB;IACrB,iFAA6B,CAAA;IAE7B,qBAAqB;IACrB,qFAA+B,CAAA;IAE/B,qBAAqB;IACrB,yFAAiC,CAAA;IAEjC;;kDAE8C;IAC9C,iFAA6B,CAAA;IAE7B,oBAAoB;IAEpB,sEAAsE;IACtE,0EAAyB,CAAA;IAEzB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IAEpB,qDAAqD;IACrD,mEAAqB,CAAA;IAErB;wDACoD;IACpD,sFAA8B,CAAA;IAE9B,oDAAoD;IACpD,mEAAoB,CAAA;AACtB,CAAC,EA3GW,SAAS,KAAT,SAAS,QA2GpB"}
\ No newline at end of file
diff --git a/lib/es6/ntlm/ntlm.js b/lib/es6/ntlm/ntlm.js
new file mode 100644
index 0000000..90a1433
--- /dev/null
+++ b/lib/es6/ntlm/ntlm.js
@@ -0,0 +1,231 @@
+// All code in this folder is heavily based on the node project ntlm-client.
+// https://github.com/clncln1/node-ntlm-client
+// ----------------------------------------------------------------------------
+// Original license statement:
+// Copyright (c) 2015 Nico Haller
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+// ----------------------------------------------------------------------------
+'use strict';
+import { NtlmFlags } from './ntlm.flags';
+import { NtlmConstants } from './ntlm.constants';
+import { Hash } from './hash';
+import * as os from 'os';
+import { Type2Message } from './type2.message';
+import { NtlmMessage } from './ntlm.message';
+export default function ntlm() {
+ return new Ntlm();
+}
+export class Ntlm {
+ createType1Message(ntlm_version, workstation, target) {
+ let dataPos = 40;
+ let pos = 0;
+ let buf = Buffer.alloc(256);
+ if (target === undefined) {
+ target = '';
+ }
+ if (workstation === undefined) {
+ workstation = os.hostname().toUpperCase();
+ }
+ //signature
+ buf.write(NtlmConstants.NTLM_SIGNATURE, pos, NtlmConstants.NTLM_SIGNATURE.length, 'ascii');
+ pos += NtlmConstants.NTLM_SIGNATURE.length;
+ //message type
+ buf.writeUInt32LE(1, pos);
+ pos += 4;
+ //flags
+ let messageFlags = NtlmFlags.NEGOTIATE_OEM |
+ NtlmFlags.NEGOTIATE_ALWAYS_SIGN |
+ NtlmFlags.NEGOTIATE_VERSION;
+ if (ntlm_version == 1) {
+ messageFlags |= NtlmFlags.NEGOTIATE_NTLM_KEY |
+ NtlmFlags.NEGOTIATE_LM_KEY;
+ }
+ else {
+ messageFlags |= NtlmFlags.NEGOTIATE_NTLM2_KEY;
+ }
+ if (target.length > 0) {
+ messageFlags |= NtlmFlags.NEGOTIATE_DOMAIN_SUPPLIED;
+ }
+ if (workstation.length > 0) {
+ messageFlags |= NtlmFlags.NEGOTIATE_WORKSTATION_SUPPLIED;
+ }
+ // special operator to force conversion to unsigned
+ buf.writeUInt32LE(messageFlags >>> 0, pos);
+ pos += 4;
+ //domain security buffer
+ buf.writeUInt16LE(target.length, pos);
+ pos += 2;
+ buf.writeUInt16LE(target.length, pos);
+ pos += 2;
+ buf.writeUInt32LE(dataPos, pos);
+ pos += 4;
+ if (target.length > 0) {
+ dataPos += buf.write(target, dataPos, 'ascii');
+ }
+ //workstation security buffer
+ buf.writeUInt16LE(workstation.length, pos);
+ pos += 2;
+ buf.writeUInt16LE(workstation.length, pos);
+ pos += 2;
+ buf.writeUInt32LE(dataPos, pos);
+ pos += 4;
+ if (workstation.length > 0) {
+ dataPos += buf.write(workstation, dataPos, 'ascii');
+ }
+ this.addVersionStruct(buf, pos);
+ return new NtlmMessage(buf.slice(0, dataPos));
+ }
+ // Version - hard-coded to
+ // Major version 10, minor version 0 (Windows 10)
+ // build number 18362 (1903 update), NTLM revision 15
+ addVersionStruct(buf, pos) {
+ buf.writeUInt8(10, pos);
+ pos++;
+ buf.writeUInt8(0, pos);
+ pos++;
+ buf.writeUInt16LE(18362, pos);
+ pos += 2;
+ buf.writeUInt32LE(0x0F000000, pos);
+ pos += 4;
+ return pos;
+ }
+ decodeType2Message(str) {
+ if (str === undefined) {
+ throw new Error('Invalid argument');
+ }
+ let ntlmMatch = /^NTLM ([^,\s]+)/.exec(str);
+ if (ntlmMatch) {
+ str = ntlmMatch[1];
+ }
+ let buf = Buffer.from(str, 'base64');
+ let type2message = new Type2Message(buf);
+ return type2message;
+ }
+ createType3Message(type1message, type2message, username, password, workstation, target, client_nonce_override, timestamp_override) {
+ let dataPos = 72;
+ let buf = Buffer.alloc(1024);
+ if (workstation === undefined) {
+ workstation = os.hostname().toUpperCase();
+ }
+ if (target === undefined) {
+ target = type2message.targetName;
+ }
+ //signature
+ buf.write(NtlmConstants.NTLM_SIGNATURE, 0, NtlmConstants.NTLM_SIGNATURE.length, 'ascii');
+ //message type
+ buf.writeUInt32LE(3, 8);
+ let targetLen = type2message.encoding === 'ascii' ? target.length : target.length * 2;
+ let usernameLen = type2message.encoding === 'ascii' ? username.length : username.length * 2;
+ let workstationLen = type2message.encoding === 'ascii' ? workstation.length : workstation.length * 2;
+ let dataPosOffset = targetLen + usernameLen + workstationLen;
+ let timestamp = '';
+ let client_nonce = '';
+ let withMic = false;
+ let withServerTimestamp = false;
+ if (type2message.version === 2 &&
+ type2message.targetInfo &&
+ type2message.targetInfo.parsed['SERVER_TIMESTAMP']) { // Must include MIC, add room for it
+ withServerTimestamp = true;
+ withMic = true;
+ dataPos += 16;
+ }
+ let hashDataPos = dataPos + dataPosOffset;
+ let ntlmHash = Hash.createNTLMHash(password);
+ if (type2message.version === 2) {
+ client_nonce = client_nonce_override || Hash.createPseudoRandomValue(16);
+ if (withServerTimestamp) { // Use server timestamp if provided
+ timestamp = type2message.targetInfo.parsed['SERVER_TIMESTAMP'];
+ }
+ else {
+ timestamp = timestamp_override || Hash.createTimestamp();
+ }
+ let lmv2;
+ if (withServerTimestamp) {
+ lmv2 = Buffer.alloc(24); // zero-filled
+ }
+ else {
+ lmv2 = Hash.createLMv2Response(type2message, username, target, ntlmHash, client_nonce);
+ }
+ //lmv2 security buffer
+ buf.writeUInt16LE(lmv2.length, 12);
+ buf.writeUInt16LE(lmv2.length, 14);
+ buf.writeUInt32LE(hashDataPos, 16);
+ lmv2.copy(buf, hashDataPos);
+ hashDataPos += lmv2.length;
+ let ntlmv2 = Hash.createNTLMv2Response(type2message, username, target, ntlmHash, client_nonce, timestamp, withMic);
+ //ntlmv2 security buffer
+ buf.writeUInt16LE(ntlmv2.length, 20);
+ buf.writeUInt16LE(ntlmv2.length, 22);
+ buf.writeUInt32LE(hashDataPos, 24);
+ ntlmv2.copy(buf, hashDataPos);
+ hashDataPos += ntlmv2.length;
+ }
+ else {
+ let lmHash = Hash.createLMHash(password);
+ let lm = Hash.createLMResponse(type2message.challenge, lmHash);
+ let ntlm = Hash.createNTLMResponse(type2message.challenge, ntlmHash);
+ //lm security buffer
+ buf.writeUInt16LE(lm.length, 12);
+ buf.writeUInt16LE(lm.length, 14);
+ buf.writeUInt32LE(hashDataPos, 16);
+ lm.copy(buf, hashDataPos);
+ hashDataPos += lm.length;
+ //ntlm security buffer
+ buf.writeUInt16LE(ntlm.length, 20);
+ buf.writeUInt16LE(ntlm.length, 22);
+ buf.writeUInt32LE(hashDataPos, 24);
+ ntlm.copy(buf, hashDataPos);
+ hashDataPos += ntlm.length;
+ }
+ //target name security buffer
+ buf.writeUInt16LE(targetLen, 28);
+ buf.writeUInt16LE(targetLen, 30);
+ buf.writeUInt32LE(dataPos, 32);
+ dataPos += buf.write(target, dataPos, type2message.encoding);
+ //user name security buffer
+ buf.writeUInt16LE(usernameLen, 36);
+ buf.writeUInt16LE(usernameLen, 38);
+ buf.writeUInt32LE(dataPos, 40);
+ dataPos += buf.write(username, dataPos, type2message.encoding);
+ //workstation name security buffer
+ buf.writeUInt16LE(workstationLen, 44);
+ buf.writeUInt16LE(workstationLen, 46);
+ buf.writeUInt32LE(dataPos, 48);
+ dataPos += buf.write(workstation, dataPos, type2message.encoding);
+ //session key security buffer
+ let session_key = Buffer.alloc(0);
+ // if (type2message.flags & NtlmFlags.NEGOTIATE_KEY_EXCHANGE) {
+ // session_key = hash.createRandomSessionKey(type2message, username, target, ntlmHash, client_nonce, timestamp, withMic);
+ // }
+ buf.writeUInt16LE(session_key.length, 52);
+ buf.writeUInt16LE(session_key.length, 54);
+ buf.writeUInt32LE(hashDataPos, 56);
+ session_key.copy(buf, hashDataPos);
+ hashDataPos += session_key.length;
+ //flags
+ buf.writeUInt32LE(type2message.flags, 60);
+ this.addVersionStruct(buf, 64);
+ if (withMic) {
+ // Calculate and add MIC
+ let mic = Hash.createMIC(type1message.raw, type2message, buf.slice(0, hashDataPos), username, target, ntlmHash, client_nonce, timestamp);
+ mic.copy(buf, 72);
+ }
+ return new NtlmMessage(buf.slice(0, hashDataPos));
+ //return 'NTLM ' + buf.toString('base64', 0, hashDataPos);
+ }
+}
+//# sourceMappingURL=ntlm.js.map
\ No newline at end of file
diff --git a/lib/es6/ntlm/ntlm.js.map b/lib/es6/ntlm/ntlm.js.map
new file mode 100644
index 0000000..36a5c74
--- /dev/null
+++ b/lib/es6/ntlm/ntlm.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ntlm.js","sourceRoot":"","sources":["../../../src/ntlm/ntlm.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/es6/ntlm/ntlm.message.d.ts b/lib/es6/ntlm/ntlm.message.d.ts
new file mode 100644
index 0000000..65dc231
--- /dev/null
+++ b/lib/es6/ntlm/ntlm.message.d.ts
@@ -0,0 +1,6 @@
+///
+export declare class NtlmMessage {
+ raw: Buffer;
+ constructor(buf: Buffer);
+ header(): string;
+}
diff --git a/lib/es6/ntlm/ntlm.message.js b/lib/es6/ntlm/ntlm.message.js
new file mode 100644
index 0000000..e48fd89
--- /dev/null
+++ b/lib/es6/ntlm/ntlm.message.js
@@ -0,0 +1,9 @@
+export class NtlmMessage {
+ constructor(buf) {
+ this.raw = buf;
+ }
+ header() {
+ return 'NTLM ' + this.raw.toString('base64');
+ }
+}
+//# sourceMappingURL=ntlm.message.js.map
\ No newline at end of file
diff --git a/lib/es6/ntlm/ntlm.message.js.map b/lib/es6/ntlm/ntlm.message.js.map
new file mode 100644
index 0000000..3dc5d61
--- /dev/null
+++ b/lib/es6/ntlm/ntlm.message.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ntlm.message.js","sourceRoot":"","sources":["../../../src/ntlm/ntlm.message.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAW;IAGtB,YAAY,GAAW;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,MAAM;QACJ,OAAO,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;CACF"}
\ No newline at end of file
diff --git a/lib/es6/ntlm/type2.message.d.ts b/lib/es6/ntlm/type2.message.d.ts
new file mode 100644
index 0000000..f1ce986
--- /dev/null
+++ b/lib/es6/ntlm/type2.message.d.ts
@@ -0,0 +1,13 @@
+///
+export declare class Type2Message {
+ raw: Buffer;
+ flags: number;
+ encoding: 'ascii' | 'ucs2';
+ version: number;
+ challenge: Buffer;
+ targetName: string;
+ targetInfo: any;
+ constructor(buf: Buffer);
+ private readTargetName;
+ private parseTargetInfo;
+}
diff --git a/lib/es6/ntlm/type2.message.js b/lib/es6/ntlm/type2.message.js
new file mode 100644
index 0000000..a7f5be4
--- /dev/null
+++ b/lib/es6/ntlm/type2.message.js
@@ -0,0 +1,125 @@
+import { NtlmFlags } from './ntlm.flags';
+import { NtlmConstants } from './ntlm.constants';
+export class Type2Message {
+ constructor(buf) {
+ this.raw = buf;
+ //check signature
+ if (buf.toString('ascii', 0, NtlmConstants.NTLM_SIGNATURE.length) !== NtlmConstants.NTLM_SIGNATURE) {
+ throw new Error('Invalid message signature');
+ }
+ //check message type
+ if (buf.readUInt32LE(NtlmConstants.NTLM_SIGNATURE.length) !== 2) {
+ throw new Error('Invalid message type (no type 2)');
+ }
+ //read flags
+ this.flags = buf.readUInt32LE(20);
+ this.encoding = (this.flags & NtlmFlags.NEGOTIATE_OEM) ? 'ascii' : 'ucs2';
+ this.version = (this.flags & NtlmFlags.NEGOTIATE_NTLM2_KEY) ? 2 : 1;
+ this.challenge = buf.slice(24, 32);
+ //read target name
+ this.targetName = this.readTargetName();
+ //read target info
+ if (this.flags & NtlmFlags.NEGOTIATE_TARGET_INFO) {
+ this.targetInfo = this.parseTargetInfo();
+ }
+ }
+ readTargetName() {
+ let length = this.raw.readUInt16LE(12);
+ //skipping allocated space
+ let offset = this.raw.readUInt32LE(16);
+ if (length === 0) {
+ return '';
+ }
+ if ((offset + length) > this.raw.length || offset < 32) {
+ throw new Error('Bad type 2 message');
+ }
+ return this.raw.toString(this.encoding, offset, offset + length);
+ }
+ parseTargetInfo() {
+ let info = {};
+ let length = this.raw.readUInt16LE(40);
+ //skipping allocated space
+ let offset = this.raw.readUInt32LE(44);
+ let targetInfoBuffer = Buffer.alloc(length);
+ this.raw.copy(targetInfoBuffer, 0, offset, offset + length);
+ if (length === 0) {
+ return info;
+ }
+ if ((offset + length) > this.raw.length || offset < 32) {
+ throw new Error('Bad type 2 message');
+ }
+ let pos = offset;
+ while (pos < (offset + length)) {
+ let blockType = this.raw.readUInt16LE(pos);
+ pos += 2;
+ let blockLength = this.raw.readUInt16LE(pos);
+ pos += 2;
+ if (blockType === 0) {
+ //reached the terminator subblock
+ break;
+ }
+ let blockTypeStr;
+ let blockTypeOutput = 'string';
+ switch (blockType) {
+ case 0x01:
+ blockTypeStr = 'SERVER';
+ break;
+ case 0x02:
+ blockTypeStr = 'DOMAIN';
+ break;
+ case 0x03:
+ blockTypeStr = 'FQDN';
+ break;
+ case 0x04:
+ blockTypeStr = 'DNS';
+ break;
+ case 0x05:
+ blockTypeStr = 'PARENT_DNS';
+ break;
+ case 0x06:
+ blockTypeStr = 'FLAGS';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x07:
+ blockTypeStr = 'SERVER_TIMESTAMP';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x08:
+ blockTypeStr = 'SINGLE_HOST';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x09:
+ blockTypeStr = 'TARGET_NAME';
+ break;
+ case 0x0A:
+ blockTypeStr = 'CHANNEL_BINDING';
+ blockTypeOutput = 'hex';
+ break;
+ default:
+ blockTypeStr = '';
+ break;
+ }
+ if (blockTypeStr) {
+ if (blockTypeOutput === 'string') {
+ info[blockTypeStr] = this.raw.toString('ucs2', pos, pos + blockLength);
+ }
+ else {
+ // Output as hex in little endian order
+ let twoCharBlocks = this.raw.toString('hex', pos, pos + blockLength).match(/.{2}/g);
+ if (twoCharBlocks) {
+ info[blockTypeStr] = twoCharBlocks.reverse().join("");
+ }
+ else {
+ info[blockTypeStr] = null;
+ }
+ }
+ }
+ pos += blockLength;
+ }
+ return {
+ parsed: info,
+ buffer: targetInfoBuffer
+ };
+ }
+}
+//# sourceMappingURL=type2.message.js.map
\ No newline at end of file
diff --git a/lib/es6/ntlm/type2.message.js.map b/lib/es6/ntlm/type2.message.js.map
new file mode 100644
index 0000000..c177142
--- /dev/null
+++ b/lib/es6/ntlm/type2.message.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"type2.message.js","sourceRoot":"","sources":["../../../src/ntlm/type2.message.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/es6/tests/dynamicsMetadataTests.js b/lib/es6/tests/dynamicsMetadataTests.js
index 84f2ad3..5f4c543 100644
--- a/lib/es6/tests/dynamicsMetadataTests.js
+++ b/lib/es6/tests/dynamicsMetadataTests.js
@@ -1,8 +1,9 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
@@ -24,3 +25,4 @@ export function dynamicsMetadataRetrieveAll() {
}
});
}
+//# sourceMappingURL=dynamicsMetadataTests.js.map
\ No newline at end of file
diff --git a/lib/es6/tests/dynamicsMetadataTests.js.map b/lib/es6/tests/dynamicsMetadataTests.js.map
new file mode 100644
index 0000000..cee9004
--- /dev/null
+++ b/lib/es6/tests/dynamicsMetadataTests.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dynamicsMetadataTests.js","sourceRoot":"","sources":["../../../src/tests/dynamicsMetadataTests.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,gBAAgB,MAAM,8BAA8B,CAAC;AAE5D,MAAM,UAAgB,2BAA2B;;QAC7C,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,eAAe,GAAG,WAAW,CAAC,WAAW,KAAK,aAAa,CAAC,WAAW,CAAC;QAE9E,IAAI,CAAC,eAAe,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;SACtD;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5E,IAAI,CAAC,eAAe,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC5D;IACL,CAAC;CAAA"}
\ No newline at end of file
diff --git a/lib/es6/tests/dynamicsTests.js b/lib/es6/tests/dynamicsTests.js
index 4c1c594..ac9270a 100644
--- a/lib/es6/tests/dynamicsTests.js
+++ b/lib/es6/tests/dynamicsTests.js
@@ -1,16 +1,25 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import dynamics from "../Dynamics/Dynamics";
import { QueryOperator } from "../Query/Query";
+import { ConnectionOptions, AuthenticationType } from "../Dynamics/DynamicsRequest";
export function dynamicsTestAll() {
return __awaiter(this, void 0, void 0, function* () {
- const dyn = dynamics();
+ const options = new ConnectionOptions();
+ options.authType = AuthenticationType.Windows;
+ options.username = "Administrator";
+ options.domain = "CONTOSO";
+ options.password = "{password}";
+ options.serverUrl = "http://{server}/{org}/";
+ options.webApiVersion = "v9.0";
+ const dyn = dynamics(options);
/* Batch Request */
const allAccounts = yield dyn.batch()
.requestAllUrls(['/api/data/v9.1/accounts'])
@@ -43,3 +52,4 @@ export function dynamicsTestAll() {
}
});
}
+//# sourceMappingURL=dynamicsTests.js.map
\ No newline at end of file
diff --git a/lib/es6/tests/dynamicsTests.js.map b/lib/es6/tests/dynamicsTests.js.map
new file mode 100644
index 0000000..07b098a
--- /dev/null
+++ b/lib/es6/tests/dynamicsTests.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dynamicsTests.js","sourceRoot":"","sources":["../../../src/tests/dynamicsTests.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEpF,MAAM,UAAgB,eAAe;;QACjC,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACxC,OAAO,CAAC,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC;QAC9C,OAAO,CAAC,QAAQ,GAAG,eAAe,CAAC;QACnC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;QAC3B,OAAO,CAAC,QAAQ,GAAG,YAAY,CAAC;QAChC,OAAO,CAAC,SAAS,GAAG,wBAAwB,CAAC;QAC7C,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC;QAE/B,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE9B,mBAAmB;QACnB,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE;aAChC,cAAc,CAAC,CAAC,yBAAyB,CAAC,CAAC;aAC3C,OAAO,EAAE,CAAC;QAEf,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;YACzB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;SACzC;QAED,mBAAmB;QACnB,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAE5D,IAAI,CAAC,EAAE,EAAE;YACL,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SACpD;QAED,mBAAmB;QACnB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAEjE,IAAI,EAAE,KAAK,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SACpD;QAED,iBAAiB;QACjB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,KAAK,CAE9B,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC;aAC3B,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC;aAC9C,OAAO,CAAC,MAAM,CAAC;aACf,MAAM,CAAC,MAAM,CAAC,CAEtB,CAAC,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,UAAU,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAClD;QAED,qBAAqB;QACrB,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAEnE,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;SAC1D;IACL,CAAC;CAAA"}
\ No newline at end of file
diff --git a/lib/es6/tests/queryTests.js b/lib/es6/tests/queryTests.js
index 8ce6179..39a01b8 100644
--- a/lib/es6/tests/queryTests.js
+++ b/lib/es6/tests/queryTests.js
@@ -21,3 +21,4 @@ export function createQueryWithAllExpressions() {
throw new Error('QueryXml could not be generated!');
}
}
+//# sourceMappingURL=queryTests.js.map
\ No newline at end of file
diff --git a/lib/es6/tests/queryTests.js.map b/lib/es6/tests/queryTests.js.map
new file mode 100644
index 0000000..1c5141f
--- /dev/null
+++ b/lib/es6/tests/queryTests.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"queryTests.js","sourceRoot":"","sources":["../../../src/tests/queryTests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAE5C,MAAM,UAAU,6BAA6B;IACzC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IACnC,SAAS;SACJ,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;SAC3B,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC;SACxB,OAAO,CAAC,MAAM,CAAC;SACf,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1B,IAAI,CAAC,UAAU,CAAC;SAChB,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC;SAC5C,KAAK,CAAC,eAAe,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SACpD,QAAQ,CAAC,EAAE,CAAC,EAAE;QACX,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC;SACD,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAEnC,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAEnD,IAAI,CAAC,QAAQ,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;KACvD;AACL,CAAC"}
\ No newline at end of file
diff --git a/lib/system/more-xrm.d.ts b/lib/system/more-xrm.d.ts
index 3b5818c..6e9b01a 100644
--- a/lib/system/more-xrm.d.ts
+++ b/lib/system/more-xrm.d.ts
@@ -1,3 +1,4 @@
+///
declare module "Query/Query" {
export interface DataQuery {
Alias: any;
@@ -20,6 +21,7 @@ declare module "Query/Query" {
IsOuterJoin?: boolean;
}
export interface Query {
+ [key: string]: any;
alias(attributeName: string, alias: string): Query;
path(entityPath: string): Query;
select(...attributeNames: string[]): Query;
@@ -58,16 +60,31 @@ declare module "Query/QueryXml" {
}
declare module "Dynamics/DynamicsRequest" {
import { Query } from "Query/Query";
- export function dynamicsQuery(query: Query, maxRowCount?: number, headers?: any): Promise;
- export function dynamicsQueryUrl(dynamicsEntitySetUrl: string, query: Query, maxRowCount?: number, headers?: any): Promise;
- export function dynamicsRequest(dynamicsEntitySetUrl: string, headers?: any): Promise;
- export function dynamicsSave(entitySetName: string, data: any, id?: string, headers?: any): Promise;
+ export enum AuthenticationType {
+ Windows = 1,
+ OAuth = 2
+ }
+ export class ConnectionOptions {
+ authType: AuthenticationType;
+ username?: string;
+ password?: string;
+ domain?: string;
+ workstation?: string;
+ accessToken?: string;
+ serverUrl: string;
+ webApiVersion: string;
+ }
+ export function dynamicsQuery(connectionOptions: ConnectionOptions, query: Query, maxRowCount?: number, headers?: any): Promise;
+ export function dynamicsQueryUrl(connectionOptions: ConnectionOptions, dynamicsEntitySetUrl: string, query: Query, maxRowCount?: number, headers?: any): Promise;
+ export function dynamicsRequest(connectionOptions: ConnectionOptions, dynamicsEntitySetUrl: string, headers?: any): Promise;
+ export function dynamicsSave(connectionOptions: ConnectionOptions, entitySetName: string, data: any, id?: string, headers?: any): Promise;
export function formatDynamicsResponse(data: any): any;
}
declare module "Dynamics/DynamicsBatch" {
import { Query } from "Query/Query";
+ import { ConnectionOptions } from "Dynamics/DynamicsRequest";
export interface DynamicsBatch {
- execute(): Promise;
+ execute(): Promise;
request(query: Query, maxRowCount?: number): DynamicsBatch;
requestAll(queries: Query[]): DynamicsBatch;
requestAllUrls(urls: string[]): DynamicsBatch;
@@ -75,14 +92,15 @@ declare module "Dynamics/DynamicsBatch" {
createRelatedEntity(entitySetName: string, data: any, navigationPropertyName: string): void;
};
}
- export function dynamicsBatch(headers?: any): DynamicsBatch;
- export function dynamicsBatchRequest(...url: string[]): Promise;
- export function dynamicsBatchQuery(...query: Query[]): Promise;
+ export function dynamicsBatch(connectionOptions: ConnectionOptions, headers?: any): DynamicsBatch;
+ export function dynamicsBatchRequest(connectionOptions: ConnectionOptions, ...url: string[]): Promise;
+ export function dynamicsBatchQuery(connectionOptions: ConnectionOptions, ...query: Query[]): Promise;
}
declare module "Dynamics/Dynamics" {
import { Query } from "Query/Query";
import { DynamicsBatch } from "Dynamics/DynamicsBatch";
- export const WebApiVersion = "v9.1";
+ import { ConnectionOptions } from "Dynamics/DynamicsRequest";
+ export const DefaultWebApiVersion = "v9.1";
export const DefaultMaxRecords = 100;
export const DynamicsHeaders: {
'OData-MaxVersion': string;
@@ -99,7 +117,30 @@ declare module "Dynamics/Dynamics" {
query(entityLogicalName: string, entitySetName: string): Query;
save(entitySetName: string, data: any, id?: string): Promise;
}
- export default function dynamics(accessToken?: string): Dynamics;
+ export default function dynamics(connectionOptions?: ConnectionOptions): Dynamics;
+}
+declare module "Dynamics/Model/OrganizationMetadata" {
+ export interface OrganizationMetadata {
+ Id?: string;
+ UniqueName?: string;
+ UrlName?: string;
+ FriendlyName?: string;
+ State?: number;
+ Version?: string;
+ Uri?: string;
+ AppUri?: string;
+ LastUpdated?: Date;
+ }
+}
+declare module "Dynamics/DynamicsDiscovery" {
+ import { ConnectionOptions } from "Dynamics/DynamicsRequest";
+ import { OrganizationMetadata } from "Dynamics/Model/OrganizationMetadata";
+ export type OrganizationMetadata = OrganizationMetadata;
+ export const DefaultDiscoveryApiVersion = "v9.1";
+ export default function dynamicsDiscovery(connectionOptions?: ConnectionOptions): DynamicsDiscovery;
+ export interface DynamicsDiscovery {
+ discover(): Promise;
+ }
}
declare module "Dynamics/Model/EntityMetadata" {
export interface EntityMetadata {
@@ -144,6 +185,7 @@ declare module "Dynamics/Model/OptionSetMetadata" {
}
}
declare module "Dynamics/DynamicsMetadata" {
+ import { ConnectionOptions } from "Dynamics/DynamicsRequest";
import { AttributeMetadata, EntityAttributeMetadata, LookupAttributeMetadata } from "Dynamics/Model/AttributeMetadata";
import { EntityMetadata } from "Dynamics/Model/EntityMetadata";
import { OptionSetAttributeMetadata, OptionSetMetadata } from "Dynamics/Model/OptionSetMetadata";
@@ -152,7 +194,7 @@ declare module "Dynamics/DynamicsMetadata" {
export type DynamicsOptionSetMetadata = OptionSetMetadata;
export type DynamicsLookupAttributeMetadata = LookupAttributeMetadata;
export type DynamicsOptionSetAttributeMetadata = OptionSetAttributeMetadata;
- export default function dynamicsMetadata(accessToken?: string): DynamicsMetadata;
+ export default function dynamicsmetdata(connectionOptions?: ConnectionOptions): DynamicsMetadata;
export function isLookupAttribute(attribute: DynamicsAttributeMetadata): attribute is DynamicsLookupAttributeMetadata;
export function isOptionSetAttribute(attribute: DynamicsAttributeMetadata): attribute is DynamicsOptionSetAttributeMetadata;
export interface DynamicsMetadata {
@@ -163,6 +205,100 @@ declare module "Dynamics/DynamicsMetadata" {
}
type AnyAttributeMetadata = AttributeMetadata | LookupAttributeMetadata | OptionSetAttributeMetadata;
}
+declare module "ntlm/ntlm.flags" {
+ export enum NtlmFlags {
+ NEGOTIATE_UNICODE = 1,
+ NEGOTIATE_OEM = 2,
+ REQUEST_TARGET = 4,
+ NEGOTIATE_SIGN = 16,
+ NEGOTIATE_SEAL = 32,
+ NEGOTIATE_DATAGRAM_STYLE = 64,
+ NEGOTIATE_LM_KEY = 128,
+ NEGOTIATE_NETWARE = 256,
+ NEGOTIATE_NTLM_KEY = 512,
+ NEGOTIATE_ANONYMOUS = 2048,
+ NEGOTIATE_DOMAIN_SUPPLIED = 4096,
+ NEGOTIATE_WORKSTATION_SUPPLIED = 8192,
+ NEGOTIATE_LOCAL_CALL = 16384,
+ NEGOTIATE_ALWAYS_SIGN = 32768,
+ TARGET_TYPE_DOMAIN = 65536,
+ TARGET_TYPE_SERVER = 131072,
+ TARGET_TYPE_SHARE = 262144,
+ NEGOTIATE_NTLM2_KEY = 524288,
+ REQUEST_INIT_RESPONSE = 1048576,
+ REQUEST_ACCEPT_RESPONSE = 2097152,
+ REQUEST_NONNT_SESSION_KEY = 4194304,
+ NEGOTIATE_TARGET_INFO = 8388608,
+ NEGOTIATE_VERSION = 33554432,
+ NEGOTIATE_128 = 536870912,
+ NEGOTIATE_KEY_EXCHANGE = 1073741824,
+ NEGOTIATE_56 = -2147483648
+ }
+}
+declare module "ntlm/ntlm.constants" {
+ export class NtlmConstants {
+ static readonly NTLM_SIGNATURE = "NTLMSSP\0";
+ }
+}
+declare module "ntlm/type2.message" {
+ export class Type2Message {
+ raw: Buffer;
+ flags: number;
+ encoding: 'ascii' | 'ucs2';
+ version: number;
+ challenge: Buffer;
+ targetName: string;
+ targetInfo: any;
+ constructor(buf: Buffer);
+ private readTargetName;
+ private parseTargetInfo;
+ }
+}
+declare module "ntlm/hash" {
+ import { Type2Message } from "ntlm/type2.message";
+ export class Hash {
+ static createLMResponse(challenge: Buffer, lmhash: Buffer): Buffer;
+ static createLMHash(password: string): Buffer;
+ static calculateDES(key: Buffer, message: Buffer): Buffer;
+ static createNTLMResponse(challenge: Buffer, ntlmhash: Buffer): Buffer;
+ static createNTLMHash(password: string): Buffer;
+ static createNTLMv2Hash(ntlmhash: Buffer, username: string, authTargetName: string): Buffer;
+ static createLMv2Response(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string): Buffer;
+ static createNTLMv2Response(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string, withMic: boolean): Buffer;
+ static createMIC(type1message: Buffer, type2message: Type2Message, type3message: Buffer, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string): Buffer;
+ static createRandomSessionKey(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string, withMic: boolean): Buffer;
+ static createPseudoRandomValue(length: number): string;
+ static createTimestamp(): string;
+ }
+}
+declare module "ntlm/ntlm.message" {
+ export class NtlmMessage {
+ raw: Buffer;
+ constructor(buf: Buffer);
+ header(): string;
+ }
+}
+declare module "ntlm/interfaces/i.ntlm" {
+ import { Type2Message } from "ntlm/type2.message";
+ import { NtlmMessage } from "ntlm/ntlm.message";
+ export interface INtlm {
+ createType1Message(ntlm_version: number, workstation: string | undefined, target: string | undefined): NtlmMessage;
+ decodeType2Message(str: string | undefined): Type2Message;
+ createType3Message(type1message: NtlmMessage, type2Message: Type2Message, username: string, password: string, workstation: string | undefined, target: string | undefined, client_nonce: string | undefined, timestamp: string | undefined): NtlmMessage;
+ }
+}
+declare module "ntlm/ntlm" {
+ import { INtlm } from "ntlm/interfaces/i.ntlm";
+ import { Type2Message } from "ntlm/type2.message";
+ import { NtlmMessage } from "ntlm/ntlm.message";
+ export default function ntlm(): INtlm;
+ export class Ntlm implements INtlm {
+ createType1Message(ntlm_version: number, workstation: string | undefined, target: string | undefined): NtlmMessage;
+ private addVersionStruct;
+ decodeType2Message(str: string | undefined): Type2Message;
+ createType3Message(type1message: NtlmMessage, type2message: Type2Message, username: string, password: string, workstation: string | undefined, target: string | undefined, client_nonce_override: string | undefined, timestamp_override: string | undefined): NtlmMessage;
+ }
+}
declare module "tests/dynamicsMetadataTests" {
export function dynamicsMetadataRetrieveAll(): Promise;
}
diff --git a/lib/system/more-xrm.js b/lib/system/more-xrm.js
index 9fc5820..01b9572 100644
--- a/lib/system/more-xrm.js
+++ b/lib/system/more-xrm.js
@@ -1,8 +1,9 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
@@ -81,7 +82,7 @@ System.register("Query/Query", [], function (exports_1, context_1) {
return this;
}
whereAny(any) {
- var conditions = [];
+ let conditions = [];
any((attributeName, operator, ...values) => {
conditions.push({
AttributeName: attributeName,
@@ -157,7 +158,7 @@ System.register("Query/QueryXml", ["Query/Query"], function (exports_2, context_
}
});
query.OrderBy.forEach(attribute => {
- if (attribute.indexOf('_') == 0) {
+ if (attribute.indexOf('_') === 0) {
xml.push(``);
}
else {
@@ -234,16 +235,21 @@ System.register("Query/QueryXml", ["Query/Query"], function (exports_2, context_
return xml.join('\n');
}
function encodeValue(value) {
- if (value === 0)
+ if (value === 0) {
return '0';
- if (value === true)
+ }
+ if (value === true) {
return 'true';
- if (value === false)
+ }
+ if (value === false) {
return 'false';
- if (!value)
+ }
+ if (!value) {
return '';
- if (typeof (value.toISOString) === 'function')
+ }
+ if (typeof (value.toISOString) === 'function') {
return value.toISOString();
+ }
return xmlEncode(value.toString());
}
function xmlEncode(text) {
@@ -262,8 +268,9 @@ System.register("Query/QueryXml", ["Query/Query"], function (exports_2, context_
return xmlString.replace(/\s*<[^>\/]*>[^<>]*<\/[^>]*>|\s*<.+?>|\s*[^<]+/g, //pattern to match nodes (angled brackets or text)
function (m, i) {
m = m.replace(/^\s+|\s+$/g, ""); //trim the match just in case
- if (i < 38 && /^<[?]xml/.test(m))
- return m + "\n"; //if the match is a header, ignore it
+ if (i < 38 && /^<[?]xml/.test(m)) {
+ return m + "\n";
+ } //if the match is a header, ignore it
if (/^<[/]/.test(m)) //if the match is a closing tag
{
tabs = tabs.replace(indent, ""); //remove one indent from the store
@@ -298,34 +305,42 @@ System.register("Query/QueryXml", ["Query/Query"], function (exports_2, context_
}
};
});
-System.register("Dynamics/DynamicsRequest", ["Query/Query", "Query/QueryXml", "Dynamics/Dynamics"], function (exports_3, context_3) {
+System.register("Dynamics/DynamicsRequest", ["Query/Query", "Query/QueryXml", "Dynamics/Dynamics", "httpntlm", "node-fetch"], function (exports_3, context_3) {
"use strict";
- var Query_2, QueryXml_1, Dynamics_1;
+ var Query_2, QueryXml_1, Dynamics_1, httpntlm, node_fetch_1, AuthenticationType, ConnectionOptions;
var __moduleName = context_3 && context_3.id;
- function dynamicsQuery(query, maxRowCount, headers) {
- const dataQuery = Query_2.GetRootQuery(query);
- if (!dataQuery.EntityPath) {
- throw new Error('dynamicsQuery requires a Query object with an EntityPath');
- }
- return dynamicsQueryUrl(`/api/data/${Dynamics_1.WebApiVersion}/${dataQuery.EntityPath}`, query, maxRowCount, headers);
+ function dynamicsQuery(connectionOptions, query, maxRowCount, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const dataQuery = Query_2.GetRootQuery(query);
+ if (!dataQuery.EntityPath) {
+ throw new Error('dynamicsQuery requires a Query object with an EntityPath');
+ }
+ return yield dynamicsQueryUrl(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${dataQuery.EntityPath}`, query, maxRowCount, headers);
+ });
}
exports_3("dynamicsQuery", dynamicsQuery);
- function dynamicsQueryUrl(dynamicsEntitySetUrl, query, maxRowCount, headers) {
- const querySeparator = (dynamicsEntitySetUrl.indexOf('?') > -1 ? '&' : '?');
- return request(`${dynamicsEntitySetUrl}${querySeparator}fetchXml=${escape(QueryXml_1.default(query, maxRowCount))}`, 'GET', undefined, headers);
+ function dynamicsQueryUrl(connectionOptions, dynamicsEntitySetUrl, query, maxRowCount, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const querySeparator = (dynamicsEntitySetUrl.indexOf('?') > -1 ? '&' : '?');
+ return yield request(connectionOptions, `${dynamicsEntitySetUrl}${querySeparator}fetchXml=${escape(QueryXml_1.default(query, maxRowCount))}`, 'GET', undefined, headers);
+ });
}
exports_3("dynamicsQueryUrl", dynamicsQueryUrl);
- function dynamicsRequest(dynamicsEntitySetUrl, headers) {
- return request(dynamicsEntitySetUrl, 'GET', undefined, headers);
+ function dynamicsRequest(connectionOptions, dynamicsEntitySetUrl, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return yield request(connectionOptions, dynamicsEntitySetUrl, 'GET', undefined, headers);
+ });
}
exports_3("dynamicsRequest", dynamicsRequest);
- function dynamicsSave(entitySetName, data, id, headers) {
- if (id) {
- return request(`/api/data/${Dynamics_1.WebApiVersion}/${entitySetName}(${trimId(id)})`, 'PATCH', data, headers);
- }
- else {
- return request(`/api/data/${Dynamics_1.WebApiVersion}/${entitySetName}()`, 'POST', data, headers);
- }
+ function dynamicsSave(connectionOptions, entitySetName, data, id, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (id) {
+ return yield request(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${entitySetName}(${trimId(id)})`, 'PATCH', data, headers);
+ }
+ else {
+ return yield request(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${entitySetName}()`, 'POST', data, headers);
+ }
+ });
}
exports_3("dynamicsSave", dynamicsSave);
function formatDynamicsResponse(data) {
@@ -341,10 +356,10 @@ System.register("Dynamics/DynamicsRequest", ["Query/Query", "Query/QueryXml", "D
}
if (data) {
for (var item of data) {
- var row = {};
- for (var key in item) {
+ let row = {};
+ for (let key in item) {
var name = key;
- if (name.indexOf('@odata') == 0) {
+ if (name.indexOf('@odata') === 0) {
continue;
}
if (name.indexOf('transactioncurrencyid') > -1) {
@@ -352,12 +367,12 @@ System.register("Dynamics/DynamicsRequest", ["Query/Query", "Query/QueryXml", "D
}
if (name.indexOf('@') > -1) {
name = name.substring(0, name.indexOf('@'));
- if (name.indexOf('_') == 0) {
+ if (name.indexOf('_') === 0) {
name = name.slice(1, -6);
}
name += "_formatted";
}
- else if (name.indexOf('_') == 0) {
+ else if (name.indexOf('_') === 0) {
name = name.slice(1, -6);
}
if (name.indexOf('_x002e_') > -1) {
@@ -378,14 +393,54 @@ System.register("Dynamics/DynamicsRequest", ["Query/Query", "Query/QueryXml", "D
return items;
}
exports_3("formatDynamicsResponse", formatDynamicsResponse);
- function request(url, method, body, headers) {
- return fetch(url, {
- method: method,
- headers: Object.assign({ 'Content-Type': 'application/json; charset=utf-8' }, Dynamics_1.DynamicsHeaders, headers),
- body: body
- })
- .then(response => response.json())
- .then(data => formatDynamicsResponse(data));
+ function request(connectionOptions, url, method, body, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let callUrl = connectionOptions.serverUrl;
+ if (callUrl.endsWith("/")) {
+ callUrl = callUrl.substr(0, callUrl.length - 1);
+ }
+ callUrl = `${callUrl}${url}`;
+ //TODO: fetch if we can.
+ if (connectionOptions.authType === AuthenticationType.Windows) {
+ return new Promise((resolve, reject) => {
+ httpntlm[method.toLowerCase()]({
+ url: callUrl,
+ username: connectionOptions.username,
+ password: connectionOptions.password,
+ workstation: connectionOptions.workstation || '',
+ domain: connectionOptions.domain || '',
+ body: body,
+ headers: Object.assign(Object.assign({ 'Content-Type': 'application/json; charset=utf-8' }, Dynamics_1.DynamicsHeaders), headers)
+ }, function (err, res) {
+ if (err) {
+ console.error(err);
+ reject(err);
+ }
+ const json = JSON.parse(res.body);
+ if (json.error) {
+ console.error(json.error.message);
+ reject(json.error.message);
+ }
+ else if (json.ExceptionMessage) {
+ console.error(json.ExceptionMessage);
+ reject(`The service call returned HTTP ${json.ErrorCode} - ${json.ExceptionMessage}`);
+ }
+ else {
+ resolve(formatDynamicsResponse(json));
+ }
+ });
+ });
+ }
+ else {
+ return node_fetch_1.default(url, {
+ method: method,
+ headers: Object.assign(Object.assign({ 'Authorization': `Bearer ${connectionOptions.accessToken}`, 'Content-Type': 'application/json; charset=utf-8' }, Dynamics_1.DynamicsHeaders), headers),
+ body: body
+ })
+ .then(response => response.json())
+ .then(data => formatDynamicsResponse(data));
+ }
+ });
}
function trimId(id) {
return (id || '').replace(/{|}/g, '');
@@ -400,28 +455,47 @@ System.register("Dynamics/DynamicsRequest", ["Query/Query", "Query/QueryXml", "D
},
function (Dynamics_1_1) {
Dynamics_1 = Dynamics_1_1;
+ },
+ function (httpntlm_1) {
+ httpntlm = httpntlm_1;
+ },
+ function (node_fetch_1_1) {
+ node_fetch_1 = node_fetch_1_1;
}
],
execute: function () {
+ (function (AuthenticationType) {
+ AuthenticationType[AuthenticationType["Windows"] = 1] = "Windows";
+ AuthenticationType[AuthenticationType["OAuth"] = 2] = "OAuth";
+ })(AuthenticationType || (AuthenticationType = {}));
+ exports_3("AuthenticationType", AuthenticationType);
+ ConnectionOptions = class ConnectionOptions {
+ constructor() {
+ this.authType = AuthenticationType.OAuth;
+ this.serverUrl = "";
+ this.webApiVersion = Dynamics_1.DefaultWebApiVersion;
+ }
+ };
+ exports_3("ConnectionOptions", ConnectionOptions);
}
};
});
-System.register("Dynamics/DynamicsBatch", ["Query/Query", "Query/QueryXml", "Dynamics/Dynamics", "Dynamics/DynamicsRequest"], function (exports_4, context_4) {
+System.register("Dynamics/DynamicsBatch", ["Query/Query", "Query/QueryXml", "Dynamics/Dynamics", "Dynamics/DynamicsRequest", "httpntlm", "node-fetch"], function (exports_4, context_4) {
"use strict";
- var Query_3, QueryXml_2, Dynamics_2, DynamicsRequest_1, Batch;
+ var Query_3, QueryXml_2, Dynamics_2, DynamicsRequest_1, httpntlm, node_fetch_2, Batch;
var __moduleName = context_4 && context_4.id;
- function dynamicsBatch(headers) {
- return new Batch(headers);
+ function dynamicsBatch(connectionOptions, headers) {
+ return new Batch(connectionOptions, headers);
}
exports_4("dynamicsBatch", dynamicsBatch);
- function dynamicsBatchRequest(...url) {
- const batch = new Batch();
+ function dynamicsBatchRequest(connectionOptions, ...url) {
+ const batch = new Batch(connectionOptions);
batch.requestAllUrls(url);
return batch.execute();
}
exports_4("dynamicsBatchRequest", dynamicsBatchRequest);
- function dynamicsBatchQuery(...query) {
- const batch = new Batch();
+ function dynamicsBatchQuery(connectionOptions, ...query) {
+ const batch = new Batch(connectionOptions);
batch.requestAll(query);
return batch.execute();
}
@@ -439,26 +513,36 @@ System.register("Dynamics/DynamicsBatch", ["Query/Query", "Query/QueryXml", "Dyn
},
function (DynamicsRequest_1_1) {
DynamicsRequest_1 = DynamicsRequest_1_1;
+ },
+ function (httpntlm_2) {
+ httpntlm = httpntlm_2;
+ },
+ function (node_fetch_2_1) {
+ node_fetch_2 = node_fetch_2_1;
}
],
execute: function () {
Batch = class Batch {
- constructor(headers) {
+ constructor(options, headers) {
+ this.options = options;
this.headers = headers;
+ this.ConnectionOptions = options;
this.Changes = [];
this.RelatedChanges = [];
}
execute() {
return __awaiter(this, void 0, void 0, function* () {
- const results = yield Batch.requestBatch(`/api/data/${Dynamics_2.WebApiVersion}/$batch`, this.Changes, this.headers);
+ const results = yield Batch.requestBatch(this.ConnectionOptions, `/api/data/${this.ConnectionOptions.webApiVersion}/$batch`, this.Changes, this.headers);
if (this.RelatedChanges.length > 0) {
for (let change of this.RelatedChanges) {
- let changeIndex = this.Changes.indexOf(change.relatedChange);
- let relatedId = results[changeIndex];
- change.entityData[`${change.relatedPropertyName}@odata.bind`] = `${change.relatedChange.entitySetName}(${Batch.trimId(relatedId)})`;
+ if (change !== undefined && change.relatedChange) {
+ let changeIndex = this.Changes.indexOf(change.relatedChange);
+ let relatedId = results !== undefined ? results[changeIndex] : undefined;
+ change.entityData[`${change.relatedPropertyName}@odata.bind`] = `${change.relatedChange.entitySetName}(${Batch.trimId(relatedId)})`;
+ }
}
- const related = yield Batch.requestBatch(`/api/data/${Dynamics_2.WebApiVersion}/$batch`, this.RelatedChanges, this.headers);
- return results.concat(related);
+ const related = yield Batch.requestBatch(this.ConnectionOptions, `/api/data/${this.ConnectionOptions.webApiVersion}/$batch`, this.RelatedChanges, this.headers);
+ return results !== undefined ? results.concat(related) : undefined;
}
else {
return results;
@@ -509,8 +593,9 @@ System.register("Dynamics/DynamicsBatch", ["Query/Query", "Query/QueryXml", "Dyn
}
createRelatedEntity(entitySetName, data, navigationPropertyName) {
let lastChange = this.Changes[this.Changes.length - 1];
- if (!lastChange || lastChange.entityData == 'DELETE')
+ if (!lastChange || lastChange.entityData === 'DELETE') {
throw new Error('createRelatedEntity relies on the previous change which was not found in the batch.');
+ }
if (lastChange.entityId) {
data[`${navigationPropertyName}@odata.bind`] = `${lastChange.entitySetName}(${lastChange.entityId})`;
this.Changes.push({
@@ -527,16 +612,42 @@ System.register("Dynamics/DynamicsBatch", ["Query/Query", "Query/QueryXml", "Dyn
});
}
}
- static requestBatch(url, requests, headers) {
+ static requestBatch(connectionOptions, url, requests, headers) {
+ let callUrl = connectionOptions.serverUrl;
+ if (callUrl.endsWith("/")) {
+ callUrl = callUrl.substr(0, callUrl.length - 1);
+ }
+ callUrl = `${callUrl}${url}`;
const batchId = Batch.createId();
- return fetch(url, {
- method: 'POST',
- headers: Object.assign({ 'Content-Type': `multipart/mixed;boundary=batch_${batchId}` }, Dynamics_2.DynamicsHeaders, headers),
- body: Batch.formatBatchRequest(batchId, requests)
- })
- .then(response => Batch.formatBatchResponse(response.text()));
- }
- static formatBatchRequest(batchId, changes) {
+ if (connectionOptions.authType === DynamicsRequest_1.AuthenticationType.Windows) {
+ return new Promise((resolve, reject) => {
+ httpntlm.post({
+ url: callUrl,
+ username: connectionOptions.username,
+ password: connectionOptions.password,
+ workstation: connectionOptions.workstation || '',
+ domain: connectionOptions.domain || '',
+ body: Batch.formatBatchRequest(connectionOptions, batchId, requests),
+ headers: Object.assign(Object.assign({ 'Content-Type': `multipart/mixed;boundary=batch_${batchId}` }, Dynamics_2.DynamicsHeaders), headers)
+ }, function (err, res) {
+ if (err) {
+ console.error(err);
+ reject(err);
+ }
+ resolve(Batch.formatBatchResponse(res.responseText));
+ });
+ });
+ }
+ else {
+ return node_fetch_2.default(callUrl, {
+ method: 'POST',
+ headers: Object.assign(Object.assign({ 'Content-Type': `multipart/mixed;boundary=batch_${batchId}`, 'Authorization': connectionOptions.accessToken }, Dynamics_2.DynamicsHeaders), headers),
+ body: Batch.formatBatchRequest(connectionOptions, batchId, requests)
+ })
+ .then(response => Batch.formatBatchResponse(response.text()));
+ }
+ }
+ static formatBatchRequest(connectionOptions, batchId, changes) {
let batchBody = [];
let requestBody = [];
let changeNumber = 1;
@@ -551,7 +662,7 @@ System.register("Dynamics/DynamicsBatch", ["Query/Query", "Query/QueryXml", "Dyn
requestBody.push('Content-Transfer-Encoding:binary');
requestBody.push('');
if (change.entitySetName) {
- requestBody.push(`GET ${encodeURI(`/api/data/${Dynamics_2.WebApiVersion}/${change.entitySetName}?${change.entitySetQuery}`)} HTTP/1.1`);
+ requestBody.push(`GET ${encodeURI(`/api/data/${connectionOptions.webApiVersion}/${change.entitySetName}?${change.entitySetQuery}`)} HTTP/1.1`);
}
else {
requestBody.push(`GET ${encodeURI(change.entitySetQuery)} HTTP/1.1`);
@@ -566,7 +677,7 @@ System.register("Dynamics/DynamicsBatch", ["Query/Query", "Query/QueryXml", "Dyn
batchBody.push('Content-Transfer-Encoding:binary');
batchBody.push(`Content-ID: ${changeNumber++}`);
batchBody.push('');
- batchBody.push(`${change.entityId ? 'PATCH' : 'POST'} ${encodeURI(`/api/data/${Dynamics_2.WebApiVersion}/${change.entitySetName}(${Batch.trimId(change.entityId)})`)} HTTP/1.1`);
+ batchBody.push(`${change.entityId ? 'PATCH' : 'POST'} ${encodeURI(`/api/data/${connectionOptions.webApiVersion}/${change.entitySetName}(${Batch.trimId(change.entityId)})`)} HTTP/1.1`);
batchBody.push('Content-Type: application/json;type=entry');
batchBody.push('');
batchBody.push(JSON.stringify(change.entityData));
@@ -612,7 +723,10 @@ System.register("Dynamics/DynamicsBatch", ["Query/Query", "Query/QueryXml", "Dyn
return 'id' + Math.random().toString(16).slice(2);
}
static trimId(id) {
- return (id || '').replace(/{|}/g, '');
+ if (id !== undefined) {
+ return (id || '').replace(/{|}/g, '');
+ }
+ return undefined;
}
};
}
@@ -620,10 +734,10 @@ System.register("Dynamics/DynamicsBatch", ["Query/Query", "Query/QueryXml", "Dyn
});
System.register("Dynamics/Dynamics", ["Query/Query", "Dynamics/DynamicsBatch", "Dynamics/DynamicsRequest"], function (exports_5, context_5) {
"use strict";
- var Query_4, DynamicsBatch_1, DynamicsRequest_2, WebApiVersion, DefaultMaxRecords, DynamicsHeaders, DynamicsClient;
+ var Query_4, DynamicsBatch_1, DynamicsRequest_2, DefaultWebApiVersion, DefaultMaxRecords, DynamicsHeaders, DynamicsClient;
var __moduleName = context_5 && context_5.id;
- function dynamics(accessToken) {
- return new DynamicsClient(accessToken);
+ function dynamics(connectionOptions) {
+ return new DynamicsClient(connectionOptions);
}
exports_5("default", dynamics);
return {
@@ -639,7 +753,7 @@ System.register("Dynamics/Dynamics", ["Query/Query", "Dynamics/DynamicsBatch", "
}
],
execute: function () {
- exports_5("WebApiVersion", WebApiVersion = 'v9.1');
+ exports_5("DefaultWebApiVersion", DefaultWebApiVersion = 'v9.1');
exports_5("DefaultMaxRecords", DefaultMaxRecords = 100);
exports_5("DynamicsHeaders", DynamicsHeaders = {
'OData-MaxVersion': '4.0',
@@ -647,19 +761,19 @@ System.register("Dynamics/Dynamics", ["Query/Query", "Dynamics/DynamicsBatch", "
'Prefer': 'odata.include-annotations=OData.Community.Display.V1.FormattedValue'
});
DynamicsClient = class DynamicsClient {
- constructor(accessToken) {
- this.dynamicsHeaders = accessToken && {
- 'Authorization': 'Bearer ' + accessToken
- };
+ constructor(options) {
+ if (options) {
+ this.connectionOptions = options;
+ }
}
batch() {
- return DynamicsBatch_1.dynamicsBatch(this.dynamicsHeaders);
+ return DynamicsBatch_1.dynamicsBatch(this.connectionOptions, this.dynamicsHeaders);
}
fetch(query, maxRowCount = DefaultMaxRecords) {
- return DynamicsRequest_2.dynamicsQuery(query, maxRowCount, this.dynamicsHeaders);
+ return DynamicsRequest_2.dynamicsQuery(this.connectionOptions, query, maxRowCount, this.dynamicsHeaders);
}
optionset(entityName, attributeName) {
- return DynamicsRequest_2.dynamicsRequest(`/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes(LogicalName='${attributeName}')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet($select=Options),GlobalOptionSet($select=Options)`, this.dynamicsHeaders)
+ return DynamicsRequest_2.dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes(LogicalName='${attributeName}')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet($select=Options),GlobalOptionSet($select=Options)`, this.dynamicsHeaders)
.then(attribute => (attribute.OptionSet || attribute.GlobalOptionSet).Options.map((option) => ({
label: (option.Label && option.Label.UserLocalizedLabel && option.Label.UserLocalizedLabel.Label),
value: option.Value
@@ -669,13 +783,13 @@ System.register("Dynamics/Dynamics", ["Query/Query", "Dynamics/DynamicsBatch", "
return Query_4.default(entityLogicalName).path(entitySetName);
}
save(entitySetName, data, id) {
- return DynamicsRequest_2.dynamicsSave(entitySetName, data, id, this.dynamicsHeaders);
+ return DynamicsRequest_2.dynamicsSave(this.connectionOptions, entitySetName, data, id, this.dynamicsHeaders);
}
};
}
};
});
-System.register("Dynamics/Model/EntityMetadata", [], function (exports_6, context_6) {
+System.register("Dynamics/Model/OrganizationMetadata", [], function (exports_6, context_6) {
"use strict";
var __moduleName = context_6 && context_6.id;
return {
@@ -684,14 +798,55 @@ System.register("Dynamics/Model/EntityMetadata", [], function (exports_6, contex
}
};
});
-System.register("Dynamics/Model/AttributeMetadata", [], function (exports_7, context_7) {
+System.register("Dynamics/DynamicsDiscovery", ["Dynamics/DynamicsRequest"], function (exports_7, context_7) {
"use strict";
- var AttributeTypeCodes;
+ var DynamicsRequest_3, DefaultDiscoveryApiVersion, DynamicsDiscoveryClient;
var __moduleName = context_7 && context_7.id;
+ function dynamicsDiscovery(connectionOptions) {
+ return new DynamicsDiscoveryClient(connectionOptions);
+ }
+ exports_7("default", dynamicsDiscovery);
+ return {
+ setters: [
+ function (DynamicsRequest_3_1) {
+ DynamicsRequest_3 = DynamicsRequest_3_1;
+ }
+ ],
+ execute: function () {
+ exports_7("DefaultDiscoveryApiVersion", DefaultDiscoveryApiVersion = 'v9.1');
+ DynamicsDiscoveryClient = class DynamicsDiscoveryClient {
+ constructor(options) {
+ if (options) {
+ this.connectionOptions = options;
+ if (!options.webApiVersion) {
+ this.connectionOptions.webApiVersion = DefaultDiscoveryApiVersion;
+ }
+ }
+ }
+ discover() {
+ return DynamicsRequest_3.dynamicsRequest(this.connectionOptions, `/api/discovery/${this.connectionOptions.webApiVersion}/Instances`, this.dynamicsHeaders);
+ }
+ };
+ }
+ };
+});
+System.register("Dynamics/Model/EntityMetadata", [], function (exports_8, context_8) {
+ "use strict";
+ var __moduleName = context_8 && context_8.id;
return {
setters: [],
execute: function () {
- exports_7("AttributeTypeCodes", AttributeTypeCodes = [
+ }
+ };
+});
+System.register("Dynamics/Model/AttributeMetadata", [], function (exports_9, context_9) {
+ "use strict";
+ var AttributeTypeCodes;
+ var __moduleName = context_9 && context_9.id;
+ return {
+ setters: [],
+ execute: function () {
+ exports_9("AttributeTypeCodes", AttributeTypeCodes = [
'BigInt',
'Boolean',
'Customer',
@@ -711,31 +866,31 @@ System.register("Dynamics/Model/AttributeMetadata", [], function (exports_7, con
}
};
});
-System.register("Dynamics/Model/OptionSetMetadata", [], function (exports_8, context_8) {
+System.register("Dynamics/Model/OptionSetMetadata", [], function (exports_10, context_10) {
"use strict";
- var __moduleName = context_8 && context_8.id;
+ var __moduleName = context_10 && context_10.id;
return {
setters: [],
execute: function () {
}
};
});
-System.register("Dynamics/DynamicsMetadata", ["Dynamics/Dynamics", "Dynamics/DynamicsBatch", "Dynamics/DynamicsRequest"], function (exports_9, context_9) {
+System.register("Dynamics/DynamicsMetadata", ["Dynamics/DynamicsBatch", "Dynamics/DynamicsRequest"], function (exports_11, context_11) {
"use strict";
- var Dynamics_3, DynamicsBatch_2, DynamicsRequest_3, entityProperties, attributeProperties, ExcludedAttributeTypeFilters, ExcludedAttributeNameFilters, DynamicsMetadataClient, DynamicsMetadataMapper;
- var __moduleName = context_9 && context_9.id;
- function dynamicsMetadata(accessToken) {
- return new DynamicsMetadataClient(accessToken);
+ var DynamicsBatch_2, DynamicsRequest_4, entityProperties, attributeProperties, ExcludedAttributeTypeFilters, ExcludedAttributeNameFilters, DynamicsMetadataClient, DynamicsMetadataMapper;
+ var __moduleName = context_11 && context_11.id;
+ function dynamicsmetdata(connectionOptions) {
+ return new DynamicsMetadataClient(connectionOptions);
}
- exports_9("default", dynamicsMetadata);
+ exports_11("default", dynamicsmetdata);
function isLookupAttribute(attribute) {
return attribute.Type === 'Lookup' && attribute['LookupEntityName'];
}
- exports_9("isLookupAttribute", isLookupAttribute);
+ exports_11("isLookupAttribute", isLookupAttribute);
function isOptionSetAttribute(attribute) {
return (attribute.Type === 'Picklist' || attribute.Type === 'State' || attribute.Type === 'Status') && attribute['PicklistOptions'];
}
- exports_9("isOptionSetAttribute", isOptionSetAttribute);
+ exports_11("isOptionSetAttribute", isOptionSetAttribute);
function isLookup(attribute) {
return Array.isArray(attribute['Targets']);
}
@@ -744,14 +899,11 @@ System.register("Dynamics/DynamicsMetadata", ["Dynamics/Dynamics", "Dynamics/Dyn
}
return {
setters: [
- function (Dynamics_3_1) {
- Dynamics_3 = Dynamics_3_1;
- },
function (DynamicsBatch_2_1) {
DynamicsBatch_2 = DynamicsBatch_2_1;
},
- function (DynamicsRequest_3_1) {
- DynamicsRequest_3 = DynamicsRequest_3_1;
+ function (DynamicsRequest_4_1) {
+ DynamicsRequest_4 = DynamicsRequest_4_1;
}
],
execute: function () {
@@ -790,31 +942,31 @@ System.register("Dynamics/DynamicsMetadata", ["Dynamics/Dynamics", "Dynamics/Dyn
'entityimage_timestamp'
];
DynamicsMetadataClient = class DynamicsMetadataClient {
- constructor(accessToken) {
- this.dynamicsHeaders = accessToken && {
- 'Authorization': 'Bearer ' + accessToken
- };
+ constructor(options) {
+ if (options) {
+ this.connectionOptions = options;
+ }
}
attributes(entityName) {
- return DynamicsBatch_2.dynamicsBatch(this.dynamicsHeaders)
+ return DynamicsBatch_2.dynamicsBatch(this.connectionOptions, this.dynamicsHeaders)
.requestAllUrls(this.getMetadataUrls(entityName, false))
.execute()
.then(data => this.flatten(data)
- .filter((attribute) => attribute.LogicalName.indexOf('yomi') === -1 || attribute.LogicalName.indexOf('base') != attribute.LogicalName.length - 4)
+ .filter((attribute) => attribute.LogicalName.indexOf('yomi') === -1 || attribute.LogicalName.indexOf('base') !== attribute.LogicalName.length - 4)
.map(DynamicsMetadataMapper.MapAttribute));
}
entities() {
- return DynamicsRequest_3.dynamicsRequest(`/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
+ return DynamicsRequest_4.dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
.then(data => data
.map(entity => DynamicsMetadataMapper.MapEntity(entity)));
}
entity(entityName) {
- return DynamicsRequest_3.dynamicsRequest(`/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
+ return DynamicsRequest_4.dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
.then(entity => this.attributes(entityName)
.then(attributes => DynamicsMetadataMapper.MapEntity(entity, attributes)));
}
entityAttributes(...entityNames) {
- return DynamicsBatch_2.dynamicsBatch(this.dynamicsHeaders)
+ return DynamicsBatch_2.dynamicsBatch(this.connectionOptions, this.dynamicsHeaders)
.requestAllUrls(this.flatten(entityNames.map(e => this.getMetadataUrls(e, true))))
.execute()
.then(data => {
@@ -826,7 +978,7 @@ System.register("Dynamics/DynamicsMetadata", ["Dynamics/Dynamics", "Dynamics/Dyn
currentEntity = DynamicsMetadataMapper.MapEntity(item);
entities.push(currentEntity);
}
- else if (item.LogicalName.indexOf('yomi') == -1 && item.LogicalName.indexOf('base') != item.LogicalName.length - 4) {
+ else if (item.LogicalName.indexOf('yomi') === -1 && item.LogicalName.indexOf('base') !== item.LogicalName.length - 4) {
currentEntity.Attributes.push(DynamicsMetadataMapper.MapAttribute(item));
}
}
@@ -837,12 +989,12 @@ System.register("Dynamics/DynamicsMetadata", ["Dynamics/Dynamics", "Dynamics/Dyn
const attributeTypeFilter = ExcludedAttributeTypeFilters.map(v => `AttributeType ne Microsoft.Dynamics.CRM.AttributeTypeCode'${v}'`).join(' and ');
const attributeNameFilter = ExcludedAttributeNameFilters.map(v => `LogicalName ne '${v}'`).join(' and ');
return [
- `/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=${entityProperties}`,
- `/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes?$select=${attributeProperties}&$filter=${attributeTypeFilter} and ${attributeNameFilter}`,
- `/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=${attributeProperties},Targets`,
- `/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
- `/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StatusAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
- `/api/data/${Dynamics_3.WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StateAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=${entityProperties}`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes?$select=${attributeProperties}&$filter=${attributeTypeFilter} and ${attributeNameFilter}`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=${attributeProperties},Targets`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StatusAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StateAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`
].slice(includeEntity ? 0 : 1);
}
flatten(values) {
@@ -882,10 +1034,707 @@ System.register("Dynamics/DynamicsMetadata", ["Dynamics/Dynamics", "Dynamics/Dyn
}
};
});
-System.register("tests/dynamicsMetadataTests", ["Dynamics/DynamicsMetadata"], function (exports_10, context_10) {
+System.register("ntlm/ntlm.flags", [], function (exports_12, context_12) {
+ 'use strict';
+ var NtlmFlags;
+ var __moduleName = context_12 && context_12.id;
+ return {
+ setters: [],
+ execute: function () {
+ (function (NtlmFlags) {
+ /* Indicates that Unicode strings are supported for use in security buffer
+ data. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_UNICODE"] = 1] = "NEGOTIATE_UNICODE";
+ /* Indicates that OEM strings are supported for use in security buffer data. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_OEM"] = 2] = "NEGOTIATE_OEM";
+ /* Requests that the server's authentication realm be included in the Type 2
+ message. */
+ NtlmFlags[NtlmFlags["REQUEST_TARGET"] = 4] = "REQUEST_TARGET";
+ /* unknown (1<<3) */
+ /* Specifies that authenticated communication between the client and server
+ should carry a digital signature (message integrity). */
+ NtlmFlags[NtlmFlags["NEGOTIATE_SIGN"] = 16] = "NEGOTIATE_SIGN";
+ /* Specifies that authenticated communication between the client and server
+ should be encrypted (message confidentiality). */
+ NtlmFlags[NtlmFlags["NEGOTIATE_SEAL"] = 32] = "NEGOTIATE_SEAL";
+ /* Indicates that datagram authentication is being used. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_DATAGRAM_STYLE"] = 64] = "NEGOTIATE_DATAGRAM_STYLE";
+ /* Indicates that the LAN Manager session key should be used for signing and
+ sealing authenticated communications. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_LM_KEY"] = 128] = "NEGOTIATE_LM_KEY";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["NEGOTIATE_NETWARE"] = 256] = "NEGOTIATE_NETWARE";
+ /* Indicates that NTLM authentication is being used. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_NTLM_KEY"] = 512] = "NEGOTIATE_NTLM_KEY";
+ /* unknown (1<<10) */
+ /* Sent by the client in the Type 3 message to indicate that an anonymous
+ context has been established. This also affects the response fields. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_ANONYMOUS"] = 2048] = "NEGOTIATE_ANONYMOUS";
+ /* Sent by the client in the Type 1 message to indicate that a desired
+ authentication realm is included in the message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_DOMAIN_SUPPLIED"] = 4096] = "NEGOTIATE_DOMAIN_SUPPLIED";
+ /* Sent by the client in the Type 1 message to indicate that the client
+ workstation's name is included in the message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_WORKSTATION_SUPPLIED"] = 8192] = "NEGOTIATE_WORKSTATION_SUPPLIED";
+ /* Sent by the server to indicate that the server and client are on the same
+ machine. Implies that the client may use a pre-established local security
+ context rather than responding to the challenge. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_LOCAL_CALL"] = 16384] = "NEGOTIATE_LOCAL_CALL";
+ /* Indicates that authenticated communication between the client and server
+ should be signed with a "dummy" signature. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_ALWAYS_SIGN"] = 32768] = "NEGOTIATE_ALWAYS_SIGN";
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a domain. */
+ NtlmFlags[NtlmFlags["TARGET_TYPE_DOMAIN"] = 65536] = "TARGET_TYPE_DOMAIN";
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a server. */
+ NtlmFlags[NtlmFlags["TARGET_TYPE_SERVER"] = 131072] = "TARGET_TYPE_SERVER";
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a share. Presumably, this is for share-level
+ authentication. Usage is unclear. */
+ NtlmFlags[NtlmFlags["TARGET_TYPE_SHARE"] = 262144] = "TARGET_TYPE_SHARE";
+ /* Indicates that the NTLM2 signing and sealing scheme should be used for
+ protecting authenticated communications. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_NTLM2_KEY"] = 524288] = "NEGOTIATE_NTLM2_KEY";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["REQUEST_INIT_RESPONSE"] = 1048576] = "REQUEST_INIT_RESPONSE";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["REQUEST_ACCEPT_RESPONSE"] = 2097152] = "REQUEST_ACCEPT_RESPONSE";
+ /* unknown purpose */
+ NtlmFlags[NtlmFlags["REQUEST_NONNT_SESSION_KEY"] = 4194304] = "REQUEST_NONNT_SESSION_KEY";
+ /* Sent by the client in the Type 1 message to request Target info block from server.
+ Sent by the server in the Type 2 message to indicate that it is including a
+ Target Information block in the message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_TARGET_INFO"] = 8388608] = "NEGOTIATE_TARGET_INFO";
+ /* unknown (1<24) */
+ /* Indicates that the version info block is included in the message */
+ NtlmFlags[NtlmFlags["NEGOTIATE_VERSION"] = 33554432] = "NEGOTIATE_VERSION";
+ /* unknown (1<26) */
+ /* unknown (1<27) */
+ /* unknown (1<28) */
+ /* Indicates that 128-bit encryption is supported. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_128"] = 536870912] = "NEGOTIATE_128";
+ /* Indicates that the client will provide an encrypted master key in
+ the "Session Key" field of the Type 3 message. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_KEY_EXCHANGE"] = 1073741824] = "NEGOTIATE_KEY_EXCHANGE";
+ /* Indicates that 56-bit encryption is supported. */
+ NtlmFlags[NtlmFlags["NEGOTIATE_56"] = -2147483648] = "NEGOTIATE_56";
+ })(NtlmFlags || (NtlmFlags = {}));
+ exports_12("NtlmFlags", NtlmFlags);
+ }
+ };
+});
+System.register("ntlm/ntlm.constants", [], function (exports_13, context_13) {
+ "use strict";
+ var NtlmConstants;
+ var __moduleName = context_13 && context_13.id;
+ return {
+ setters: [],
+ execute: function () {
+ NtlmConstants = class NtlmConstants {
+ };
+ exports_13("NtlmConstants", NtlmConstants);
+ NtlmConstants.NTLM_SIGNATURE = 'NTLMSSP\0';
+ }
+ };
+});
+System.register("ntlm/type2.message", ["ntlm/ntlm.flags", "ntlm/ntlm.constants"], function (exports_14, context_14) {
+ "use strict";
+ var ntlm_flags_1, ntlm_constants_1, Type2Message;
+ var __moduleName = context_14 && context_14.id;
+ return {
+ setters: [
+ function (ntlm_flags_1_1) {
+ ntlm_flags_1 = ntlm_flags_1_1;
+ },
+ function (ntlm_constants_1_1) {
+ ntlm_constants_1 = ntlm_constants_1_1;
+ }
+ ],
+ execute: function () {
+ Type2Message = class Type2Message {
+ constructor(buf) {
+ this.raw = buf;
+ //check signature
+ if (buf.toString('ascii', 0, ntlm_constants_1.NtlmConstants.NTLM_SIGNATURE.length) !== ntlm_constants_1.NtlmConstants.NTLM_SIGNATURE) {
+ throw new Error('Invalid message signature');
+ }
+ //check message type
+ if (buf.readUInt32LE(ntlm_constants_1.NtlmConstants.NTLM_SIGNATURE.length) !== 2) {
+ throw new Error('Invalid message type (no type 2)');
+ }
+ //read flags
+ this.flags = buf.readUInt32LE(20);
+ this.encoding = (this.flags & ntlm_flags_1.NtlmFlags.NEGOTIATE_OEM) ? 'ascii' : 'ucs2';
+ this.version = (this.flags & ntlm_flags_1.NtlmFlags.NEGOTIATE_NTLM2_KEY) ? 2 : 1;
+ this.challenge = buf.slice(24, 32);
+ //read target name
+ this.targetName = this.readTargetName();
+ //read target info
+ if (this.flags & ntlm_flags_1.NtlmFlags.NEGOTIATE_TARGET_INFO) {
+ this.targetInfo = this.parseTargetInfo();
+ }
+ }
+ readTargetName() {
+ let length = this.raw.readUInt16LE(12);
+ //skipping allocated space
+ let offset = this.raw.readUInt32LE(16);
+ if (length === 0) {
+ return '';
+ }
+ if ((offset + length) > this.raw.length || offset < 32) {
+ throw new Error('Bad type 2 message');
+ }
+ return this.raw.toString(this.encoding, offset, offset + length);
+ }
+ parseTargetInfo() {
+ let info = {};
+ let length = this.raw.readUInt16LE(40);
+ //skipping allocated space
+ let offset = this.raw.readUInt32LE(44);
+ let targetInfoBuffer = Buffer.alloc(length);
+ this.raw.copy(targetInfoBuffer, 0, offset, offset + length);
+ if (length === 0) {
+ return info;
+ }
+ if ((offset + length) > this.raw.length || offset < 32) {
+ throw new Error('Bad type 2 message');
+ }
+ let pos = offset;
+ while (pos < (offset + length)) {
+ let blockType = this.raw.readUInt16LE(pos);
+ pos += 2;
+ let blockLength = this.raw.readUInt16LE(pos);
+ pos += 2;
+ if (blockType === 0) {
+ //reached the terminator subblock
+ break;
+ }
+ let blockTypeStr;
+ let blockTypeOutput = 'string';
+ switch (blockType) {
+ case 0x01:
+ blockTypeStr = 'SERVER';
+ break;
+ case 0x02:
+ blockTypeStr = 'DOMAIN';
+ break;
+ case 0x03:
+ blockTypeStr = 'FQDN';
+ break;
+ case 0x04:
+ blockTypeStr = 'DNS';
+ break;
+ case 0x05:
+ blockTypeStr = 'PARENT_DNS';
+ break;
+ case 0x06:
+ blockTypeStr = 'FLAGS';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x07:
+ blockTypeStr = 'SERVER_TIMESTAMP';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x08:
+ blockTypeStr = 'SINGLE_HOST';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x09:
+ blockTypeStr = 'TARGET_NAME';
+ break;
+ case 0x0A:
+ blockTypeStr = 'CHANNEL_BINDING';
+ blockTypeOutput = 'hex';
+ break;
+ default:
+ blockTypeStr = '';
+ break;
+ }
+ if (blockTypeStr) {
+ if (blockTypeOutput === 'string') {
+ info[blockTypeStr] = this.raw.toString('ucs2', pos, pos + blockLength);
+ }
+ else {
+ // Output as hex in little endian order
+ let twoCharBlocks = this.raw.toString('hex', pos, pos + blockLength).match(/.{2}/g);
+ if (twoCharBlocks) {
+ info[blockTypeStr] = twoCharBlocks.reverse().join("");
+ }
+ else {
+ info[blockTypeStr] = null;
+ }
+ }
+ }
+ pos += blockLength;
+ }
+ return {
+ parsed: info,
+ buffer: targetInfoBuffer
+ };
+ }
+ };
+ exports_14("Type2Message", Type2Message);
+ }
+ };
+});
+System.register("ntlm/hash", ["crypto"], function (exports_15, context_15) {
+ 'use strict';
+ var crypto, Hash;
+ var __moduleName = context_15 && context_15.id;
+ return {
+ setters: [
+ function (crypto_1) {
+ crypto = crypto_1;
+ }
+ ],
+ execute: function () {
+ Hash = class Hash {
+ static createLMResponse(challenge, lmhash) {
+ let buf = Buffer.alloc(24);
+ let pwBuffer = Buffer.alloc(21).fill(0);
+ lmhash.copy(pwBuffer);
+ Hash.calculateDES(pwBuffer.slice(0, 7), challenge).copy(buf);
+ Hash.calculateDES(pwBuffer.slice(7, 14), challenge).copy(buf, 8);
+ Hash.calculateDES(pwBuffer.slice(14), challenge).copy(buf, 16);
+ return buf;
+ }
+ static createLMHash(password) {
+ let buf = Buffer.alloc(16), pwBuffer = Buffer.alloc(14), magicKey = Buffer.from('KGS!@#$%', 'ascii');
+ if (password.length > 14) {
+ buf.fill(0);
+ return buf;
+ }
+ pwBuffer.fill(0);
+ pwBuffer.write(password.toUpperCase(), 0, 'ascii');
+ return Buffer.concat([
+ Hash.calculateDES(pwBuffer.slice(0, 7), magicKey),
+ Hash.calculateDES(pwBuffer.slice(7), magicKey)
+ ]);
+ }
+ static calculateDES(key, message) {
+ let desKey = Buffer.alloc(8);
+ desKey[0] = key[0] & 0xFE;
+ desKey[1] = ((key[0] << 7) & 0xFF) | (key[1] >> 1);
+ desKey[2] = ((key[1] << 6) & 0xFF) | (key[2] >> 2);
+ desKey[3] = ((key[2] << 5) & 0xFF) | (key[3] >> 3);
+ desKey[4] = ((key[3] << 4) & 0xFF) | (key[4] >> 4);
+ desKey[5] = ((key[4] << 3) & 0xFF) | (key[5] >> 5);
+ desKey[6] = ((key[5] << 2) & 0xFF) | (key[6] >> 6);
+ desKey[7] = (key[6] << 1) & 0xFF;
+ for (let i = 0; i < 8; i++) {
+ let parity = 0;
+ for (let j = 1; j < 8; j++) {
+ parity += (desKey[i] >> j) % 2;
+ }
+ desKey[i] |= (parity % 2) === 0 ? 1 : 0;
+ }
+ let des = crypto.createCipheriv('DES-ECB', desKey, '');
+ return des.update(message);
+ }
+ static createNTLMResponse(challenge, ntlmhash) {
+ let buf = Buffer.alloc(24), ntlmBuffer = Buffer.alloc(21).fill(0);
+ ntlmhash.copy(ntlmBuffer);
+ Hash.calculateDES(ntlmBuffer.slice(0, 7), challenge).copy(buf);
+ Hash.calculateDES(ntlmBuffer.slice(7, 14), challenge).copy(buf, 8);
+ Hash.calculateDES(ntlmBuffer.slice(14), challenge).copy(buf, 16);
+ return buf;
+ }
+ static createNTLMHash(password) {
+ let md4sum = crypto.createHash('md4');
+ md4sum.update(Buffer.from(password, 'ucs2')); // lgtm[js/insufficient-password-hash]
+ return md4sum.digest();
+ }
+ static createNTLMv2Hash(ntlmhash, username, authTargetName) {
+ let hmac = crypto.createHmac('md5', ntlmhash);
+ hmac.update(Buffer.from(username.toUpperCase() + authTargetName, 'ucs2')); // lgtm[js/weak-cryptographic-algorithm]
+ return hmac.digest();
+ }
+ static createLMv2Response(type2message, username, authTargetName, ntlmhash, nonce) {
+ let buf = Buffer.alloc(24);
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+ //server challenge
+ type2message.challenge.copy(buf, 8);
+ //client nonce
+ buf.write(nonce, 16, 'hex');
+ //create hash
+ hmac.update(buf.slice(8));
+ let hashedBuffer = hmac.digest();
+ hashedBuffer.copy(buf);
+ return buf;
+ }
+ static createNTLMv2Response(type2message, username, authTargetName, ntlmhash, nonce, timestamp, withMic) {
+ let bufferSize = 48 + type2message.targetInfo.buffer.length;
+ if (withMic) {
+ bufferSize += 8;
+ }
+ let buf = Buffer.alloc(bufferSize), ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName), hmac = crypto.createHmac('md5', ntlm2hash);
+ //the first 8 bytes are spare to store the hashed value before the blob
+ //server challenge
+ type2message.challenge.copy(buf, 8);
+ //blob signature
+ buf.writeUInt32BE(0x01010000, 16);
+ //reserved
+ buf.writeUInt32LE(0, 20);
+ //timestamp
+ let timestampLow = Number('0x' + timestamp.substring(Math.max(0, timestamp.length - 8)));
+ let timestampHigh = Number('0x' + timestamp.substring(0, Math.max(0, timestamp.length - 8)));
+ buf.writeUInt32LE(timestampLow, 24);
+ buf.writeUInt32LE(timestampHigh, 28);
+ //random client nonce
+ buf.write(nonce, 32, 'hex');
+ //zero
+ buf.writeUInt32LE(0, 40);
+ //complete target information block from type 2 message
+ type2message.targetInfo.buffer.copy(buf, 44);
+ let bufferPos = 44 + type2message.targetInfo.buffer.length;
+ if (withMic) {
+ // Should include MIC in response, indicate it in AV_FLAGS
+ buf.writeUInt16LE(0x06, bufferPos - 4);
+ buf.writeUInt16LE(0x04, bufferPos - 2);
+ buf.writeUInt32LE(0x02, bufferPos);
+ // Write new endblock
+ buf.writeUInt32LE(0, bufferPos + 4);
+ bufferPos += 8;
+ }
+ //zero
+ buf.writeUInt32LE(0, bufferPos);
+ hmac.update(buf.slice(8));
+ let hashedBuffer = hmac.digest();
+ hashedBuffer.copy(buf);
+ return buf;
+ }
+ static createMIC(type1message, type2message, type3message, username, authTargetName, ntlmhash, nonce, timestamp) {
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let ntlm2response = Hash.createNTLMv2Response(type2message, username, authTargetName, ntlmhash, nonce, timestamp, true);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+ let session_base_key = hmac.update(ntlm2response.slice(0, 16)).digest();
+ let key_exchange_key = session_base_key;
+ //create MIC hash
+ hmac = crypto.createHmac('md5', key_exchange_key);
+ hmac.update(type1message);
+ hmac.update(type2message.raw);
+ hmac.update(type3message);
+ let hashedBuffer = hmac.digest();
+ return hashedBuffer;
+ }
+ static createRandomSessionKey(type2message, username, authTargetName, ntlmhash, nonce, timestamp, withMic) {
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let ntlm2response = Hash.createNTLMv2Response(type2message, username, authTargetName, ntlmhash, nonce, timestamp, withMic);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+ let session_base_key = hmac.update(ntlm2response.slice(0, 16)).digest();
+ let key_exchange_key = session_base_key;
+ let exported_session_key_hex = Hash.createPseudoRandomValue(32);
+ let exported_session_key = Buffer.from(exported_session_key_hex, 'hex');
+ let rc4 = crypto.createCipheriv('rc4', key_exchange_key, '');
+ let encrypted_random_session_key = rc4.update(exported_session_key);
+ return encrypted_random_session_key;
+ }
+ static createPseudoRandomValue(length) {
+ let str = '';
+ while (str.length < length) {
+ str += Math.floor(Math.random() * 16).toString(16);
+ }
+ return str;
+ }
+ static createTimestamp() {
+ //TODO: we are loosing precision here since js is not able to handle those large integers
+ // maybe think about a different solution here
+ // 11644473600000 = diff between 1970 and 1601
+ return ((Date.now() + 11644473600000) * 10000).toString(16);
+ }
+ };
+ exports_15("Hash", Hash);
+ }
+ };
+});
+System.register("ntlm/ntlm.message", [], function (exports_16, context_16) {
+ "use strict";
+ var NtlmMessage;
+ var __moduleName = context_16 && context_16.id;
+ return {
+ setters: [],
+ execute: function () {
+ NtlmMessage = class NtlmMessage {
+ constructor(buf) {
+ this.raw = buf;
+ }
+ header() {
+ return 'NTLM ' + this.raw.toString('base64');
+ }
+ };
+ exports_16("NtlmMessage", NtlmMessage);
+ }
+ };
+});
+System.register("ntlm/interfaces/i.ntlm", [], function (exports_17, context_17) {
+ "use strict";
+ var __moduleName = context_17 && context_17.id;
+ return {
+ setters: [],
+ execute: function () {
+ }
+ };
+});
+// All code in this folder is heavily based on the node project ntlm-client.
+// https://github.com/clncln1/node-ntlm-client
+// ----------------------------------------------------------------------------
+// Original license statement:
+System.register("ntlm/ntlm", ["ntlm/ntlm.flags", "ntlm/ntlm.constants", "ntlm/hash", "os", "ntlm/type2.message", "ntlm/ntlm.message"], function (exports_18, context_18) {
+ // Copyright (c) 2015 Nico Haller
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
+ // of this software and associated documentation files (the "Software"), to deal
+ // in the Software without restriction, including without limitation the rights
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ // copies of the Software, and to permit persons to whom the Software is
+ // furnished to do so, subject to the following conditions:
+ // The above copyright notice and this permission notice shall be included in
+ // all copies or substantial portions of the Software.
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ // THE SOFTWARE.
+ // ----------------------------------------------------------------------------
+ 'use strict';
+ var ntlm_flags_2, ntlm_constants_2, hash_1, os, type2_message_1, ntlm_message_1, Ntlm;
+ var __moduleName = context_18 && context_18.id;
+ function ntlm() {
+ return new Ntlm();
+ }
+ exports_18("default", ntlm);
+ return {
+ setters: [
+ function (ntlm_flags_2_1) {
+ ntlm_flags_2 = ntlm_flags_2_1;
+ },
+ function (ntlm_constants_2_1) {
+ ntlm_constants_2 = ntlm_constants_2_1;
+ },
+ function (hash_1_1) {
+ hash_1 = hash_1_1;
+ },
+ function (os_1) {
+ os = os_1;
+ },
+ function (type2_message_1_1) {
+ type2_message_1 = type2_message_1_1;
+ },
+ function (ntlm_message_1_1) {
+ ntlm_message_1 = ntlm_message_1_1;
+ }
+ ],
+ execute: function () {
+ Ntlm = class Ntlm {
+ createType1Message(ntlm_version, workstation, target) {
+ let dataPos = 40;
+ let pos = 0;
+ let buf = Buffer.alloc(256);
+ if (target === undefined) {
+ target = '';
+ }
+ if (workstation === undefined) {
+ workstation = os.hostname().toUpperCase();
+ }
+ //signature
+ buf.write(ntlm_constants_2.NtlmConstants.NTLM_SIGNATURE, pos, ntlm_constants_2.NtlmConstants.NTLM_SIGNATURE.length, 'ascii');
+ pos += ntlm_constants_2.NtlmConstants.NTLM_SIGNATURE.length;
+ //message type
+ buf.writeUInt32LE(1, pos);
+ pos += 4;
+ //flags
+ let messageFlags = ntlm_flags_2.NtlmFlags.NEGOTIATE_OEM |
+ ntlm_flags_2.NtlmFlags.NEGOTIATE_ALWAYS_SIGN |
+ ntlm_flags_2.NtlmFlags.NEGOTIATE_VERSION;
+ if (ntlm_version == 1) {
+ messageFlags |= ntlm_flags_2.NtlmFlags.NEGOTIATE_NTLM_KEY |
+ ntlm_flags_2.NtlmFlags.NEGOTIATE_LM_KEY;
+ }
+ else {
+ messageFlags |= ntlm_flags_2.NtlmFlags.NEGOTIATE_NTLM2_KEY;
+ }
+ if (target.length > 0) {
+ messageFlags |= ntlm_flags_2.NtlmFlags.NEGOTIATE_DOMAIN_SUPPLIED;
+ }
+ if (workstation.length > 0) {
+ messageFlags |= ntlm_flags_2.NtlmFlags.NEGOTIATE_WORKSTATION_SUPPLIED;
+ }
+ // special operator to force conversion to unsigned
+ buf.writeUInt32LE(messageFlags >>> 0, pos);
+ pos += 4;
+ //domain security buffer
+ buf.writeUInt16LE(target.length, pos);
+ pos += 2;
+ buf.writeUInt16LE(target.length, pos);
+ pos += 2;
+ buf.writeUInt32LE(dataPos, pos);
+ pos += 4;
+ if (target.length > 0) {
+ dataPos += buf.write(target, dataPos, 'ascii');
+ }
+ //workstation security buffer
+ buf.writeUInt16LE(workstation.length, pos);
+ pos += 2;
+ buf.writeUInt16LE(workstation.length, pos);
+ pos += 2;
+ buf.writeUInt32LE(dataPos, pos);
+ pos += 4;
+ if (workstation.length > 0) {
+ dataPos += buf.write(workstation, dataPos, 'ascii');
+ }
+ this.addVersionStruct(buf, pos);
+ return new ntlm_message_1.NtlmMessage(buf.slice(0, dataPos));
+ }
+ // Version - hard-coded to
+ // Major version 10, minor version 0 (Windows 10)
+ // build number 18362 (1903 update), NTLM revision 15
+ addVersionStruct(buf, pos) {
+ buf.writeUInt8(10, pos);
+ pos++;
+ buf.writeUInt8(0, pos);
+ pos++;
+ buf.writeUInt16LE(18362, pos);
+ pos += 2;
+ buf.writeUInt32LE(0x0F000000, pos);
+ pos += 4;
+ return pos;
+ }
+ decodeType2Message(str) {
+ if (str === undefined) {
+ throw new Error('Invalid argument');
+ }
+ let ntlmMatch = /^NTLM ([^,\s]+)/.exec(str);
+ if (ntlmMatch) {
+ str = ntlmMatch[1];
+ }
+ let buf = Buffer.from(str, 'base64');
+ let type2message = new type2_message_1.Type2Message(buf);
+ return type2message;
+ }
+ createType3Message(type1message, type2message, username, password, workstation, target, client_nonce_override, timestamp_override) {
+ let dataPos = 72;
+ let buf = Buffer.alloc(1024);
+ if (workstation === undefined) {
+ workstation = os.hostname().toUpperCase();
+ }
+ if (target === undefined) {
+ target = type2message.targetName;
+ }
+ //signature
+ buf.write(ntlm_constants_2.NtlmConstants.NTLM_SIGNATURE, 0, ntlm_constants_2.NtlmConstants.NTLM_SIGNATURE.length, 'ascii');
+ //message type
+ buf.writeUInt32LE(3, 8);
+ let targetLen = type2message.encoding === 'ascii' ? target.length : target.length * 2;
+ let usernameLen = type2message.encoding === 'ascii' ? username.length : username.length * 2;
+ let workstationLen = type2message.encoding === 'ascii' ? workstation.length : workstation.length * 2;
+ let dataPosOffset = targetLen + usernameLen + workstationLen;
+ let timestamp = '';
+ let client_nonce = '';
+ let withMic = false;
+ let withServerTimestamp = false;
+ if (type2message.version === 2 &&
+ type2message.targetInfo &&
+ type2message.targetInfo.parsed['SERVER_TIMESTAMP']) { // Must include MIC, add room for it
+ withServerTimestamp = true;
+ withMic = true;
+ dataPos += 16;
+ }
+ let hashDataPos = dataPos + dataPosOffset;
+ let ntlmHash = hash_1.Hash.createNTLMHash(password);
+ if (type2message.version === 2) {
+ client_nonce = client_nonce_override || hash_1.Hash.createPseudoRandomValue(16);
+ if (withServerTimestamp) { // Use server timestamp if provided
+ timestamp = type2message.targetInfo.parsed['SERVER_TIMESTAMP'];
+ }
+ else {
+ timestamp = timestamp_override || hash_1.Hash.createTimestamp();
+ }
+ let lmv2;
+ if (withServerTimestamp) {
+ lmv2 = Buffer.alloc(24); // zero-filled
+ }
+ else {
+ lmv2 = hash_1.Hash.createLMv2Response(type2message, username, target, ntlmHash, client_nonce);
+ }
+ //lmv2 security buffer
+ buf.writeUInt16LE(lmv2.length, 12);
+ buf.writeUInt16LE(lmv2.length, 14);
+ buf.writeUInt32LE(hashDataPos, 16);
+ lmv2.copy(buf, hashDataPos);
+ hashDataPos += lmv2.length;
+ let ntlmv2 = hash_1.Hash.createNTLMv2Response(type2message, username, target, ntlmHash, client_nonce, timestamp, withMic);
+ //ntlmv2 security buffer
+ buf.writeUInt16LE(ntlmv2.length, 20);
+ buf.writeUInt16LE(ntlmv2.length, 22);
+ buf.writeUInt32LE(hashDataPos, 24);
+ ntlmv2.copy(buf, hashDataPos);
+ hashDataPos += ntlmv2.length;
+ }
+ else {
+ let lmHash = hash_1.Hash.createLMHash(password);
+ let lm = hash_1.Hash.createLMResponse(type2message.challenge, lmHash);
+ let ntlm = hash_1.Hash.createNTLMResponse(type2message.challenge, ntlmHash);
+ //lm security buffer
+ buf.writeUInt16LE(lm.length, 12);
+ buf.writeUInt16LE(lm.length, 14);
+ buf.writeUInt32LE(hashDataPos, 16);
+ lm.copy(buf, hashDataPos);
+ hashDataPos += lm.length;
+ //ntlm security buffer
+ buf.writeUInt16LE(ntlm.length, 20);
+ buf.writeUInt16LE(ntlm.length, 22);
+ buf.writeUInt32LE(hashDataPos, 24);
+ ntlm.copy(buf, hashDataPos);
+ hashDataPos += ntlm.length;
+ }
+ //target name security buffer
+ buf.writeUInt16LE(targetLen, 28);
+ buf.writeUInt16LE(targetLen, 30);
+ buf.writeUInt32LE(dataPos, 32);
+ dataPos += buf.write(target, dataPos, type2message.encoding);
+ //user name security buffer
+ buf.writeUInt16LE(usernameLen, 36);
+ buf.writeUInt16LE(usernameLen, 38);
+ buf.writeUInt32LE(dataPos, 40);
+ dataPos += buf.write(username, dataPos, type2message.encoding);
+ //workstation name security buffer
+ buf.writeUInt16LE(workstationLen, 44);
+ buf.writeUInt16LE(workstationLen, 46);
+ buf.writeUInt32LE(dataPos, 48);
+ dataPos += buf.write(workstation, dataPos, type2message.encoding);
+ //session key security buffer
+ let session_key = Buffer.alloc(0);
+ // if (type2message.flags & NtlmFlags.NEGOTIATE_KEY_EXCHANGE) {
+ // session_key = hash.createRandomSessionKey(type2message, username, target, ntlmHash, client_nonce, timestamp, withMic);
+ // }
+ buf.writeUInt16LE(session_key.length, 52);
+ buf.writeUInt16LE(session_key.length, 54);
+ buf.writeUInt32LE(hashDataPos, 56);
+ session_key.copy(buf, hashDataPos);
+ hashDataPos += session_key.length;
+ //flags
+ buf.writeUInt32LE(type2message.flags, 60);
+ this.addVersionStruct(buf, 64);
+ if (withMic) {
+ // Calculate and add MIC
+ let mic = hash_1.Hash.createMIC(type1message.raw, type2message, buf.slice(0, hashDataPos), username, target, ntlmHash, client_nonce, timestamp);
+ mic.copy(buf, 72);
+ }
+ return new ntlm_message_1.NtlmMessage(buf.slice(0, hashDataPos));
+ //return 'NTLM ' + buf.toString('base64', 0, hashDataPos);
+ }
+ };
+ exports_18("Ntlm", Ntlm);
+ }
+ };
+});
+System.register("tests/dynamicsMetadataTests", ["Dynamics/DynamicsMetadata"], function (exports_19, context_19) {
"use strict";
var DynamicsMetadata_1;
- var __moduleName = context_10 && context_10.id;
+ var __moduleName = context_19 && context_19.id;
function dynamicsMetadataRetrieveAll() {
return __awaiter(this, void 0, void 0, function* () {
const meta = DynamicsMetadata_1.default();
@@ -903,7 +1752,7 @@ System.register("tests/dynamicsMetadataTests", ["Dynamics/DynamicsMetadata"], fu
}
});
}
- exports_10("dynamicsMetadataRetrieveAll", dynamicsMetadataRetrieveAll);
+ exports_19("dynamicsMetadataRetrieveAll", dynamicsMetadataRetrieveAll);
return {
setters: [
function (DynamicsMetadata_1_1) {
@@ -914,13 +1763,20 @@ System.register("tests/dynamicsMetadataTests", ["Dynamics/DynamicsMetadata"], fu
}
};
});
-System.register("tests/dynamicsTests", ["Dynamics/Dynamics", "Query/Query"], function (exports_11, context_11) {
+System.register("tests/dynamicsTests", ["Dynamics/Dynamics", "Query/Query", "Dynamics/DynamicsRequest"], function (exports_20, context_20) {
"use strict";
- var Dynamics_4, Query_5;
- var __moduleName = context_11 && context_11.id;
+ var Dynamics_3, Query_5, DynamicsRequest_5;
+ var __moduleName = context_20 && context_20.id;
function dynamicsTestAll() {
return __awaiter(this, void 0, void 0, function* () {
- const dyn = Dynamics_4.default();
+ const options = new DynamicsRequest_5.ConnectionOptions();
+ options.authType = DynamicsRequest_5.AuthenticationType.Windows;
+ options.username = "Administrator";
+ options.domain = "CONTOSO";
+ options.password = "{password}";
+ options.serverUrl = "http://{server}/{org}/";
+ options.webApiVersion = "v9.0";
+ const dyn = Dynamics_3.default(options);
/* Batch Request */
const allAccounts = yield dyn.batch()
.requestAllUrls(['/api/data/v9.1/accounts'])
@@ -953,24 +1809,27 @@ System.register("tests/dynamicsTests", ["Dynamics/Dynamics", "Query/Query"], fun
}
});
}
- exports_11("dynamicsTestAll", dynamicsTestAll);
+ exports_20("dynamicsTestAll", dynamicsTestAll);
return {
setters: [
- function (Dynamics_4_1) {
- Dynamics_4 = Dynamics_4_1;
+ function (Dynamics_3_1) {
+ Dynamics_3 = Dynamics_3_1;
},
function (Query_5_1) {
Query_5 = Query_5_1;
+ },
+ function (DynamicsRequest_5_1) {
+ DynamicsRequest_5 = DynamicsRequest_5_1;
}
],
execute: function () {
}
};
});
-System.register("tests/queryTests", ["Query/Query", "Query/QueryXml"], function (exports_12, context_12) {
+System.register("tests/queryTests", ["Query/Query", "Query/QueryXml"], function (exports_21, context_21) {
"use strict";
var Query_6, QueryXml_3;
- var __moduleName = context_12 && context_12.id;
+ var __moduleName = context_21 && context_21.id;
function createQueryWithAllExpressions() {
const thisQuery = Query_6.default('account');
thisQuery
@@ -992,7 +1851,7 @@ System.register("tests/queryTests", ["Query/Query", "Query/QueryXml"], function
throw new Error('QueryXml could not be generated!');
}
}
- exports_12("createQueryWithAllExpressions", createQueryWithAllExpressions);
+ exports_21("createQueryWithAllExpressions", createQueryWithAllExpressions);
return {
setters: [
function (Query_6_1) {
@@ -1006,3 +1865,4 @@ System.register("tests/queryTests", ["Query/Query", "Query/QueryXml"], function
}
};
});
+//# sourceMappingURL=more-xrm.js.map
\ No newline at end of file
diff --git a/lib/system/more-xrm.js.map b/lib/system/more-xrm.js.map
new file mode 100644
index 0000000..22c910d
--- /dev/null
+++ b/lib/system/more-xrm.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"more-xrm.js","sourceRoot":"","sources":["../../src/Query/Query.ts","../../src/Query/QueryXml.ts","../../src/Dynamics/DynamicsRequest.ts","../../src/Dynamics/DynamicsBatch.ts","../../src/Dynamics/Dynamics.ts","../../src/Dynamics/Model/OrganizationMetadata.ts","../../src/Dynamics/DynamicsDiscovery.ts","../../src/Dynamics/Model/EntityMetadata.ts","../../src/Dynamics/Model/AttributeMetadata.ts","../../src/Dynamics/Model/OptionSetMetadata.ts","../../src/Dynamics/DynamicsMetadata.ts","../../src/ntlm/ntlm.flags.ts","../../src/ntlm/ntlm.constants.ts","../../src/ntlm/type2.message.ts","../../src/ntlm/hash.ts","../../src/ntlm/ntlm.message.ts","../../src/ntlm/interfaces/i.ntlm.ts","../../src/ntlm/ntlm.ts","../../src/tests/dynamicsMetadataTests.ts","../../src/tests/dynamicsTests.ts","../../src/tests/queryTests.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index d1080c0..01851d7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,11 +4,66 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+ "@types/inversify": {
+ "version": "2.0.33",
+ "resolved": "https://registry.npmjs.org/@types/inversify/-/inversify-2.0.33.tgz",
+ "integrity": "sha1-B3Da4imaruV4A/dSNeZKmbdPbeA=",
+ "requires": {
+ "inversify": "*"
+ }
+ },
+ "@types/node": {
+ "version": "12.7.11",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.11.tgz",
+ "integrity": "sha512-Otxmr2rrZLKRYIybtdG/sgeO+tHY20GxeDjcGmUnmmlCWyEnv2a2x1ZXBo3BTec4OiTXMQCiazB8NMBf0iRlFw=="
+ },
+ "@types/node-fetch": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.2.tgz",
+ "integrity": "sha512-djYYKmdNRSBtL1x4CiE9UJb9yZhwtI1VC+UxZD0psNznrUj80ywsxKlEGAE+QL1qvLjPbfb24VosjkYM6W4RSQ==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "httpntlm": {
+ "version": "1.7.6",
+ "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.7.6.tgz",
+ "integrity": "sha1-aZHoNSg2AH1nEBuD247Q+RX5BtA=",
+ "requires": {
+ "httpreq": ">=0.4.22",
+ "underscore": "~1.7.0"
+ }
+ },
+ "httpreq": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz",
+ "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8="
+ },
+ "inversify": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/inversify/-/inversify-5.0.1.tgz",
+ "integrity": "sha512-Ieh06s48WnEYGcqHepdsJUIJUXpwH5o5vodAX+DK2JA/gjy4EbEcQZxw+uFfzysmKjiLXGYwNG3qDZsKVMcINQ=="
+ },
+ "node-fetch": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
+ "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
+ },
+ "os": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz",
+ "integrity": "sha1-IIhF6J4ZOtTZcUdLk5R3NqVtE/M="
+ },
"typescript": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz",
"integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==",
"dev": true
+ },
+ "underscore": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz",
+ "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk="
}
}
}
diff --git a/package.json b/package.json
index ea6b197..b35ee8d 100644
--- a/package.json
+++ b/package.json
@@ -2,15 +2,11 @@
"name": "more-xrm",
"version": "0.1.2",
"private": false,
- "author": {
- "name": "Greg DeCarlo",
- "email": "greg@scalabledynamicsllc.com",
- "url": "http://www.scalabledynamicsllc.com"
- },
+ "author": "Greg DeCarlo (http://www.scalabledynamicsllc.com)",
"license": "MIT",
"repository": {
"type": "git",
- "url": "https://github.com/scalable-dynamics/more-xrm.git"
+ "url": "git+https://github.com/scalable-dynamics/more-xrm.git"
},
"homepage": "https://github.com/scalable-dynamics/more-xrm",
"description": "Create more applications using the Microsoft Dynamics Xrm platform, enables querying the dynamics data model from any application.",
@@ -42,5 +38,23 @@
},
"files": [
"lib/**/*"
- ]
+ ],
+ "dependencies": {
+ "@types/inversify": "^2.0.33",
+ "@types/node": "^12.7.11",
+ "@types/node-fetch": "^2.5.2",
+ "httpntlm": "^1.7.6",
+ "inversify": "^5.0.1",
+ "node-fetch": "^2.6.0",
+ "os": "^0.1.1"
+ },
+ "bugs": {
+ "url": "https://github.com/scalable-dynamics/more-xrm/issues"
+ },
+ "directories": {
+ "lib": "lib"
+ },
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ }
}
diff --git a/src/Dynamics/Dynamics.ts b/src/Dynamics/Dynamics.ts
index e498444..4a023d2 100644
--- a/src/Dynamics/Dynamics.ts
+++ b/src/Dynamics/Dynamics.ts
@@ -1,8 +1,8 @@
import query, { Query } from "../Query/Query";
import { dynamicsBatch, DynamicsBatch } from "./DynamicsBatch";
-import { dynamicsQuery, dynamicsRequest, dynamicsSave } from "./DynamicsRequest";
+import { ConnectionOptions, dynamicsQuery, dynamicsRequest, dynamicsSave } from "./DynamicsRequest";
-export const WebApiVersion = 'v9.1';
+export const DefaultWebApiVersion = 'v9.1';
export const DefaultMaxRecords = 100;
export const DynamicsHeaders = {
'OData-MaxVersion': '4.0',
@@ -18,34 +18,37 @@ export interface Dynamics {
save(entitySetName: string, data: any, id?: string): Promise;
}
-export default function dynamics(accessToken?: string): Dynamics {
- return new DynamicsClient(accessToken);
+export default function dynamics(connectionOptions?: ConnectionOptions): Dynamics {
+ return new DynamicsClient(connectionOptions);
}
+
class DynamicsClient implements Dynamics {
private dynamicsHeaders: any;
+ private connectionOptions!: ConnectionOptions;
- constructor(accessToken?: string) {
- this.dynamicsHeaders = accessToken && {
- 'Authorization': 'Bearer ' + accessToken
+ constructor(options?:ConnectionOptions) {
+ if (options)
+ {
+ this.connectionOptions = options;
}
}
batch(): DynamicsBatch {
- return dynamicsBatch(this.dynamicsHeaders);
+ return dynamicsBatch(this.connectionOptions, this.dynamicsHeaders);
}
fetch(query: Query, maxRowCount: number = DefaultMaxRecords): Promise
{
- return dynamicsQuery(query, maxRowCount, this.dynamicsHeaders);
+ return dynamicsQuery(this.connectionOptions, query, maxRowCount, this.dynamicsHeaders);
}
optionset(entityName: any, attributeName: any): Promise<{ label: string, value: number }[]>
{
- return dynamicsRequest(`/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes(LogicalName='${attributeName}')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet($select=Options),GlobalOptionSet($select=Options)`, this.dynamicsHeaders)
+ return dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes(LogicalName='${attributeName}')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet($select=Options),GlobalOptionSet($select=Options)`, this.dynamicsHeaders)
.then(attribute =>
(attribute.OptionSet || attribute.GlobalOptionSet).Options.map(
- (option) => ({
+ (option: { Label: { UserLocalizedLabel: { Label: any; }; }; Value: any; }) => ({
label: (option.Label && option.Label.UserLocalizedLabel && option.Label.UserLocalizedLabel.Label),
value: option.Value
})
@@ -59,6 +62,6 @@ class DynamicsClient implements Dynamics {
}
save(entitySetName: string, data: any, id?: string): Promise {
- return dynamicsSave(entitySetName, data, id, this.dynamicsHeaders);
+ return dynamicsSave(this.connectionOptions, entitySetName, data, id, this.dynamicsHeaders);
}
}
\ No newline at end of file
diff --git a/src/Dynamics/DynamicsBatch.ts b/src/Dynamics/DynamicsBatch.ts
index 0377290..4606b32 100644
--- a/src/Dynamics/DynamicsBatch.ts
+++ b/src/Dynamics/DynamicsBatch.ts
@@ -1,10 +1,12 @@
import { GetRootQuery, Query } from "../Query/Query";
import GetQueryXml from "../Query/QueryXml";
-import { DefaultMaxRecords, DynamicsHeaders, WebApiVersion } from "./Dynamics";
-import { formatDynamicsResponse } from "./DynamicsRequest";
+import { DefaultMaxRecords, DynamicsHeaders } from "./Dynamics";
+import { formatDynamicsResponse, ConnectionOptions, AuthenticationType } from "./DynamicsRequest";
+import * as httpntlm from "httpntlm";
+import fetch from "node-fetch";
export interface DynamicsBatch {
- execute(): Promise;
+ execute(): Promise;
request(query: Query, maxRowCount?: number): DynamicsBatch;
requestAll(queries: Query[]): DynamicsBatch;
requestAllUrls(urls: string[]): DynamicsBatch;
@@ -13,19 +15,21 @@ export interface DynamicsBatch {
};
}
-export function dynamicsBatch(headers?: any): DynamicsBatch {
- return new Batch(headers);
+export function dynamicsBatch(connectionOptions: ConnectionOptions, headers?: any): DynamicsBatch {
+ return new Batch(connectionOptions, headers);
}
-export function dynamicsBatchRequest(...url: string[]): Promise {
- const batch = new Batch();
+export function dynamicsBatchRequest(connectionOptions: ConnectionOptions, ...url: string[]): Promise {
+ const batch = new Batch(connectionOptions);
batch.requestAllUrls(url);
+
return batch.execute();
}
-export function dynamicsBatchQuery(...query: Query[]): Promise {
- const batch = new Batch();
+export function dynamicsBatchQuery(connectionOptions: ConnectionOptions, ...query: Query[]): Promise {
+ const batch = new Batch(connectionOptions);
batch.requestAll(query);
+
return batch.execute();
}
@@ -41,22 +45,30 @@ interface BatchRequest {
class Batch implements DynamicsBatch {
private Changes: BatchRequest[];
private RelatedChanges: BatchRequest[];
+ private ConnectionOptions!: ConnectionOptions;
- constructor(private headers?: any) {
+ constructor(private options: ConnectionOptions, private headers?: any) {
+ this.ConnectionOptions = options;
this.Changes = [];
this.RelatedChanges = [];
}
async execute() {
- const results = await Batch.requestBatch(`/api/data/${WebApiVersion}/$batch`, this.Changes, this.headers);
+ const results = await Batch.requestBatch(this.ConnectionOptions, `/api/data/${this.ConnectionOptions.webApiVersion}/$batch`, this.Changes, this.headers);
+
if (this.RelatedChanges.length > 0) {
for (let change of this.RelatedChanges) {
- let changeIndex = this.Changes.indexOf(change.relatedChange);
- let relatedId = results[changeIndex];
- change.entityData[`${change.relatedPropertyName}@odata.bind`] = `${change.relatedChange.entitySetName}(${Batch.trimId(relatedId)})`;
+ if (change !== undefined && change.relatedChange)
+ {
+ let changeIndex = this.Changes.indexOf(change.relatedChange);
+ let relatedId = results !== undefined ? results[changeIndex] : undefined;
+ change.entityData[`${change.relatedPropertyName}@odata.bind`] = `${change.relatedChange.entitySetName}(${Batch.trimId(relatedId)})`;
+ }
}
- const related = await Batch.requestBatch(`/api/data/${WebApiVersion}/$batch`, this.RelatedChanges, this.headers);
- return results.concat(related);
+
+ const related = await Batch.requestBatch(this.ConnectionOptions, `/api/data/${this.ConnectionOptions.webApiVersion}/$batch`, this.RelatedChanges, this.headers);
+
+ return results !== undefined ? results.concat(related) : undefined;
}
else {
return results;
@@ -65,6 +77,7 @@ class Batch implements DynamicsBatch {
requestAllUrls(urls: string[]) {
this.Changes.push.apply(this.Changes, urls.map(entitySetQuery => ({ entitySetQuery })));
+
return this;
}
@@ -72,11 +85,13 @@ class Batch implements DynamicsBatch {
this.Changes.push.apply(queries.map(query => {
const dataQuery = GetRootQuery(query);
this.request(query);
+
return {
entitySetName: dataQuery.EntityPath,
entitySetQuery: `fetchXml=${escape(GetQueryXml(query))}`
};
}));
+
return this;
}
@@ -112,7 +127,7 @@ class Batch implements DynamicsBatch {
createRelatedEntity(entitySetName: string, data: any, navigationPropertyName: string) {
let lastChange = this.Changes[this.Changes.length - 1];
- if (!lastChange || lastChange.entityData == 'DELETE') throw new Error('createRelatedEntity relies on the previous change which was not found in the batch.');
+ if (!lastChange || lastChange.entityData === 'DELETE') { throw new Error('createRelatedEntity relies on the previous change which was not found in the batch.'); }
if (lastChange.entityId) {
data[`${navigationPropertyName}@odata.bind`] = `${lastChange.entitySetName}(${lastChange.entityId})`;
this.Changes.push({
@@ -130,21 +145,63 @@ class Batch implements DynamicsBatch {
}
}
- static requestBatch(url: string, requests: BatchRequest[], headers?: any): Promise {
+ static requestBatch(connectionOptions: ConnectionOptions, url: string, requests: BatchRequest[], headers?: any): Promise {
+ let callUrl: string = connectionOptions.serverUrl;
+
+ if (callUrl.endsWith("/"))
+ {
+ callUrl = callUrl.substr(0, callUrl.length - 1);
+ }
+
+ callUrl = `${callUrl}${url}`;
+
const batchId = Batch.createId();
- return fetch(url, {
- method: 'POST',
- headers: {
- 'Content-Type': `multipart/mixed;boundary=batch_${batchId}`,
- ...DynamicsHeaders,
- ...headers
- },
- body: Batch.formatBatchRequest(batchId, requests)
- })
- .then(response => Batch.formatBatchResponse(response.text()));
+
+ if (connectionOptions.authType === AuthenticationType.Windows)
+ {
+ return new Promise((resolve, reject) =>
+ {
+ httpntlm.post({
+ url: callUrl,
+ username: connectionOptions.username,
+ password: connectionOptions.password,
+ workstation: connectionOptions.workstation || '',
+ domain: connectionOptions.domain || '',
+ body: Batch.formatBatchRequest(connectionOptions, batchId, requests),
+ headers: {
+ 'Content-Type': `multipart/mixed;boundary=batch_${batchId}`,
+ ...DynamicsHeaders,
+ ...headers
+ }
+ }, function (err, res){
+ if (err)
+ {
+ console.error(err);
+
+ reject(err);
+ }
+
+ resolve(Batch.formatBatchResponse(res.responseText));
+ });
+ });
+ }
+ else
+ {
+ return fetch(callUrl, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': `multipart/mixed;boundary=batch_${batchId}`,
+ 'Authorization': connectionOptions.accessToken,
+ ...DynamicsHeaders,
+ ...headers
+ },
+ body: Batch.formatBatchRequest(connectionOptions, batchId, requests)
+ })
+ .then(response => Batch.formatBatchResponse(response.text()));
+ }
}
- static formatBatchRequest(batchId: string, changes: BatchRequest[]) {
+ static formatBatchRequest(connectionOptions:ConnectionOptions, batchId: string, changes: BatchRequest[]) {
let batchBody = [];
let requestBody = [];
let changeNumber = 1;
@@ -159,7 +216,7 @@ class Batch implements DynamicsBatch {
requestBody.push('Content-Transfer-Encoding:binary');
requestBody.push('');
if (change.entitySetName) {
- requestBody.push(`GET ${encodeURI(`/api/data/${WebApiVersion}/${change.entitySetName}?${change.entitySetQuery}`)} HTTP/1.1`);
+ requestBody.push(`GET ${encodeURI(`/api/data/${connectionOptions.webApiVersion}/${change.entitySetName}?${change.entitySetQuery}`)} HTTP/1.1`);
}
else {
requestBody.push(`GET ${encodeURI(change.entitySetQuery)} HTTP/1.1`);
@@ -174,7 +231,7 @@ class Batch implements DynamicsBatch {
batchBody.push('Content-Transfer-Encoding:binary');
batchBody.push(`Content-ID: ${changeNumber++}`);
batchBody.push('');
- batchBody.push(`${change.entityId ? 'PATCH' : 'POST'} ${encodeURI(`/api/data/${WebApiVersion}/${change.entitySetName}(${Batch.trimId(change.entityId)})`)} HTTP/1.1`);
+ batchBody.push(`${change.entityId ? 'PATCH' : 'POST'} ${encodeURI(`/api/data/${connectionOptions.webApiVersion}/${change.entitySetName}(${Batch.trimId(change.entityId)})`)} HTTP/1.1`);
batchBody.push('Content-Type: application/json;type=entry');
batchBody.push('');
batchBody.push(JSON.stringify(change.entityData));
@@ -186,7 +243,7 @@ class Batch implements DynamicsBatch {
return batchBody.join('\n');
}
- static formatBatchResponse(responseText: Promise): Promise {
+ static formatBatchResponse(responseText: Promise): Promise {
return responseText.then(response => {
if (response) {
if (response.indexOf('"innererror"') > -1
@@ -222,7 +279,12 @@ class Batch implements DynamicsBatch {
return 'id' + Math.random().toString(16).slice(2);
}
- static trimId(id: string) {
- return (id || '').replace(/{|}/g, '');
+ static trimId(id: string | undefined) {
+ if (id !== undefined)
+ {
+ return (id || '').replace(/{|}/g, '');
+ }
+
+ return undefined;
}
}
\ No newline at end of file
diff --git a/src/Dynamics/DynamicsDiscovery.ts b/src/Dynamics/DynamicsDiscovery.ts
new file mode 100644
index 0000000..b61972a
--- /dev/null
+++ b/src/Dynamics/DynamicsDiscovery.ts
@@ -0,0 +1,35 @@
+import { dynamicsRequest, ConnectionOptions } from "./DynamicsRequest";
+import { OrganizationMetadata } from "./Model/OrganizationMetadata";
+
+export type OrganizationMetadata = OrganizationMetadata;
+
+export const DefaultDiscoveryApiVersion = 'v9.1';
+
+export default function dynamicsDiscovery(connectionOptions?: ConnectionOptions): DynamicsDiscovery {
+ return new DynamicsDiscoveryClient(connectionOptions);
+}
+
+export interface DynamicsDiscovery {
+ discover(): Promise;
+}
+
+class DynamicsDiscoveryClient implements DynamicsDiscovery {
+ private dynamicsHeaders: any;
+ private connectionOptions: ConnectionOptions;
+
+ constructor(options?:ConnectionOptions) {
+ if (options)
+ {
+ this.connectionOptions = options;
+
+ if (!options.webApiVersion)
+ {
+ this.connectionOptions.webApiVersion = DefaultDiscoveryApiVersion;
+ }
+ }
+ }
+
+ discover(): Promise {
+ return dynamicsRequest(this.connectionOptions, `/api/discovery/${this.connectionOptions.webApiVersion}/Instances`, this.dynamicsHeaders);
+ }
+}
\ No newline at end of file
diff --git a/src/Dynamics/DynamicsMetadata.ts b/src/Dynamics/DynamicsMetadata.ts
index b9fd3f7..935d50b 100644
--- a/src/Dynamics/DynamicsMetadata.ts
+++ b/src/Dynamics/DynamicsMetadata.ts
@@ -1,6 +1,5 @@
-import { WebApiVersion } from "./Dynamics";
import { dynamicsBatch } from "./DynamicsBatch";
-import { dynamicsRequest } from "./DynamicsRequest";
+import { dynamicsRequest, ConnectionOptions } from "./DynamicsRequest";
import { AttributeMetadata, AttributeTypeCode, EntityAttributeMetadata, LookupAttributeMetadata } from "./Model/AttributeMetadata";
import { EntityMetadata } from "./Model/EntityMetadata";
import { OptionSetAttributeMetadata, OptionSetMetadata } from "./Model/OptionSetMetadata";
@@ -11,8 +10,8 @@ export type DynamicsOptionSetMetadata = OptionSetMetadata;
export type DynamicsLookupAttributeMetadata = LookupAttributeMetadata;
export type DynamicsOptionSetAttributeMetadata = OptionSetAttributeMetadata;
-export default function dynamicsMetadata(accessToken?: string): DynamicsMetadata {
- return new DynamicsMetadataClient(accessToken);
+export default function dynamicsmetdata(connectionOptions?: ConnectionOptions): DynamicsMetadata {
+ return new DynamicsMetadataClient(connectionOptions);
}
export function isLookupAttribute(attribute: DynamicsAttributeMetadata): attribute is DynamicsLookupAttributeMetadata {
@@ -55,7 +54,7 @@ interface LookupAttributeType extends AttributeType {
}
interface OptionSetAttributeType extends AttributeType {
- OptionSet?: { Options: OptionSetType[] }
+ OptionSet?: { Options: OptionSetType[] };
}
interface OptionSetType {
@@ -69,7 +68,7 @@ type AnyAttributeMetadata = AttributeMetadata | LookupAttributeMetadata | Option
interface DisplayName {
UserLocalizedLabel: {
Label: string;
- }
+ };
}
const entityProperties = [
@@ -112,32 +111,34 @@ const ExcludedAttributeNameFilters = [
class DynamicsMetadataClient implements DynamicsMetadata {
private dynamicsHeaders: any;
+ private connectionOptions: ConnectionOptions;
- constructor(accessToken?: string) {
- this.dynamicsHeaders = accessToken && {
- 'Authorization': 'Bearer ' + accessToken
- };
+ constructor(options?:ConnectionOptions) {
+ if (options)
+ {
+ this.connectionOptions = options;
+ }
}
attributes(entityName: string): Promise {
- return dynamicsBatch(this.dynamicsHeaders)
+ return dynamicsBatch(this.connectionOptions, this.dynamicsHeaders)
.requestAllUrls(this.getMetadataUrls(entityName, false))
.execute()
.then(data => this.flatten(data)
- .filter((attribute: AttributeType) => attribute.LogicalName.indexOf('yomi') === -1 || attribute.LogicalName.indexOf('base') != attribute.LogicalName.length - 4)
+ .filter((attribute: AttributeType) => attribute.LogicalName.indexOf('yomi') === -1 || attribute.LogicalName.indexOf('base') !== attribute.LogicalName.length - 4)
.map(DynamicsMetadataMapper.MapAttribute)
);
}
entities(): Promise {
- return dynamicsRequest(`/api/data/${WebApiVersion}/EntityDefinitions?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
+ return dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
.then(data => data
.map(entity => DynamicsMetadataMapper.MapEntity(entity))
);
}
entity(entityName: string): Promise {
- return dynamicsRequest(`/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
+ return dynamicsRequest(this.connectionOptions, `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=EntitySetName,Description,DisplayName,LogicalName,PrimaryIdAttribute,PrimaryNameAttribute,IconSmallName,IsActivity,IsCustomEntity`, this.dynamicsHeaders)
.then(entity =>
this.attributes(entityName)
.then(attributes => DynamicsMetadataMapper.MapEntity(entity, attributes))
@@ -145,7 +146,7 @@ class DynamicsMetadataClient implements DynamicsMetadata {
}
entityAttributes(...entityNames: string[]): Promise {
- return dynamicsBatch(this.dynamicsHeaders)
+ return dynamicsBatch(this.connectionOptions, this.dynamicsHeaders)
.requestAllUrls(this.flatten(entityNames.map(e => this.getMetadataUrls(e, true))))
.execute()
.then(data => {
@@ -157,7 +158,7 @@ class DynamicsMetadataClient implements DynamicsMetadata {
currentEntity = DynamicsMetadataMapper.MapEntity(item);
entities.push(currentEntity);
}
- else if (item.LogicalName.indexOf('yomi') == -1 && item.LogicalName.indexOf('base') != item.LogicalName.length - 4) {
+ else if (item.LogicalName.indexOf('yomi') === -1 && item.LogicalName.indexOf('base') !== item.LogicalName.length - 4) {
currentEntity.Attributes.push(DynamicsMetadataMapper.MapAttribute(item));
}
}
@@ -169,12 +170,12 @@ class DynamicsMetadataClient implements DynamicsMetadata {
const attributeTypeFilter = ExcludedAttributeTypeFilters.map(v => `AttributeType ne Microsoft.Dynamics.CRM.AttributeTypeCode'${v}'`).join(' and ');
const attributeNameFilter = ExcludedAttributeNameFilters.map(v => `LogicalName ne '${v}'`).join(' and ');
return [
- `/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=${entityProperties}`,
- `/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes?$select=${attributeProperties}&$filter=${attributeTypeFilter} and ${attributeNameFilter}`,
- `/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=${attributeProperties},Targets`,
- `/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
- `/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StatusAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
- `/api/data/${WebApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StateAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')?$select=${entityProperties}`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes?$select=${attributeProperties}&$filter=${attributeTypeFilter} and ${attributeNameFilter}`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=${attributeProperties},Targets`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StatusAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`,
+ `/api/data/${this.connectionOptions.webApiVersion}/EntityDefinitions(LogicalName='${entityName}')/Attributes/Microsoft.Dynamics.CRM.StateAttributeMetadata?$select=${attributeProperties}&$expand=OptionSet($select=Options)`
].slice(includeEntity ? 0 : 1);
}
diff --git a/src/Dynamics/DynamicsRequest.ts b/src/Dynamics/DynamicsRequest.ts
index c136488..19eeb9c 100644
--- a/src/Dynamics/DynamicsRequest.ts
+++ b/src/Dynamics/DynamicsRequest.ts
@@ -1,35 +1,57 @@
import { GetRootQuery, Query } from "../Query/Query";
import GetQueryXml from "../Query/QueryXml";
-import { DynamicsHeaders, WebApiVersion } from "./Dynamics";
+import { DynamicsHeaders, DefaultWebApiVersion } from "./Dynamics";
+import * as httpntlm from "httpntlm";
+import fetch from "node-fetch";
-export function dynamicsQuery(query: Query, maxRowCount?: number, headers?: any): Promise {
+export enum AuthenticationType
+{
+ Windows = 1,
+ OAuth = 2
+}
+
+export class ConnectionOptions {
+ authType: AuthenticationType = AuthenticationType.OAuth;
+ username?: string;
+ password?: string;
+ domain?: string;
+ workstation?: string;
+ accessToken?: string;
+ serverUrl: string = "";
+ webApiVersion: string = DefaultWebApiVersion;
+}
+
+export async function dynamicsQuery(connectionOptions: ConnectionOptions, query: Query, maxRowCount?: number, headers?: any): Promise {
const dataQuery = GetRootQuery(query);
+
if (!dataQuery.EntityPath) {
throw new Error('dynamicsQuery requires a Query object with an EntityPath');
}
- return dynamicsQueryUrl(`/api/data/${WebApiVersion}/${dataQuery.EntityPath}`, query, maxRowCount, headers);
+
+ return await dynamicsQueryUrl(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${dataQuery.EntityPath}`, query, maxRowCount, headers);
}
-export function dynamicsQueryUrl(dynamicsEntitySetUrl: string, query: Query, maxRowCount?: number, headers?: any): Promise {
+export async function dynamicsQueryUrl(connectionOptions: ConnectionOptions, dynamicsEntitySetUrl: string, query: Query, maxRowCount?: number, headers?: any): Promise {
const querySeparator = (dynamicsEntitySetUrl.indexOf('?') > -1 ? '&' : '?');
- return request(`${dynamicsEntitySetUrl}${querySeparator}fetchXml=${escape(GetQueryXml(query, maxRowCount))}`, 'GET', undefined, headers);
+
+ return await request(connectionOptions, `${dynamicsEntitySetUrl}${querySeparator}fetchXml=${escape(GetQueryXml(query, maxRowCount))}`, 'GET', undefined, headers);
}
-export function dynamicsRequest(dynamicsEntitySetUrl: string, headers?: any): Promise {
- return request(dynamicsEntitySetUrl, 'GET', undefined, headers);
+export async function dynamicsRequest(connectionOptions: ConnectionOptions, dynamicsEntitySetUrl: string, headers?: any): Promise {
+ return await request(connectionOptions, dynamicsEntitySetUrl, 'GET', undefined, headers);
}
-export function dynamicsSave(entitySetName: string, data: any, id?: string, headers?: any): Promise {
+export async function dynamicsSave(connectionOptions: ConnectionOptions, entitySetName: string, data: any, id?: string, headers?: any): Promise {
if (id) {
- return request(`/api/data/${WebApiVersion}/${entitySetName}(${trimId(id)})`, 'PATCH', data, headers);
+ return await request(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${entitySetName}(${trimId(id)})`, 'PATCH', data, headers);
}
else {
- return request(`/api/data/${WebApiVersion}/${entitySetName}()`, 'POST', data, headers);
+ return await request(connectionOptions, `/api/data/${connectionOptions.webApiVersion}/${entitySetName}()`, 'POST', data, headers);
}
}
-export function formatDynamicsResponse(data) {
- var items = [];
+export function formatDynamicsResponse(data: any): any {
+ var items = [];
if (data && data.error) {
throw new Error(data.error);
}
@@ -41,11 +63,12 @@ export function formatDynamicsResponse(data) {
}
if (data) {
for (var item of data) {
- var row = {};
- for (var key in item) {
+ let row:any = {};
+
+ for (let key in item) {
var name: string = key;
- if (name.indexOf('@odata') == 0) {
+ if (name.indexOf('@odata') === 0) {
continue;
}
@@ -54,19 +77,22 @@ export function formatDynamicsResponse(data) {
}
if (name.indexOf('@') > -1) {
- name = name.substring(0, name.indexOf('@'))
- if (name.indexOf('_') == 0) {
+ name = name.substring(0, name.indexOf('@'));
+
+ if (name.indexOf('_') === 0) {
name = name.slice(1, -6);
}
+
name += "_formatted";
}
- else if (name.indexOf('_') == 0) {
+ else if (name.indexOf('_') === 0) {
name = name.slice(1, -6);
}
if (name.indexOf('_x002e_') > -1) {
var obj = name.substring(0, name.indexOf('_x002e_'));
name = name.substring(name.indexOf('_x002e_') + 7);
+
if (!row[obj]) {
row[obj] = {};
}
@@ -82,18 +108,77 @@ export function formatDynamicsResponse(data) {
return items;
}
-function request(url: string, method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', body?: any, headers?: any): Promise {
- return fetch(url, {
- method: method,
- headers: {
- 'Content-Type': 'application/json; charset=utf-8',
- ...DynamicsHeaders,
- ...headers
- },
- body: body
- })
- .then(response => response.json())
- .then(data => formatDynamicsResponse(data));
+async function request(connectionOptions: ConnectionOptions, url: string, method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', body?: any, headers?: any): Promise {
+ let callUrl: string = connectionOptions.serverUrl;
+
+ if (callUrl.endsWith("/"))
+ {
+ callUrl = callUrl.substr(0, callUrl.length - 1);
+ }
+
+ callUrl = `${callUrl}${url}`;
+
+ //TODO: fetch if we can.
+ if (connectionOptions.authType === AuthenticationType.Windows)
+ {
+ return new Promise((resolve, reject) =>
+ {
+ httpntlm[method.toLowerCase()]({
+ url: callUrl,
+ username: connectionOptions.username,
+ password: connectionOptions.password,
+ workstation: connectionOptions.workstation || '',
+ domain: connectionOptions.domain || '',
+ body: body,
+ headers: {
+ 'Content-Type': 'application/json; charset=utf-8',
+ ...DynamicsHeaders,
+ ...headers
+ }
+ }, function (err, res){
+ if (err)
+ {
+ console.error(err);
+
+ reject(err);
+ }
+
+ const json = JSON.parse(res.body);
+
+ if (json.error)
+ {
+ console.error(json.error.message);
+
+ reject (json.error.message);
+ }
+ else if (json.ExceptionMessage)
+ {
+ console.error(json.ExceptionMessage);
+
+ reject (`The service call returned HTTP ${json.ErrorCode} - ${json.ExceptionMessage}`);
+ }
+ else
+ {
+ resolve(formatDynamicsResponse(json));
+ }
+ });
+ });
+ }
+ else
+ {
+ return fetch(url, {
+ method: method,
+ headers: {
+ 'Authorization': `Bearer ${connectionOptions.accessToken}`,
+ 'Content-Type': 'application/json; charset=utf-8',
+ ...DynamicsHeaders,
+ ...headers
+ },
+ body: body
+ })
+ .then(response => response.json())
+ .then(data => formatDynamicsResponse(data));
+ }
}
function trimId(id: string) {
diff --git a/src/Dynamics/Model/OrganizationMetadata.ts b/src/Dynamics/Model/OrganizationMetadata.ts
new file mode 100644
index 0000000..bce2c2f
--- /dev/null
+++ b/src/Dynamics/Model/OrganizationMetadata.ts
@@ -0,0 +1,12 @@
+export interface OrganizationMetadata
+{
+ Id?: string;
+ UniqueName?: string;
+ UrlName?: string;
+ FriendlyName?: string;
+ State?: number;
+ Version?: string;
+ Uri?: string;
+ AppUri?: string;
+ LastUpdated?: Date;
+}
\ No newline at end of file
diff --git a/src/Query/Query.ts b/src/Query/Query.ts
index 2a97acf..9cd7121 100644
--- a/src/Query/Query.ts
+++ b/src/Query/Query.ts
@@ -22,6 +22,7 @@ export interface DataQueryJoin extends DataQuery {
}
export interface Query {
+ [key:string]: any; // Add index signature
alias(attributeName: string, alias: string): Query;
path(entityPath: string): Query;
select(...attributeNames: string[]): Query;
@@ -80,7 +81,7 @@ export function GetRootQuery(query: Query): DataQuery {
}
class QueryProvider implements Query {
public Query: DataQuery;
- public RootQuery: Query;
+ public RootQuery: Query | undefined;
constructor(private EntityName: string) {
this.Query = {
@@ -126,7 +127,8 @@ class QueryProvider implements Query {
}
public whereAny(any: (or: (attributeName: string, operator: QueryOperatorParam, ...values: any[]) => void) => void): Query {
- var conditions = [];
+ let conditions:DataQueryCondition[] = [];
+
any((attributeName: string, operator: QueryOperatorParam, ...values: any[]) => {
conditions.push({
AttributeName: attributeName,
diff --git a/src/Query/QueryXml.ts b/src/Query/QueryXml.ts
index f2823af..e2a45df 100644
--- a/src/Query/QueryXml.ts
+++ b/src/Query/QueryXml.ts
@@ -24,7 +24,7 @@ function GetDataQueryXml(query: DataQuery, maxRowCount: number) {
return xml.join('');
}
-function getQueryXml(query: DataQuery) {
+function getQueryXml(query: DataQuery) : any {
const xml = [];
query.Attributes.forEach(attribute => {
@@ -36,7 +36,7 @@ function getQueryXml(query: DataQuery) {
}
});
query.OrderBy.forEach(attribute => {
- if (attribute.indexOf('_') == 0) {
+ if (attribute.indexOf('_') === 0) {
xml.push(``);
}
else {
@@ -118,16 +118,16 @@ function getConditionXml(condition: DataQueryCondition): string {
return xml.join('\n');
}
-function encodeValue(value) {
- if (value === 0) return '0';
- if (value === true) return 'true';
- if (value === false) return 'false';
- if (!value) return '';
- if (typeof (value.toISOString) === 'function') return value.toISOString();
+function encodeValue(value: any) {
+ if (value === 0) { return '0'; }
+ if (value === true) { return 'true'; }
+ if (value === false) { return 'false'; }
+ if (!value) { return ''; }
+ if (typeof (value.toISOString) === 'function') { return value.toISOString(); }
return xmlEncode(value.toString());
}
-function xmlEncode(text) {
+function xmlEncode(text: any) {
if (text && typeof (text) === 'string') {
text = text.replace(/&/g, '&');
text = text.replace(/\"/g, '"');
@@ -138,16 +138,16 @@ function xmlEncode(text) {
return text;
}
-function formatXml(xmlString) {
+function formatXml(xmlString: any) {
var indent = "\t";
var tabs = ""; //store the current indentation
return xmlString.replace(
/\s*<[^>\/]*>[^<>]*<\/[^>]*>|\s*<.+?>|\s*[^<]+/g, //pattern to match nodes (angled brackets or text)
- function (m, i) {
+ function (m: string, i: number) {
m = m.replace(/^\s+|\s+$/g, ""); //trim the match just in case
- if (i < 38 && /^<[?]xml/.test(m)) return m + "\n"; //if the match is a header, ignore it
+ if (i < 38 && /^<[?]xml/.test(m)) { return m + "\n"; } //if the match is a header, ignore it
if (/^<[/]/.test(m)) //if the match is a closing tag
{
diff --git a/src/ntlm/hash.ts b/src/ntlm/hash.ts
new file mode 100644
index 0000000..83607ce
--- /dev/null
+++ b/src/ntlm/hash.ts
@@ -0,0 +1,211 @@
+'use strict';
+
+import * as crypto from 'crypto';
+import { Type2Message } from './type2.message';
+
+export class Hash {
+ static createLMResponse(challenge: Buffer, lmhash: Buffer) {
+ let buf = Buffer.alloc(24);
+ let pwBuffer = Buffer.alloc(21).fill(0);
+
+ lmhash.copy(pwBuffer);
+
+ Hash.calculateDES(pwBuffer.slice(0, 7), challenge).copy(buf);
+ Hash.calculateDES(pwBuffer.slice(7, 14), challenge).copy(buf, 8);
+ Hash.calculateDES(pwBuffer.slice(14), challenge).copy(buf, 16);
+
+ return buf;
+ }
+
+ static createLMHash(password: string) {
+ let buf = Buffer.alloc(16),
+ pwBuffer = Buffer.alloc(14),
+ magicKey = Buffer.from('KGS!@#$%', 'ascii');
+
+ if (password.length > 14) {
+ buf.fill(0);
+ return buf;
+ }
+
+ pwBuffer.fill(0);
+ pwBuffer.write(password.toUpperCase(), 0, 'ascii');
+
+ return Buffer.concat([
+ Hash.calculateDES(pwBuffer.slice(0, 7), magicKey),
+ Hash.calculateDES(pwBuffer.slice(7), magicKey)
+ ]);
+ }
+
+ static calculateDES(key: Buffer, message: Buffer) {
+ let desKey = Buffer.alloc(8);
+
+ desKey[0] = key[0] & 0xFE;
+ desKey[1] = ((key[0] << 7) & 0xFF) | (key[1] >> 1);
+ desKey[2] = ((key[1] << 6) & 0xFF) | (key[2] >> 2);
+ desKey[3] = ((key[2] << 5) & 0xFF) | (key[3] >> 3);
+ desKey[4] = ((key[3] << 4) & 0xFF) | (key[4] >> 4);
+ desKey[5] = ((key[4] << 3) & 0xFF) | (key[5] >> 5);
+ desKey[6] = ((key[5] << 2) & 0xFF) | (key[6] >> 6);
+ desKey[7] = (key[6] << 1) & 0xFF;
+
+ for (let i = 0; i < 8; i++) {
+ let parity = 0;
+
+ for (let j = 1; j < 8; j++) {
+ parity += (desKey[i] >> j) % 2;
+ }
+
+ desKey[i] |= (parity % 2) === 0 ? 1 : 0;
+ }
+
+ let des = crypto.createCipheriv('DES-ECB', desKey, '');
+ return des.update(message);
+ }
+
+ static createNTLMResponse(challenge: Buffer, ntlmhash: Buffer) {
+ let buf = Buffer.alloc(24),
+ ntlmBuffer = Buffer.alloc(21).fill(0);
+
+ ntlmhash.copy(ntlmBuffer);
+
+ Hash.calculateDES(ntlmBuffer.slice(0, 7), challenge).copy(buf);
+ Hash.calculateDES(ntlmBuffer.slice(7, 14), challenge).copy(buf, 8);
+ Hash.calculateDES(ntlmBuffer.slice(14), challenge).copy(buf, 16);
+
+ return buf;
+ }
+
+ static createNTLMHash(password: string) {
+ let md4sum = crypto.createHash('md4');
+ md4sum.update(Buffer.from(password, 'ucs2')); // lgtm[js/insufficient-password-hash]
+ return md4sum.digest();
+ }
+
+ static createNTLMv2Hash(ntlmhash: Buffer, username: string, authTargetName: string) {
+ let hmac = crypto.createHmac('md5', ntlmhash);
+ hmac.update(Buffer.from(username.toUpperCase() + authTargetName, 'ucs2')); // lgtm[js/weak-cryptographic-algorithm]
+ return hmac.digest();
+ }
+
+ static createLMv2Response(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string) {
+ let buf = Buffer.alloc(24);
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+
+ //server challenge
+ type2message.challenge.copy(buf, 8);
+
+ //client nonce
+ buf.write(nonce, 16, 'hex');
+
+ //create hash
+ hmac.update(buf.slice(8));
+ let hashedBuffer = hmac.digest();
+
+ hashedBuffer.copy(buf);
+
+ return buf;
+ }
+
+ static createNTLMv2Response(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string, withMic: boolean) {
+ let bufferSize = 48 + type2message.targetInfo.buffer.length;
+ if (withMic) {
+ bufferSize += 8;
+ }
+ let buf = Buffer.alloc(bufferSize),
+ ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName),
+ hmac = crypto.createHmac('md5', ntlm2hash);
+
+ //the first 8 bytes are spare to store the hashed value before the blob
+
+ //server challenge
+ type2message.challenge.copy(buf, 8);
+
+ //blob signature
+ buf.writeUInt32BE(0x01010000, 16);
+
+ //reserved
+ buf.writeUInt32LE(0, 20);
+
+ //timestamp
+ let timestampLow = Number('0x' + timestamp.substring(Math.max(0, timestamp.length - 8)));
+ let timestampHigh = Number('0x' + timestamp.substring(0, Math.max(0, timestamp.length - 8)));
+
+ buf.writeUInt32LE(timestampLow, 24);
+ buf.writeUInt32LE(timestampHigh, 28);
+
+ //random client nonce
+ buf.write(nonce, 32, 'hex');
+
+ //zero
+ buf.writeUInt32LE(0, 40);
+
+ //complete target information block from type 2 message
+ type2message.targetInfo.buffer.copy(buf, 44);
+
+ let bufferPos = 44 + type2message.targetInfo.buffer.length;
+ if (withMic) {
+ // Should include MIC in response, indicate it in AV_FLAGS
+ buf.writeUInt16LE(0x06, bufferPos - 4);
+ buf.writeUInt16LE(0x04, bufferPos - 2);
+ buf.writeUInt32LE(0x02, bufferPos);
+ // Write new endblock
+ buf.writeUInt32LE(0, bufferPos + 4);
+ bufferPos += 8;
+ }
+
+ //zero
+ buf.writeUInt32LE(0, bufferPos);
+
+ hmac.update(buf.slice(8));
+ let hashedBuffer = hmac.digest();
+
+ hashedBuffer.copy(buf);
+
+ return buf;
+ }
+
+ static createMIC(type1message: Buffer, type2message: Type2Message, type3message: Buffer, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string) {
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let ntlm2response = Hash.createNTLMv2Response(type2message, username, authTargetName, ntlmhash, nonce, timestamp, true);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+ let session_base_key = hmac.update(ntlm2response.slice(0,16)).digest();
+ let key_exchange_key = session_base_key;
+ //create MIC hash
+ hmac = crypto.createHmac('md5', key_exchange_key);
+ hmac.update(type1message);
+ hmac.update(type2message.raw);
+ hmac.update(type3message);
+ let hashedBuffer = hmac.digest();
+ return hashedBuffer;
+ }
+
+ static createRandomSessionKey(type2message: Type2Message, username: string, authTargetName: string, ntlmhash: Buffer, nonce: string, timestamp: string, withMic: boolean) {
+ let ntlm2hash = Hash.createNTLMv2Hash(ntlmhash, username, authTargetName);
+ let ntlm2response = Hash.createNTLMv2Response(type2message, username, authTargetName, ntlmhash, nonce, timestamp, withMic);
+ let hmac = crypto.createHmac('md5', ntlm2hash);
+ let session_base_key = hmac.update(ntlm2response.slice(0,16)).digest();
+ let key_exchange_key = session_base_key;
+
+ let exported_session_key_hex = Hash.createPseudoRandomValue(32);
+ let exported_session_key = Buffer.from(exported_session_key_hex, 'hex');
+ let rc4 = crypto.createCipheriv('rc4', key_exchange_key, '');
+ let encrypted_random_session_key = rc4.update(exported_session_key);
+ return encrypted_random_session_key;
+ }
+
+ static createPseudoRandomValue(length: number) {
+ let str = '';
+ while (str.length < length) {
+ str += Math.floor(Math.random() * 16).toString(16);
+ }
+ return str;
+ }
+
+ static createTimestamp() {
+ //TODO: we are loosing precision here since js is not able to handle those large integers
+ // maybe think about a different solution here
+ // 11644473600000 = diff between 1970 and 1601
+ return ((Date.now() + 11644473600000) * 10000).toString(16);
+ }
+}
diff --git a/src/ntlm/interfaces/i.ntlm.ts b/src/ntlm/interfaces/i.ntlm.ts
new file mode 100644
index 0000000..5652878
--- /dev/null
+++ b/src/ntlm/interfaces/i.ntlm.ts
@@ -0,0 +1,8 @@
+import { Type2Message } from "../type2.message";
+import { NtlmMessage } from "../ntlm.message";
+
+export interface INtlm {
+ createType1Message(ntlm_version: number, workstation: string | undefined, target: string | undefined): NtlmMessage;
+ decodeType2Message(str: string | undefined): Type2Message;
+ createType3Message(type1message: NtlmMessage, type2Message: Type2Message, username: string, password: string, workstation: string | undefined, target: string | undefined, client_nonce: string | undefined, timestamp: string | undefined): NtlmMessage;
+}
diff --git a/src/ntlm/ntlm.constants.ts b/src/ntlm/ntlm.constants.ts
new file mode 100644
index 0000000..f5541f5
--- /dev/null
+++ b/src/ntlm/ntlm.constants.ts
@@ -0,0 +1,3 @@
+export class NtlmConstants {
+ static readonly NTLM_SIGNATURE = 'NTLMSSP\0';
+}
diff --git a/src/ntlm/ntlm.flags.ts b/src/ntlm/ntlm.flags.ts
new file mode 100644
index 0000000..d1a5073
--- /dev/null
+++ b/src/ntlm/ntlm.flags.ts
@@ -0,0 +1,111 @@
+'use strict';
+
+export enum NtlmFlags {
+ /* Indicates that Unicode strings are supported for use in security buffer
+ data. */
+ NEGOTIATE_UNICODE = 1<<0,
+
+ /* Indicates that OEM strings are supported for use in security buffer data. */
+ NEGOTIATE_OEM = 1<<1,
+
+ /* Requests that the server's authentication realm be included in the Type 2
+ message. */
+ REQUEST_TARGET = 1<<2,
+
+ /* unknown (1<<3) */
+
+ /* Specifies that authenticated communication between the client and server
+ should carry a digital signature (message integrity). */
+ NEGOTIATE_SIGN = 1<<4,
+
+ /* Specifies that authenticated communication between the client and server
+ should be encrypted (message confidentiality). */
+ NEGOTIATE_SEAL = 1<<5,
+
+ /* Indicates that datagram authentication is being used. */
+ NEGOTIATE_DATAGRAM_STYLE = 1<<6,
+
+ /* Indicates that the LAN Manager session key should be used for signing and
+ sealing authenticated communications. */
+ NEGOTIATE_LM_KEY = 1<<7,
+
+ /* unknown purpose */
+ NEGOTIATE_NETWARE = 1<<8,
+
+ /* Indicates that NTLM authentication is being used. */
+ NEGOTIATE_NTLM_KEY = 1<<9,
+
+ /* unknown (1<<10) */
+
+ /* Sent by the client in the Type 3 message to indicate that an anonymous
+ context has been established. This also affects the response fields. */
+ NEGOTIATE_ANONYMOUS = 1<<11,
+
+ /* Sent by the client in the Type 1 message to indicate that a desired
+ authentication realm is included in the message. */
+ NEGOTIATE_DOMAIN_SUPPLIED = 1<<12,
+
+ /* Sent by the client in the Type 1 message to indicate that the client
+ workstation's name is included in the message. */
+ NEGOTIATE_WORKSTATION_SUPPLIED = 1<<13,
+
+ /* Sent by the server to indicate that the server and client are on the same
+ machine. Implies that the client may use a pre-established local security
+ context rather than responding to the challenge. */
+ NEGOTIATE_LOCAL_CALL = 1<<14,
+
+ /* Indicates that authenticated communication between the client and server
+ should be signed with a "dummy" signature. */
+ NEGOTIATE_ALWAYS_SIGN = 1<<15,
+
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a domain. */
+ TARGET_TYPE_DOMAIN = 1<<16,
+
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a server. */
+ TARGET_TYPE_SERVER = 1<<17,
+
+ /* Sent by the server in the Type 2 message to indicate that the target
+ authentication realm is a share. Presumably, this is for share-level
+ authentication. Usage is unclear. */
+ TARGET_TYPE_SHARE = 1<<18,
+
+ /* Indicates that the NTLM2 signing and sealing scheme should be used for
+ protecting authenticated communications. */
+ NEGOTIATE_NTLM2_KEY = 1<<19,
+
+ /* unknown purpose */
+ REQUEST_INIT_RESPONSE = 1<<20,
+
+ /* unknown purpose */
+ REQUEST_ACCEPT_RESPONSE = 1<<21,
+
+ /* unknown purpose */
+ REQUEST_NONNT_SESSION_KEY = 1<<22,
+
+ /* Sent by the client in the Type 1 message to request Target info block from server.
+ Sent by the server in the Type 2 message to indicate that it is including a
+ Target Information block in the message. */
+ NEGOTIATE_TARGET_INFO = 1<<23,
+
+ /* unknown (1<24) */
+
+ /* Indicates that the version info block is included in the message */
+ NEGOTIATE_VERSION = 1<<25,
+
+ /* unknown (1<26) */
+ /* unknown (1<27) */
+ /* unknown (1<28) */
+
+ /* Indicates that 128-bit encryption is supported. */
+ NEGOTIATE_128 = 1<<29,
+
+ /* Indicates that the client will provide an encrypted master key in
+ the "Session Key" field of the Type 3 message. */
+ NEGOTIATE_KEY_EXCHANGE = 1<<30,
+
+ /* Indicates that 56-bit encryption is supported. */
+ NEGOTIATE_56 = 1<<31,
+}
+
diff --git a/src/ntlm/ntlm.message.ts b/src/ntlm/ntlm.message.ts
new file mode 100644
index 0000000..e79ec61
--- /dev/null
+++ b/src/ntlm/ntlm.message.ts
@@ -0,0 +1,11 @@
+export class NtlmMessage {
+ raw: Buffer;
+
+ constructor(buf: Buffer) {
+ this.raw = buf;
+ }
+
+ header(): string {
+ return 'NTLM ' + this.raw.toString('base64');
+ }
+}
diff --git a/src/ntlm/ntlm.ts b/src/ntlm/ntlm.ts
new file mode 100644
index 0000000..22276a3
--- /dev/null
+++ b/src/ntlm/ntlm.ts
@@ -0,0 +1,281 @@
+// All code in this folder is heavily based on the node project ntlm-client.
+// https://github.com/clncln1/node-ntlm-client
+// ----------------------------------------------------------------------------
+// Original license statement:
+
+// Copyright (c) 2015 Nico Haller
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+// ----------------------------------------------------------------------------
+
+'use strict';
+
+import { INtlm } from './interfaces/i.ntlm';
+import { NtlmFlags } from './ntlm.flags';
+import { NtlmConstants } from './ntlm.constants';
+import { Hash } from './hash';
+import * as os from 'os';
+import { Type2Message } from './type2.message';
+import { NtlmMessage } from './ntlm.message';
+
+export default function ntlm(): INtlm {
+ return new Ntlm();
+}
+
+export class Ntlm implements INtlm {
+ createType1Message(ntlm_version: number, workstation: string | undefined, target: string | undefined): NtlmMessage {
+ let dataPos = 40;
+ let pos = 0;
+ let buf = Buffer.alloc(256);
+
+ if (target === undefined) {
+ target = '';
+ }
+
+ if (workstation === undefined) {
+ workstation = os.hostname().toUpperCase();
+ }
+
+ //signature
+ buf.write(NtlmConstants.NTLM_SIGNATURE, pos, NtlmConstants.NTLM_SIGNATURE.length, 'ascii');
+ pos += NtlmConstants.NTLM_SIGNATURE.length;
+
+ //message type
+ buf.writeUInt32LE(1, pos);
+ pos += 4;
+
+ //flags
+ let messageFlags = NtlmFlags.NEGOTIATE_OEM |
+ NtlmFlags.NEGOTIATE_ALWAYS_SIGN |
+ NtlmFlags.NEGOTIATE_VERSION;
+
+ if (ntlm_version == 1) {
+ messageFlags |= NtlmFlags.NEGOTIATE_NTLM_KEY |
+ NtlmFlags.NEGOTIATE_LM_KEY;
+ } else {
+ messageFlags |= NtlmFlags.NEGOTIATE_NTLM2_KEY;
+ }
+
+ if (target.length > 0) {
+ messageFlags |= NtlmFlags.NEGOTIATE_DOMAIN_SUPPLIED;
+ }
+ if (workstation.length > 0) {
+ messageFlags |= NtlmFlags.NEGOTIATE_WORKSTATION_SUPPLIED;
+ }
+
+ // special operator to force conversion to unsigned
+ buf.writeUInt32LE(messageFlags >>> 0, pos);
+ pos += 4;
+
+ //domain security buffer
+ buf.writeUInt16LE(target.length, pos);
+ pos += 2;
+ buf.writeUInt16LE(target.length, pos);
+ pos += 2;
+ buf.writeUInt32LE(dataPos, pos);
+ pos += 4;
+
+ if (target.length > 0) {
+ dataPos += buf.write(target, dataPos, 'ascii');
+ }
+
+ //workstation security buffer
+ buf.writeUInt16LE(workstation.length, pos);
+ pos += 2;
+ buf.writeUInt16LE(workstation.length, pos);
+ pos += 2;
+ buf.writeUInt32LE(dataPos, pos);
+ pos += 4;
+
+ if (workstation.length > 0) {
+ dataPos += buf.write(workstation, dataPos, 'ascii');
+ }
+
+ this.addVersionStruct(buf, pos);
+ return new NtlmMessage(buf.slice(0, dataPos));
+}
+
+ // Version - hard-coded to
+ // Major version 10, minor version 0 (Windows 10)
+ // build number 18362 (1903 update), NTLM revision 15
+private addVersionStruct(buf: Buffer, pos: number) {
+ buf.writeUInt8(10, pos);
+ pos++;
+ buf.writeUInt8(0, pos);
+ pos++;
+ buf.writeUInt16LE(18362, pos);
+ pos += 2;
+ buf.writeUInt32LE(0x0F000000, pos);
+ pos += 4;
+ return pos;
+}
+
+decodeType2Message(str: string | undefined): Type2Message {
+ if (str === undefined) {
+ throw new Error('Invalid argument');
+ }
+
+ let ntlmMatch = /^NTLM ([^,\s]+)/.exec(str);
+
+ if (ntlmMatch) {
+ str = ntlmMatch[1];
+ }
+
+ let buf = Buffer.from(str, 'base64');
+ let type2message = new Type2Message(buf);
+ return type2message;
+}
+
+createType3Message(type1message: NtlmMessage, type2message: Type2Message, username: string, password: string, workstation: string | undefined, target: string | undefined, client_nonce_override: string | undefined, timestamp_override: string | undefined): NtlmMessage {
+ let dataPos = 72;
+ let buf = Buffer.alloc(1024);
+
+ if (workstation === undefined) {
+ workstation = os.hostname().toUpperCase();
+ }
+
+ if (target === undefined) {
+ target = type2message.targetName;
+ }
+
+ //signature
+ buf.write(NtlmConstants.NTLM_SIGNATURE, 0, NtlmConstants.NTLM_SIGNATURE.length, 'ascii');
+
+ //message type
+ buf.writeUInt32LE(3, 8);
+
+ let targetLen = type2message.encoding === 'ascii' ? target.length : target.length * 2;
+ let usernameLen = type2message.encoding === 'ascii' ? username.length : username.length * 2;
+ let workstationLen = type2message.encoding === 'ascii' ? workstation.length : workstation.length * 2;
+ let dataPosOffset = targetLen + usernameLen + workstationLen;
+ let timestamp = '';
+ let client_nonce = '';
+ let withMic = false;
+ let withServerTimestamp = false;
+ if (type2message.version === 2 &&
+ type2message.targetInfo &&
+ type2message.targetInfo.parsed['SERVER_TIMESTAMP']) { // Must include MIC, add room for it
+ withServerTimestamp = true;
+ withMic = true;
+ dataPos += 16;
+ }
+ let hashDataPos = dataPos + dataPosOffset;
+ let ntlmHash = Hash.createNTLMHash(password);
+
+ if (type2message.version === 2) {
+ client_nonce = client_nonce_override || Hash.createPseudoRandomValue(16);
+ if (withServerTimestamp) { // Use server timestamp if provided
+ timestamp = type2message.targetInfo.parsed['SERVER_TIMESTAMP'];
+ } else {
+ timestamp = timestamp_override || Hash.createTimestamp();
+ }
+
+ let lmv2;
+ if (withServerTimestamp) {
+ lmv2 = Buffer.alloc(24); // zero-filled
+ } else {
+ lmv2 = Hash.createLMv2Response(type2message, username, target, ntlmHash, client_nonce);
+ }
+
+ //lmv2 security buffer
+ buf.writeUInt16LE(lmv2.length, 12);
+ buf.writeUInt16LE(lmv2.length, 14);
+ buf.writeUInt32LE(hashDataPos, 16);
+
+ lmv2.copy(buf, hashDataPos);
+ hashDataPos += lmv2.length;
+
+ let ntlmv2 = Hash.createNTLMv2Response(type2message, username, target, ntlmHash, client_nonce, timestamp, withMic);
+
+ //ntlmv2 security buffer
+ buf.writeUInt16LE(ntlmv2.length, 20);
+ buf.writeUInt16LE(ntlmv2.length, 22);
+ buf.writeUInt32LE(hashDataPos, 24);
+
+ ntlmv2.copy(buf, hashDataPos);
+ hashDataPos += ntlmv2.length;
+ } else {
+ let lmHash = Hash.createLMHash(password);
+ let lm = Hash.createLMResponse(type2message.challenge, lmHash);
+ let ntlm = Hash.createNTLMResponse(type2message.challenge, ntlmHash);
+
+ //lm security buffer
+ buf.writeUInt16LE(lm.length, 12);
+ buf.writeUInt16LE(lm.length, 14);
+ buf.writeUInt32LE(hashDataPos, 16);
+
+ lm.copy(buf, hashDataPos);
+ hashDataPos += lm.length;
+
+ //ntlm security buffer
+ buf.writeUInt16LE(ntlm.length, 20);
+ buf.writeUInt16LE(ntlm.length, 22);
+ buf.writeUInt32LE(hashDataPos, 24);
+
+ ntlm.copy(buf, hashDataPos);
+ hashDataPos += ntlm.length;
+ }
+
+ //target name security buffer
+ buf.writeUInt16LE(targetLen, 28);
+ buf.writeUInt16LE(targetLen, 30);
+ buf.writeUInt32LE(dataPos, 32);
+
+ dataPos += buf.write(target, dataPos, type2message.encoding);
+
+ //user name security buffer
+ buf.writeUInt16LE(usernameLen, 36);
+ buf.writeUInt16LE(usernameLen, 38);
+ buf.writeUInt32LE(dataPos, 40);
+
+ dataPos += buf.write(username, dataPos, type2message.encoding);
+
+ //workstation name security buffer
+ buf.writeUInt16LE(workstationLen, 44);
+ buf.writeUInt16LE(workstationLen, 46);
+ buf.writeUInt32LE(dataPos, 48);
+
+ dataPos += buf.write(workstation, dataPos, type2message.encoding);
+
+ //session key security buffer
+ let session_key = Buffer.alloc(0);
+ // if (type2message.flags & NtlmFlags.NEGOTIATE_KEY_EXCHANGE) {
+ // session_key = hash.createRandomSessionKey(type2message, username, target, ntlmHash, client_nonce, timestamp, withMic);
+ // }
+ buf.writeUInt16LE(session_key.length, 52);
+ buf.writeUInt16LE(session_key.length, 54);
+ buf.writeUInt32LE(hashDataPos, 56);
+ session_key.copy(buf, hashDataPos);
+ hashDataPos += session_key.length;
+
+ //flags
+ buf.writeUInt32LE(type2message.flags, 60);
+
+ this.addVersionStruct(buf, 64);
+
+ if (withMic) {
+ // Calculate and add MIC
+ let mic = Hash.createMIC(type1message.raw, type2message, buf.slice(0, hashDataPos), username, target, ntlmHash, client_nonce, timestamp);
+ mic.copy(buf, 72);
+ }
+
+ return new NtlmMessage(buf.slice(0, hashDataPos));
+ //return 'NTLM ' + buf.toString('base64', 0, hashDataPos);
+}
+}
diff --git a/src/ntlm/type2.message.ts b/src/ntlm/type2.message.ts
new file mode 100644
index 0000000..735d659
--- /dev/null
+++ b/src/ntlm/type2.message.ts
@@ -0,0 +1,160 @@
+import { NtlmFlags } from './ntlm.flags';
+import { NtlmConstants } from './ntlm.constants';
+
+interface TargetInfoHash {
+ [key: string]: string | null;
+}
+
+export class Type2Message {
+ raw: Buffer;
+ flags: number;
+ encoding: 'ascii' | 'ucs2';
+ version: number;
+ challenge: Buffer;
+ targetName: string;
+ targetInfo: any;
+
+ constructor(buf: Buffer) {
+ this.raw = buf;
+
+ //check signature
+ if (buf.toString('ascii', 0, NtlmConstants.NTLM_SIGNATURE.length) !== NtlmConstants.NTLM_SIGNATURE) {
+ throw new Error('Invalid message signature');
+ }
+
+ //check message type
+ if (buf.readUInt32LE(NtlmConstants.NTLM_SIGNATURE.length) !== 2) {
+ throw new Error('Invalid message type (no type 2)');
+ }
+
+ //read flags
+ this.flags = buf.readUInt32LE(20);
+
+ this.encoding = (this.flags & NtlmFlags.NEGOTIATE_OEM) ? 'ascii' : 'ucs2';
+
+ this.version = (this.flags & NtlmFlags.NEGOTIATE_NTLM2_KEY) ? 2 : 1;
+
+ this.challenge = buf.slice(24, 32);
+
+ //read target name
+ this.targetName = this.readTargetName();
+
+ //read target info
+ if (this.flags & NtlmFlags.NEGOTIATE_TARGET_INFO) {
+ this.targetInfo = this.parseTargetInfo();
+ }
+ }
+
+ private readTargetName(): string {
+ let length = this.raw.readUInt16LE(12);
+ //skipping allocated space
+ let offset = this.raw.readUInt32LE(16);
+
+ if (length === 0) {
+ return '';
+ }
+
+ if ((offset + length) > this.raw.length || offset < 32) {
+ throw new Error('Bad type 2 message');
+ }
+
+ return this.raw.toString(this.encoding, offset, offset + length);
+ }
+
+ private parseTargetInfo() {
+ let info: TargetInfoHash = {};
+
+ let length = this.raw.readUInt16LE(40);
+ //skipping allocated space
+ let offset = this.raw.readUInt32LE(44);
+
+ let targetInfoBuffer = Buffer.alloc(length);
+ this.raw.copy(targetInfoBuffer, 0, offset, offset + length);
+
+ if (length === 0) {
+ return info;
+ }
+
+ if ((offset + length) > this.raw.length || offset < 32) {
+ throw new Error('Bad type 2 message');
+ }
+
+ let pos = offset;
+
+ while (pos < (offset + length)) {
+ let blockType = this.raw.readUInt16LE(pos);
+ pos += 2;
+ let blockLength = this.raw.readUInt16LE(pos);
+ pos += 2;
+
+ if (blockType === 0) {
+ //reached the terminator subblock
+ break;
+ }
+
+ let blockTypeStr;
+ let blockTypeOutput = 'string';
+
+ switch (blockType) {
+ case 0x01:
+ blockTypeStr = 'SERVER';
+ break;
+ case 0x02:
+ blockTypeStr = 'DOMAIN';
+ break;
+ case 0x03:
+ blockTypeStr = 'FQDN';
+ break;
+ case 0x04:
+ blockTypeStr = 'DNS';
+ break;
+ case 0x05:
+ blockTypeStr = 'PARENT_DNS';
+ break;
+ case 0x06:
+ blockTypeStr = 'FLAGS';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x07:
+ blockTypeStr = 'SERVER_TIMESTAMP';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x08:
+ blockTypeStr = 'SINGLE_HOST';
+ blockTypeOutput = 'hex';
+ break;
+ case 0x09:
+ blockTypeStr = 'TARGET_NAME';
+ break;
+ case 0x0A:
+ blockTypeStr = 'CHANNEL_BINDING';
+ blockTypeOutput = 'hex';
+ break;
+ default:
+ blockTypeStr = '';
+ break;
+ }
+
+ if (blockTypeStr) {
+ if (blockTypeOutput === 'string') {
+ info[blockTypeStr] = this.raw.toString('ucs2', pos, pos + blockLength);
+ } else {
+ // Output as hex in little endian order
+ let twoCharBlocks = this.raw.toString('hex', pos, pos + blockLength).match(/.{2}/g);
+ if (twoCharBlocks) {
+ info[blockTypeStr] = twoCharBlocks.reverse().join("");
+ } else {
+ info[blockTypeStr] = null;
+ }
+ }
+ }
+
+ pos += blockLength;
+ }
+
+ return {
+ parsed: info,
+ buffer: targetInfoBuffer
+ };
+ }
+}
diff --git a/src/tests/dynamicsTests.ts b/src/tests/dynamicsTests.ts
index 66f55ec..81bf257 100644
--- a/src/tests/dynamicsTests.ts
+++ b/src/tests/dynamicsTests.ts
@@ -1,8 +1,17 @@
import dynamics from "../Dynamics/Dynamics";
-import query, { QueryOperator } from "../Query/Query";
+import { QueryOperator } from "../Query/Query";
+import { ConnectionOptions, AuthenticationType } from "../Dynamics/DynamicsRequest";
export async function dynamicsTestAll() {
- const dyn = dynamics();
+ const options = new ConnectionOptions();
+ options.authType = AuthenticationType.Windows;
+ options.username = "Administrator";
+ options.domain = "CONTOSO";
+ options.password = "{password}";
+ options.serverUrl = "http://{server}/{org}/";
+ options.webApiVersion = "v9.0";
+
+ const dyn = dynamics(options);
/* Batch Request */
const allAccounts = await dyn.batch()
diff --git a/tsconfig.json b/tsconfig.json
index 855eb51..448c65a 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,8 +1,20 @@
{
"compilerOptions": {
+ "experimentalDecorators": true,
"declaration": true,
- "module": "es6",
+ "module": "commonjs",
"rootDir": "src",
- "target": "es6"
- }
+ "target": "es6",
+ "outDir": "./bin",
+ "sourceMap": true,
+ "strict": false,
+ "noImplicitAny": false,
+ "strictNullChecks": false
+ },
+ "include": [
+ "src/**/*.ts"
+ ],
+ "exclude": [
+ "node_modules"
+ ]
}
\ No newline at end of file