diff --git a/core_sdk/lib/auth.js b/core_sdk/lib/auth.js
index c846bab..30f3b6a 100644
--- a/core_sdk/lib/auth.js
+++ b/core_sdk/lib/auth.js
@@ -40,7 +40,7 @@ var AuthHandler = {
return resourceTokens[resourceId];
} else {
var pathParts = path.split("/");
- var resourceTypes = ["dbs", "colls", "docs", "sprocs", "udfs", "triggers", "users", "permissions", "attachments", "media", "conflicts"];
+ var resourceTypes = ["dbs", "colls", "docs", "sprocs", "udfs", "triggers", "users", "permissions", "attachments", "media", "conflicts", "offers"];
for (var i = pathParts.length - 1; i >= 0;i--) {
if (resourceTypes.indexOf(pathParts[i]) === -1) {
if (resourceTokens[pathParts[i]]) {
diff --git a/core_sdk/lib/base.js b/core_sdk/lib/base.js
index 8a409cd..fa12aed 100644
--- a/core_sdk/lib/base.js
+++ b/core_sdk/lib/base.js
@@ -186,7 +186,10 @@ var Base = {
if (options.postTriggerInclude) {
headers[Constants.HttpHeaders.PostTriggerInclude] = options.postTriggerInclude.constructor === Array? options.postTriggerInclude.join(","): options.postTriggerInclude;
}
-
+
+ if (options.offerType != null) {
+ headers[Constants.HttpHeaders.OfferType] = options.offerType;
+ }
if (options.maxItemCount) {
headers[Constants.HttpHeaders.PageSize] = options.maxItemCount;
diff --git a/core_sdk/lib/constants.js b/core_sdk/lib/constants.js
index b08ad4f..3141469 100644
--- a/core_sdk/lib/constants.js
+++ b/core_sdk/lib/constants.js
@@ -111,21 +111,19 @@ var Constants = {
CollectionCurrentUsageInMb: "x-ms-collection-usage-mb",
MaxMediaStorageUsageInMB: "x-ms-max-media-storage-usage-mb",
CurrentMediaStorageUsageInMB: "x-ms-media-storage-usage-mb",
- DatabaseAccountCapacityUnitsConsumed: "x-ms-database-capacity-units-consumed",
- DatabaseAccountCapacityUnitsProvisioned: "x-ms-database-capacity-units-provisioned",
- DatabaseAccountConsumedDocumentStorageInMB: "x-ms-databaseaccount-consumed-mb",
- DatabaseAccountReservedDocumentStorageInMB: "x-ms-databaseaccount-reserved-mb",
- DatabaseAccountProvisionedDocumentStorageInMB: "x-ms-databaseaccount-provisioned-mb",
- RequestCharge: "x-ms-request-charge"
+ RequestCharge: "x-ms-request-charge",
+
+ // Offer header
+ OfferType: "x-ms-offer-type"
},
- CurrentVersion: "2014-08-21",
+ CurrentVersion: "2015-04-08",
- UserAgent: "documentdb-nodejs-sdk-0.9.3"
+ UserAgent: "documentdb-nodejs-sdk-1.0.0"
}
//SCRIPT END
if (typeof exports !== "undefined") {
module.exports = Constants;
-}
+}
\ No newline at end of file
diff --git a/core_sdk/lib/documentclient.js b/core_sdk/lib/documentclient.js
index 7b8b69a..b86f5f1 100644
--- a/core_sdk/lib/documentclient.js
+++ b/core_sdk/lib/documentclient.js
@@ -537,7 +537,7 @@ var DocumentClient = Base.defineClass(
this.read(path, "conflicts", resourceInfo.objectBody.id, undefined, options, callback);
},
- /** lLsts all databases.
+ /** Lists all databases.
* @memberof DocumentClient
* @instance
* @param {FeedOptions} [options] - The feed options.
@@ -1100,26 +1100,6 @@ var DocumentClient = Base.defineClass(
this.deleteResource(path, "conflicts", resourceInfo.objectBody.id, undefined, options, callback);
},
- /**
- * Replace the database object.
- * @memberof DocumentClient
- * @instance
- * @param {string} databaseLink - The self-link of the database.
- * @param {object} db - Represent the new database body.
- * @param {RequestOptions} [options] - The request options.
- * @param {RequestCallback} callback - The callback for the request.
- */
- replaceDatabase: function (databaseLink, db, options, callback) {
- if (!callback) {
- callback = options;
- options = {};
- }
-
- var path = "/" + databaseLink;
- var resourceInfo = Base.parsePath(databaseLink);
- this.replace(db, path, "dbs", resourceInfo.objectBody.id, undefined, options, callback);
- },
-
/**
* Replace the document object.
* @memberof DocumentClient
@@ -1366,7 +1346,66 @@ var DocumentClient = Base.defineClass(
this.post(urlConnection, path, params, headers, callback);
},
-
+
+ /**
+ * Replace the offer object.
+ * @memberof DocumentClient
+ * @instance
+ * @param {string} offerLink - The self-link of the offer.
+ * @param {object} offer - Represent the new offer body.
+ * @param {RequestCallback} callback - The callback for the request.
+ */
+ replaceOffer: function (offerLink, offer, callback) {
+ var path = "/" + offerLink;
+ var resourceInfo = Base.parsePath(offerLink);
+ this.replace(offer, path, "offers", resourceInfo.objectBody.id, undefined, {}, callback);
+ },
+
+ /** Reads an offer.
+ * @memberof DocumentClient
+ * @instance
+ * @param {string} offerLink - The self-link of the offer.
+ * @param {RequestCallback} callback - The callback for the request.
+ */
+ readOffer: function (offerLink, callback) {
+ var path = "/" + offerLink;
+ var resourceInfo = Base.parsePath(offerLink);
+ this.read(path, "offers", resourceInfo.objectBody.id, undefined, {}, callback);
+ },
+
+ /** Lists all offers.
+ * @memberof DocumentClient
+ * @instance
+ * @param {FeedOptions} [options] - The feed options.
+ * @returns {QueryIterator} - An instance of queryIterator to handle reading feed.
+ */
+ readOffers: function (options) {
+ return this.queryOffers(undefined, options);
+ },
+
+ /** Lists all offers that satisfy a query.
+ * @memberof DocumentClient
+ * @instance
+ * @param {SqlQuerySpec | string} query - A SQL query.
+ * @param {FeedOptions} [options] - The feed options.
+ * @returns {QueryIterator} - An instance of QueryIterator to handle reading feed.
+ */
+ queryOffers: function (query, options) {
+ var that = this;
+ return new QueryIterator(this, query, options, function (options, callback) {
+ that.queryFeed.call(that,
+ that,
+ "/offers",
+ "offers",
+ "",
+ function (result) { return result.Offers; },
+ function (parent, body) { return body; },
+ query,
+ options,
+ callback);
+ });
+ },
+
/** Gets the Database account information.
* @memberof DocumentClient
* @instance
@@ -1382,11 +1421,6 @@ var DocumentClient = Base.defineClass(
databaseAccount.MediaLink = "/media/";
databaseAccount.MaxMediaStorageUsageInMB = headers[Constants.HttpHeaders.MaxMediaStorageUsageInMB];
databaseAccount.CurrentMediaStorageUsageInMB = headers[Constants.HttpHeaders.CurrentMediaStorageUsageInMB];
- databaseAccount.CapacityUnitsConsumed = headers[Constants.HttpHeaders.DatabaseAccountCapacityUnitsConsumed];
- databaseAccount.CapacityUnitsProvisioned = headers[Constants.HttpHeaders.DatabaseAccountCapacityUnitsProvisioned];
- databaseAccount.ConsumedDocumentStorageInMB = headers[Constants.HttpHeaders.DatabaseAccountConsumedDocumentStorageInMB];
- databaseAccount.ReservedDocumentStorageInMB = headers[Constants.HttpHeaders.DatabaseAccountReservedDocumentStorageInMB];
- databaseAccount.ProvisionedDocumentStorageInMB = headers[Constants.HttpHeaders.DatabaseAccountProvisionedDocumentStorageInMB];
databaseAccount.ConsistencyPolicy = result.userConsistencyPolicy;
callback(undefined, databaseAccount, headers);
@@ -1519,6 +1553,7 @@ var DocumentClient = Base.defineClass(
* @property {string} [consistencyLevel] - Consistency level required by the client.
* @property {string} [sessionToken] - Token for use with Session consistency.
* @property {number} [resourceTokenExpirySeconds]- Expiry time (in seconds) for resource token associated with permission (applicable only for requests on permissions).
+ * @property {string} [offerType] - Offer type when creating document collections.
*/
/**
diff --git a/core_sdk/lib/documents.js b/core_sdk/lib/documents.js
index 244add7..705254c 100644
--- a/core_sdk/lib/documents.js
+++ b/core_sdk/lib/documents.js
@@ -17,16 +17,6 @@ var AzureDocuments = Base.defineClass(null, null,
* @property {number} MaxMediaStorageUsageInMB - Attachment content (media) storage quota in MBs ( Retrieved from gateway ).
* @property {number} CurrentMediaStorageUsageInMB -
Current attachment content (media) usage in MBs (Retrieved from gateway )
Value is returned from cached information updated periodically and is not guaranteed to be real time.
- * @property {number} CapacityUnitsConsumed - The number is capacity units database account is currently consuming.
- Value is returned from cached information updated periodically and is not guaranteed to be real time.
- * @property {number} CapacityUnitsProvisioned - The number of provisioned capacity units for the database account.
- Value is returned from cached information updated periodically and is not guaranteed to be real time.
- * @property {number} ConsumedDocumentStorageInMB - The cumulative sum of current sizes of created collection in MB.
- Value is returned from cached information updated periodically and is not guaranteed to be real time.
- * @property {number} ReservedDocumentStorageInMB - The cumulative sum of maximum sizes of created collection in MB.
- Value is returned from cached information updated periodically and is not guaranteed to be real time.
- * @property {number} ProvisionedDocumentStorageInMB - The provisioned documented storage capacity for the database account.
- Value is returned from cached information updated periodically and is not guaranteed to be real time.
* @property {object} ConsistencyPolicy - Gets the UserConsistencyPolicy settings.
* @property {string} ConsistencyPolicy.defaultConsistencyLevel - The default consistency level and it's of type {@link ConsistencyLevel}.
* @property {number} ConsistencyPolicy.maxStalenessPrefix - In bounded staleness consistency, the maximum allowed staleness in terms difference in sequence numbers (aka version).
@@ -61,20 +51,6 @@ var AzureDocuments = Base.defineClass(null, null,
enumerable: true
});
- Object.defineProperty(this, "CapacityUnitsConsumed", {
- value: 0,
- writable: true,
- configurable: true,
- enumerable: true
- });
-
- Object.defineProperty(this, "CapacityUnitsProvisioned", {
- value: 0,
- writable: true,
- configurable: true,
- enumerable: true
- });
-
Object.defineProperty(this, "ConsumedDocumentStorageInMB", {
value: 0,
writable: true,
@@ -155,14 +131,8 @@ var AzureDocuments = Base.defineClass(null, null,
Range: "Range",
}),
- Protocol : Object.freeze({
- Tcp: 1,
- Https: 2,
- }),
-
ConnectionMode : Object.freeze({
- Direct: 0,
- Gateway: 1,
+ Gateway: 0,
}),
QueryCompatibilityMode: Object.freeze({
@@ -250,20 +220,6 @@ var AzureDocuments = Base.defineClass(null, null,
* @property {number} RequestTimeout - Request timeout (time to wait for response from network peer). Represented in milliseconds.
*/
ConnectionPolicy : Base.defineClass(function() {
- Object.defineProperty(this, "_defaultMaxConnections", {
- value: 20,
- writable: true,
- configurable: true,
- enumerable: false // this is the default value, so it could be excluded during JSON.stringify
- });
-
- Object.defineProperty(this, "_defaultMaxConcurrentCallsPerConnection", {
- value: 50,
- writable: true,
- configurable: true,
- enumerable: false // this is the default value, so it could be excluded during JSON.stringify
- });
-
Object.defineProperty(this, "_defaultRequestTimeout", {
value: 60000,
writable: true,
@@ -280,12 +236,9 @@ var AzureDocuments = Base.defineClass(null, null,
});
this.ConnectionMode = AzureDocuments.ConnectionMode.Gateway;
- this.ConnectionProtocol = AzureDocuments.Protocol.Https;
this.MediaReadMode = AzureDocuments.MediaReadMode.Buffered;
this.MediaRequestTimeout = this._defaultMediaRequestTimeout;
this.RequestTimeout = this._defaultRequestTimeout;
- this.MaxCallsPerConnections = this._defaultMaxConcurrentCallsPerConnection; // for direct connectivity
- this.MaxConnections = this._defaultMaxConnections; // for direct connectivity
})
}
);
diff --git a/core_sdk/lib/request.js b/core_sdk/lib/request.js
index 3686a6e..08d80da 100644
--- a/core_sdk/lib/request.js
+++ b/core_sdk/lib/request.js
@@ -14,7 +14,8 @@ var Documents = require('./documents')
https.globalAgent.maxSockets = 10000;
// setting security protocol for the global agent.
https.globalAgent.options.secureProtocol = "TLSv1_client_method";
-
+// Keeping the connection alive to reuse the sockets.
+https.globalAgent.keepAlive = true;
//----------------------------------------------------------------------------
// Utility methods
//
@@ -123,7 +124,7 @@ var RequestHandler = {
requestOptions.method = method;
requestOptions.path = path;
requestOptions.headers = headers;
-
+
if(queryParams) {
requestOptions.path += "?" + querystring.stringify(queryParams);
}
diff --git a/core_sdk/package.json b/core_sdk/package.json
index c437f28..5803919 100644
--- a/core_sdk/package.json
+++ b/core_sdk/package.json
@@ -9,7 +9,7 @@
"database",
"cloud"
],
- "version": "0.9.3",
+ "version": "1.0.0",
"author": "Microsoft Corporation",
"main": "./index.js",
"engine": {
diff --git a/core_sdk/test/test.js b/core_sdk/test/test.js
index 91868f8..831e239 100644
--- a/core_sdk/test/test.js
+++ b/core_sdk/test/test.js
@@ -4,7 +4,8 @@
'use strict';
-var DocumentDBClient = require("documentdb").DocumentClient
+var Base = require("documentdb").Base
+ , DocumentDBClient = require("documentdb").DocumentClient
, DocumentBase = require("documentdb").DocumentBase
, assert = require("assert")
, testConfig = require('./_testConfig')
@@ -76,28 +77,18 @@ describe("NodeJS CRUD Tests", function(){
]
};
client.queryDatabases(querySpec).toArray(function (err, results) {
- assert(results.length > 0, "number of results for the query should be > 0");
- //replace database
- db.id = "replaced db";
- client.replaceDatabase(db._self, db, function(error, replacedDb){
- assert.equal(replacedDb.id, "replaced db", "Db name should change");
- assert.equal(db.id, replacedDb.id, "Db id should stay the same");
- // read database
- client.readDatabase(replacedDb._self, function(err, database) {
- assert.equal(err, undefined, "readDatabase should work successfully");
- assert.equal(replacedDb.id, database.id);
- // delete database
- client.deleteDatabase(replacedDb._self, function(err, res){
- // read database after deletion
- client.readDatabase(db._self, function(err, database) {
- var notFoundErrorCode = 404;
- assert.equal(err.code, notFoundErrorCode, "response should return error code 404");
- done();
- });
- });
- });
- });
- });
+ assert(results.length > 0, "number of results for the query should be > 0");
+
+ // delete database
+ client.deleteDatabase(db._self, function(err, res){
+ // read database after deletion
+ client.readDatabase(db._self, function(err, database) {
+ var notFoundErrorCode = 404;
+ assert.equal(err.code, notFoundErrorCode, "response should return error code 404");
+ done();
+ });
+ });
+ });
});
});
});
@@ -1151,7 +1142,153 @@ describe("NodeJS CRUD Tests", function(){
});
});
});
-
+
+ describe("Validate Offer CRUD", function () {
+ var validateOfferResponseBody = function (offer, expectedCollLink, expectedOfferType) {
+ assert(offer.id, "Id cannot be null");
+ assert(offer._rid, "Resource Id (Rid) cannot be null");
+ assert(offer._self, "Self Link cannot be null");
+ assert(offer.resource, "Resource Link cannot be null");
+ assert(offer._self.indexOf(offer.id) != -1, "Offer id not contained in offer self link.");
+ assert.equal(expectedCollLink.replace(/^\/|\/$/g, ''), offer.resource.replace(/^\/|\/$/g, ''));
+ if (expectedOfferType) {
+ assert.equal(expectedOfferType, offer.offerType);
+ }
+ }
+
+ it("[nativeApi] Should do offer read and query operations successfully", function (done) {
+ var client = new DocumentDBClient(host, { masterKey: masterKey });
+ // create database
+ client.createDatabase({ id: "sample database" }, function (err, db) {
+ assert(err === undefined);
+ // create collection
+ client.createCollection(db._self, { id: "sample collection" }, function (err, collection) {
+ assert(err === undefined);
+ client.readOffers({}).toArray(function (err, offers) {
+ assert(err === undefined);
+ assert.equal(offers.length, 1);
+ var expectedOffer = offers[0];
+ validateOfferResponseBody(expectedOffer, collection._self, undefined);
+ // Read the offer
+ client.readOffer(expectedOffer._self, function (err, readOffer) {
+ assert(err === undefined);
+ validateOfferResponseBody(readOffer, collection._self, undefined);
+ // Check if the read offer is what we expected.
+ assert.equal(expectedOffer.id, readOffer.id);
+ assert.equal(expectedOffer._rid, readOffer._rid);
+ assert.equal(expectedOffer._self, readOffer._self);
+ assert.equal(expectedOffer.resource, readOffer.resource);
+ // Read offer with a bad offer link.
+ var badLink = expectedOffer._self.substring(0, expectedOffer._self.length - 1) + 'x/';
+ client.readOffer(badLink, function (err, _) {
+ var notFoundErrorCode = 400;
+ assert.equal(err.code, notFoundErrorCode, "response should return error code 404");
+
+ // Query for offer.
+ var querySpec = {
+ query: 'select * FROM root r WHERE r.id=@id',
+ parameters: [
+ {
+ name: '@id',
+ value: expectedOffer.id
+ }
+ ]
+ };
+ client.queryOffers(querySpec).toArray(function (err, offers) {
+ assert(err === undefined);
+ assert.equal(offers.length, 1);
+ var oneOffer = offers[0];
+ validateOfferResponseBody(oneOffer, collection._self, undefined);
+ // Now delete the collection.
+ client.deleteCollection(collection._self, function (err, _) {
+ // read offer after deleting collection.
+ client.readOffer(expectedOffer._self, function (err, _) {
+ var notFoundErrorCode = 404;
+ assert.equal(err.code, notFoundErrorCode, "response should return error code 404");
+ done();
+ });
+ });
+ });
+ })
+ });
+ });
+ });
+ });
+ });
+
+ it("[nativeApi] Should do offer replace operations successfully", function (done) {
+ var client = new DocumentDBClient(host, { masterKey: masterKey });
+ // create database
+ client.createDatabase({ id: "sample database" }, function (err, db) {
+ assert(err === undefined);
+ // create collection
+ client.createCollection(db._self, { id: "sample collection" }, function (err, collection) {
+ assert(err === undefined);
+ client.readOffers().toArray(function (err, offers) {
+ assert(err === undefined);
+ assert.equal(offers.length, 1);
+ var expectedOffer = offers[0];
+ validateOfferResponseBody(expectedOffer, collection._self, undefined);
+ // Replace the offer.
+ var offerToReplace = Base.extend({}, expectedOffer);
+ offerToReplace.offerType = "S2";
+ client.replaceOffer(offerToReplace._self, offerToReplace, function (err, replacedOffer) {
+ assert(err === undefined);
+ validateOfferResponseBody(replacedOffer, collection._self, "S2");
+ // Check if the replaced offer is what we expect.
+ assert.equal(replacedOffer.id, offerToReplace.id);
+ assert.equal(replacedOffer._rid, offerToReplace._rid);
+ assert.equal(replacedOffer._self, offerToReplace._self);
+ assert.equal(replacedOffer.resource, offerToReplace.resource);
+ // Replace an offer with a bad id.
+ var offerBadId = Base.extend({}, offerToReplace);
+ offerBadId._rid = "NotAllowed";
+ client.replaceOffer(offerBadId._self, offerBadId, function (err, _) {
+ var badRequestErrorCode = 400;
+ assert.equal(err.code, badRequestErrorCode);
+ // Replace an offer with a bad rid.
+ var offerBadRid = Base.extend({}, offerToReplace);
+ offerBadRid._rid = "InvalidRid";
+ client.replaceOffer(offerBadRid._self, offerBadRid, function (err, _) {
+ var badRequestErrorCode = 400;
+ assert.equal(err.code, badRequestErrorCode);
+ // Replace an offer with null id and rid.
+ var offerNullId = Base.extend({}, offerToReplace);
+ offerNullId.id = undefined;
+ offerNullId._rid = undefined;
+ client.replaceOffer(offerNullId._self, offerNullId, function (err, _) {
+ var badRequestErrorCode = 400;
+ assert.equal(err.code, badRequestErrorCode);
+ done();
+ });
+ });
+ });
+ });
+ });
+ });
+ });
+ });
+
+ it("[nativeApi] Should create collection with specified offer type successfully", function (done) {
+ var client = new DocumentDBClient(host, { masterKey: masterKey });
+ // create database
+ client.createDatabase({ id: "sample database" }, function (err, db) {
+ assert(err === undefined);
+ // create collection
+ client.createCollection(db._self, { id: "sample collection" }, { offerType: "S2" }, function (err, collection) {
+ assert(err === undefined);
+ client.readOffers().toArray(function (err, offers) {
+ assert(err === undefined);
+ assert.equal(offers.length, 1);
+ var expectedOffer = offers[0];
+ assert.equal(expectedOffer.offerType, "S2");
+ done();
+ });
+ });
+ });
+ });
+ });
+
describe("validate database account functionality", function () {
it("[nativeApi] Should get database account successfully", function (done) {
var client = new DocumentDBClient(host, { masterKey: masterKey });
@@ -1160,11 +1297,6 @@ describe("NodeJS CRUD Tests", function(){
assert.equal(databaseAccount.MediaLink , "/media/");
assert.equal(databaseAccount.MaxMediaStorageUsageInMB, headers["x-ms-max-media-storage-usage-mb"]);
assert.equal(databaseAccount.CurrentMediaStorageUsageInMB, headers["x-ms-media-storage-usage-mb"]);
- assert.equal(databaseAccount.CapacityUnitsConsumed, headers["x-ms-database-capacity-units-consumed"]);
- assert.equal(databaseAccount.CapacityUnitsProvisioned, headers["x-ms-database-capacity-units-provisioned"]);
- assert.equal(databaseAccount.ConsumedDocumentStorageInMB, headers["x-ms-databaseaccount-consumed-mb"]);
- assert.equal(databaseAccount.ReservedDocumentStorageInMB, headers["x-ms-databaseaccount-reserved-mb"]);
- assert.equal(databaseAccount.ProvisionedDocumentStorageInMB, headers["x-ms-databaseaccount-provisioned-mb"]);
assert(databaseAccount.ConsistencyPolicy.defaultConsistencyLevel != undefined);
done();
});
diff --git a/q_promises_sdk/documentclientwrapper.js b/q_promises_sdk/documentclientwrapper.js
index 5292b79..5a8e108 100644
--- a/q_promises_sdk/documentclientwrapper.js
+++ b/q_promises_sdk/documentclientwrapper.js
@@ -43,27 +43,39 @@ function deleteOperationPromise(contextObject, functionName, resourceLink, optio
function replaceOperationPromise(contextObject, functionName, resourceLink, newResource, options){
var deferred = Q.defer();
- contextObject[functionName](resourceLink, newResource, options, function (error, resource, responseHeaders) {
+ var callback = function (error, resource, responseHeaders) {
if (error) {
deferred.reject(error);
} else {
deferred.resolve({resource: resource, headers: responseHeaders});
}
- });
+ }
+
+ if (options === undefined) {
+ contextObject[functionName](resourceLink, newResource, callback);
+ } else {
+ contextObject[functionName](resourceLink, newResource, options, callback);
+ }
return deferred.promise;
}
function readOperationPromise(contextObject, functionName, resourceLink, options){
var deferred = Q.defer();
- contextObject[functionName](resourceLink, options, function (error, resource, responseHeaders) {
+ var callback = function (error, resource, responseHeaders) {
if (error) {
deferred.reject(error);
} else {
deferred.resolve({resource: resource, headers: responseHeaders});
}
- });
-
+ }
+
+ if (options === undefined) {
+ contextObject[functionName](resourceLink, callback);
+ } else {
+ contextObject[functionName](resourceLink, options, callback);
+ }
+
return deferred.promise;
}
@@ -272,20 +284,6 @@ var DocumentClientWrapper = Base.defineClass(
return new QueryIteratorWrapper(this._innerDocumentclient.queryUsers(databaseLink, query, options));
},
- /**
- * Replace the database object.
- * @memberof DocumentClientWrapper
- * @instance
- * @param {string} databaseLink - The self-link of the database.
- * @param {Database} db - Represent the new database body.
- * @param {RequestOptions} [options] - The request options.
- * @Returns {Object} A promise object for the request completion.
- The onFulfilled callback takes a parameter of type {@link ResourceResponse} and the OnError callback takes a parameter of type {@link ResponseError}
- */
- replaceDatabaseAsync: function (databaseLink, db, options) {
- return replaceOperationPromise(this._innerDocumentclient, "replaceDatabase", databaseLink, db, options);
- },
-
/**
* Delete the database object.
* @memberof DocumentClientWrapper
@@ -963,7 +961,55 @@ var DocumentClientWrapper = Base.defineClass(
*/
deleteConflictAsync: function(conflictLink, options) {
return deleteOperationPromise(this._innerDocumentclient, "deleteConflict", conflictLink, options);
- }
+ },
+
+ /**
+ * Replace the Offer object.
+ * @memberof DocumentClientWrapper
+ * @instance
+ * @param {string} offerLink - The self-link of the offer.
+ * @param {object} offer - Represent the new offer body.
+ * @Returns {Object} A promise object for the request completion.
+ The onFulfilled callback takes a parameter of type {@link ResourceResponse} and the OnError callback takes a parameter of type {@link ResponseError}
+ */
+ replaceOfferAsync: function(offerLink, offer) {
+ return replaceOperationPromise(this._innerDocumentclient, "replaceOffer", offerLink, offer, undefined);
+ },
+
+ /**
+ * Reads an offer object.
+ * @memberof DocumentClientWrapper
+ * @instance
+ * @param {string} offerLink - The self-link of the offer.
+ * @Returns {Object} A promise object for the request completion.
+ The onFulfilled callback takes a parameter of type {@link ResourceResponse} and the OnError callback takes a parameter of type {@link ResponseError}
+ */
+ readOfferAsync: function (offerLink) {
+ return readOperationPromise(this._innerDocumentclient, "readOffer", offerLink, undefined);
+ },
+
+ /**
+ * Get all offers for this database.
+ * @memberof DocumentClientWrapper
+ * @instance
+ * @param {FeedOptions} [options] - The feed options
+ * @returns {QueryIterator} - An instance of queryIterator to handle reading feed.
+ */
+ readOffers: function (options) {
+ return new QueryIteratorWrapper(this._innerDocumentclient.readOffers(options));
+ },
+
+ /**
+ * Query offers for this database.
+ * @memberof DocumentClientWrapper
+ * @instance
+ * @param {SqlQuerySpec | string} query - A SQL query.
+ * @param {FeedOptions} [options] - Represents the feed options.
+ * @returns {QueryIterator} - An instance of queryIterator to handle reading feed.
+ */
+ queryOffers: function (query, options) {
+ return new QueryIteratorWrapper(this._innerDocumentclient.queryOffers(query, options));
+ },
}
);
diff --git a/q_promises_sdk/package.json b/q_promises_sdk/package.json
index f002994..da0fa9e 100644
--- a/q_promises_sdk/package.json
+++ b/q_promises_sdk/package.json
@@ -10,7 +10,7 @@
"cloud",
"promises"
],
- "version": "0.9.3",
+ "version": "1.0.0",
"author": "Microsoft Corporation",
"main": "./documentclientwrapper.js",
"engine": {
diff --git a/q_promises_sdk/test/_testConfig.js b/q_promises_sdk/test/_testConfig.js
index f24a4b4..b4c4b8b 100644
--- a/q_promises_sdk/test/_testConfig.js
+++ b/q_promises_sdk/test/_testConfig.js
@@ -1,5 +1,5 @@
-var host = "MyHost";
-var key = "MyKey";
+var masterKey = "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
+var host = "https://localhost:443";
exports.host = host;
-exports.masterKey = key;
+exports.masterKey = masterKey;