Hide plugins using internal flag (#348)
This commit is contained in:
Родитель
88ceb27541
Коммит
29416c5343
|
@ -41,5 +41,6 @@ export interface CosmosClientOptions {
|
|||
* Use an agent such as https://github.com/TooTallNate/node-proxy-agent if you need to connect to Cosmos via a proxy
|
||||
*/
|
||||
agent?: Agent;
|
||||
/** @internal */
|
||||
plugins?: PluginConfig[];
|
||||
}
|
||||
|
|
|
@ -17,7 +17,8 @@
|
|||
"resolveJsonModule": true,
|
||||
"composite": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true
|
||||
"noUnusedParameters": true,
|
||||
"stripInternal": true
|
||||
},
|
||||
"include": ["./**/*"]
|
||||
}
|
||||
|
|
|
@ -1,26 +1,29 @@
|
|||
import assert from "assert";
|
||||
import { CosmosClient, Constants, Container } from "../../dist-esm";
|
||||
import { CosmosClient, Constants, Container, PluginConfig, CosmosClientOptions } from "../../dist-esm";
|
||||
import { removeAllDatabases, getTestContainer } from "../common/TestHelpers";
|
||||
import { endpoint, masterKey } from "../common/_testConfig";
|
||||
import { ResourceType, HTTPMethod, StatusCodes } from "../../dist-esm/common";
|
||||
|
||||
const legacyClient = new CosmosClient({
|
||||
endpoint,
|
||||
key: masterKey,
|
||||
plugins: [
|
||||
{
|
||||
on: "request",
|
||||
plugin: (context, next) => {
|
||||
// Intercepts the API request to create a non-partitioned container using an old API version
|
||||
if (context.resourceType === ResourceType.container && context.method === HTTPMethod.post) {
|
||||
context.body = JSON.stringify({ id: JSON.parse(context.body).id });
|
||||
}
|
||||
context.headers[Constants.HttpHeaders.Version] = "2018-06-18";
|
||||
return next(context);
|
||||
const plugins: PluginConfig[] = [
|
||||
{
|
||||
on: "request",
|
||||
plugin: (context, next) => {
|
||||
// Intercepts the API request to create a non-partitioned container using an old API version
|
||||
if (context.resourceType === ResourceType.container && context.method === HTTPMethod.post) {
|
||||
context.body = JSON.stringify({ id: JSON.parse(context.body).id });
|
||||
}
|
||||
context.headers[Constants.HttpHeaders.Version] = "2018-06-18";
|
||||
return next(context);
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
];
|
||||
|
||||
const options: CosmosClientOptions = {
|
||||
endpoint,
|
||||
key: masterKey
|
||||
};
|
||||
|
||||
const legacyClient = new CosmosClient({ ...options, plugins } as any);
|
||||
|
||||
const client = new CosmosClient({
|
||||
endpoint,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { CosmosClient } from "../../dist-esm";
|
||||
import { CosmosClient, CosmosClientOptions } from "../../dist-esm";
|
||||
import { RequestContext } from "../../dist-esm/request/RequestContext";
|
||||
import { Plugin, Next } from "../../dist-esm/plugins/Plugin";
|
||||
import { Plugin, Next, PluginConfig } from "../../dist-esm/plugins/Plugin";
|
||||
|
||||
import * as assert from "assert";
|
||||
|
||||
|
@ -25,16 +25,19 @@ describe("Plugin", function() {
|
|||
return successResponse;
|
||||
};
|
||||
|
||||
const client = new CosmosClient({
|
||||
const options: CosmosClientOptions = {
|
||||
endpoint: "https://faaaaaaaaaaaaake.com",
|
||||
key: "THIS IS A FAKE KEY",
|
||||
plugins: [
|
||||
{
|
||||
on: "request",
|
||||
plugin: sometimesThrow
|
||||
}
|
||||
]
|
||||
});
|
||||
key: "THIS IS A FAKE KEY"
|
||||
};
|
||||
|
||||
const plugins: PluginConfig[] = [
|
||||
{
|
||||
on: "request",
|
||||
plugin: sometimesThrow
|
||||
}
|
||||
];
|
||||
|
||||
const client = new CosmosClient({ ...options, plugins } as any);
|
||||
const response = await client.database("foo").read();
|
||||
assert.equal(requestCount, FAILCOUNT + 1); // Get Database Account + FAILED GET Database + Get Database
|
||||
assert.notEqual(response, undefined);
|
||||
|
@ -59,20 +62,23 @@ describe("Plugin", function() {
|
|||
throw new Error("I always throw!");
|
||||
};
|
||||
|
||||
const client = new CosmosClient({
|
||||
const options: CosmosClientOptions = {
|
||||
endpoint: "https://faaaaaaaaaaaaake.com",
|
||||
key: "THIS IS A FAKE KEY",
|
||||
plugins: [
|
||||
{
|
||||
on: "request",
|
||||
plugin: alwaysThrow // I'll never be called since operation will always succeed.
|
||||
},
|
||||
{
|
||||
on: "operation",
|
||||
plugin: alwaysSucceed
|
||||
}
|
||||
]
|
||||
});
|
||||
key: "THIS IS A FAKE KEY"
|
||||
};
|
||||
|
||||
const plugins: PluginConfig[] = [
|
||||
{
|
||||
on: "request",
|
||||
plugin: alwaysThrow // I'll never be called since operation will always succeed.
|
||||
},
|
||||
{
|
||||
on: "operation",
|
||||
plugin: alwaysSucceed
|
||||
}
|
||||
];
|
||||
|
||||
const client = new CosmosClient({ ...options, plugins } as any);
|
||||
const response = await client.database("foo").read();
|
||||
assert.equal(requestCount, 2); // Get Database Account + Get Database
|
||||
assert.notEqual(response, undefined);
|
||||
|
@ -103,20 +109,23 @@ describe("Plugin", function() {
|
|||
return response;
|
||||
};
|
||||
|
||||
const client = new CosmosClient({
|
||||
const options: CosmosClientOptions = {
|
||||
endpoint: "https://faaaaaaaaaaaaake.com",
|
||||
key: "THIS IS A FAKE KEY",
|
||||
plugins: [
|
||||
{
|
||||
on: "operation",
|
||||
plugin: counts // I'll never be called since operation will always succeed.
|
||||
},
|
||||
{
|
||||
on: "operation",
|
||||
plugin: alwaysSucceed
|
||||
}
|
||||
]
|
||||
});
|
||||
key: "THIS IS A FAKE KEY"
|
||||
};
|
||||
|
||||
const plugins: PluginConfig[] = [
|
||||
{
|
||||
on: "operation",
|
||||
plugin: counts // I'll never be called since operation will always succeed.
|
||||
},
|
||||
{
|
||||
on: "operation",
|
||||
plugin: alwaysSucceed
|
||||
}
|
||||
];
|
||||
|
||||
const client = new CosmosClient({ ...options, plugins } as any);
|
||||
const response = await client.database("foo").read();
|
||||
assert.equal(requestCount, 2); // Get Database Account + Get Database
|
||||
assert.equal(responseCount, 2); // Get Database Account + Get Database
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { Container } from "../../dist-esm/client";
|
||||
import { bulkInsertItems, getTestContainer, removeAllDatabases } from "../common/TestHelpers";
|
||||
import { Constants, CosmosClient, PluginOn } from "../../dist-esm";
|
||||
import { Constants, CosmosClient, PluginOn, CosmosClientOptions, PluginConfig } from "../../dist-esm";
|
||||
import { masterKey, endpoint } from "../common/_testConfig";
|
||||
import { SubStatusCodes } from "../../dist-esm/common";
|
||||
import assert from "assert";
|
||||
|
@ -41,29 +41,30 @@ describe("Partition Splits", () => {
|
|||
it("handles one split part way through iteration", async () => {
|
||||
let hasSplit = false;
|
||||
const partitionKeyRanges = new Set();
|
||||
const client = new CosmosClient({
|
||||
endpoint,
|
||||
key: masterKey,
|
||||
plugins: [
|
||||
{
|
||||
on: PluginOn.request,
|
||||
plugin: async (context, next) => {
|
||||
const partitionKeyRangeId = context.headers[Constants.HttpHeaders.PartitionKeyRangeID];
|
||||
if (partitionKeyRanges.has(partitionKeyRangeId) && hasSplit === false) {
|
||||
hasSplit = true;
|
||||
const error = new Error("Fake Partition Split") as any;
|
||||
error.code = 410;
|
||||
error.substatus = SubStatusCodes.PartitionKeyRangeGone;
|
||||
throw error;
|
||||
}
|
||||
if (partitionKeyRangeId) {
|
||||
partitionKeyRanges.add(partitionKeyRangeId);
|
||||
}
|
||||
return next(context);
|
||||
const options: CosmosClientOptions = { endpoint, key: masterKey };
|
||||
const plugins: PluginConfig[] = [
|
||||
{
|
||||
on: PluginOn.request,
|
||||
plugin: async (context, next) => {
|
||||
const partitionKeyRangeId = context.headers[Constants.HttpHeaders.PartitionKeyRangeID];
|
||||
if (partitionKeyRanges.has(partitionKeyRangeId) && hasSplit === false) {
|
||||
hasSplit = true;
|
||||
const error = new Error("Fake Partition Split") as any;
|
||||
error.code = 410;
|
||||
error.substatus = SubStatusCodes.PartitionKeyRangeGone;
|
||||
throw error;
|
||||
}
|
||||
if (partitionKeyRangeId) {
|
||||
partitionKeyRanges.add(partitionKeyRangeId);
|
||||
}
|
||||
return next(context);
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
];
|
||||
const client = new CosmosClient({
|
||||
...options,
|
||||
plugins
|
||||
} as any);
|
||||
const { resources } = await client
|
||||
.database(container.database.id)
|
||||
.container(container.id)
|
||||
|
|
Загрузка…
Ссылка в новой задаче