Socket
Socket
Sign inDemoInstall

@kubernetes/client-node

Package Overview
Dependencies
Maintainers
2
Versions
59
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@kubernetes/client-node - npm Package Compare versions

Comparing version 0.10.1 to 0.10.2

dist/informer.d.ts

15

dist/cache.d.ts

@@ -0,1 +1,2 @@

import { Informer, ListPromise, ObjectCallback } from './informer';
import { KubernetesObject } from './types';

@@ -7,4 +8,3 @@ import { Watch } from './watch';

}
export declare type ListCallback<T extends KubernetesObject> = (list: T[]) => void;
export declare class ListWatch<T extends KubernetesObject> implements ObjectCache<T> {
export declare class ListWatch<T extends KubernetesObject> implements ObjectCache<T>, Informer<T> {
private readonly path;

@@ -15,10 +15,15 @@ private readonly watch;

private readonly indexCache;
constructor(path: string, watch: Watch, listFn: (callback: ListCallback<T>) => void);
private readonly callbackCache;
constructor(path: string, watch: Watch, listFn: ListPromise<T>, autoStart?: boolean);
start(): void;
on(verb: string, cb: ObjectCallback<T>): void;
get(name: string, namespace?: string): T | undefined;
list(namespace?: string | undefined): ReadonlyArray<T>;
private doneHandler;
private addOrUpdateItems;
private indexObj;
private watchHandler;
}
export declare function addOrUpdateObject<T extends KubernetesObject>(objects: T[], obj: T): void;
export declare function deleteObject<T extends KubernetesObject>(objects: T[], obj: T): void;
export declare function deleteItems<T extends KubernetesObject>(oldObjects: T[], newObjects: T[], deleteCallback?: Array<ObjectCallback<T>>): T[];
export declare function addOrUpdateObject<T extends KubernetesObject>(objects: T[], obj: T, addCallback?: Array<ObjectCallback<T>>, updateCallback?: Array<ObjectCallback<T>>): void;
export declare function deleteObject<T extends KubernetesObject>(objects: T[], obj: T, deleteCallback?: Array<ObjectCallback<T>>): void;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const informer_1 = require("./informer");
class ListWatch {
constructor(path, watch, listFn) {
constructor(path, watch, listFn, autoStart = true) {
this.path = path;

@@ -10,6 +12,21 @@ this.watch = watch;

this.indexCache = {};
this.callbackCache = {};
this.watch = watch;
this.listFn = listFn;
if (autoStart) {
this.doneHandler(null);
}
}
start() {
this.doneHandler(null);
}
on(verb, cb) {
if (verb !== informer_1.ADD && verb !== informer_1.UPDATE && verb !== informer_1.DELETE) {
throw new Error(`Unknown verb: ${verb}`);
}
if (!this.callbackCache[verb]) {
this.callbackCache[verb] = [];
}
this.callbackCache[verb].push(cb);
}
get(name, namespace) {

@@ -27,8 +44,17 @@ return this.objects.find((obj) => {

doneHandler(err) {
this.listFn((result) => {
this.objects = result;
for (const elt of this.objects) {
this.indexObj(elt);
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const promise = this.listFn();
const result = yield promise;
const list = result.body;
deleteItems(this.objects, list.items, this.callbackCache[informer_1.DELETE]);
this.addOrUpdateItems(list.items);
this.watch.watch(this.path, { resourceVersion: list.metadata.resourceVersion }, this.watchHandler.bind(this), this.doneHandler.bind(this));
});
}
addOrUpdateItems(items) {
items.forEach((obj) => {
addOrUpdateObject(this.objects, obj, this.callbackCache[informer_1.ADD], this.callbackCache[informer_1.UPDATE]);
if (obj.metadata.namespace) {
this.indexObj(obj);
}
this.watch.watch(this.path, {}, this.watchHandler.bind(this), this.doneHandler.bind(this));
});

@@ -48,3 +74,3 @@ }

case 'MODIFIED':
addOrUpdateObject(this.objects, obj);
addOrUpdateObject(this.objects, obj, this.callbackCache[informer_1.ADD], this.callbackCache[informer_1.UPDATE]);
if (obj.metadata.namespace) {

@@ -55,3 +81,3 @@ this.indexObj(obj);

case 'DELETED':
deleteObject(this.objects, obj);
deleteObject(this.objects, obj, this.callbackCache[informer_1.DELETE]);
if (obj.metadata.namespace) {

@@ -68,10 +94,29 @@ const namespaceList = this.indexCache[obj.metadata.namespace];

exports.ListWatch = ListWatch;
// external for testing
function deleteItems(oldObjects, newObjects, deleteCallback) {
return oldObjects.filter((obj) => {
if (findKubernetesObject(newObjects, obj) === -1) {
if (deleteCallback) {
deleteCallback.forEach((fn) => fn(obj));
}
return false;
}
return true;
});
}
exports.deleteItems = deleteItems;
// Only public for testing.
function addOrUpdateObject(objects, obj) {
function addOrUpdateObject(objects, obj, addCallback, updateCallback) {
const ix = findKubernetesObject(objects, obj);
if (ix === -1) {
objects.push(obj);
if (addCallback) {
addCallback.forEach((elt) => elt(obj));
}
}
else {
objects[ix] = obj;
if (updateCallback) {
updateCallback.forEach((elt) => elt(obj));
}
}

@@ -89,6 +134,9 @@ }

// Public for testing.
function deleteObject(objects, obj) {
function deleteObject(objects, obj, deleteCallback) {
const ix = findKubernetesObject(objects, obj);
if (ix !== -1) {
objects.splice(ix, 1);
if (deleteCallback) {
deleteCallback.forEach((elt) => elt(obj));
}
}

@@ -95,0 +143,0 @@ }

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const jsonpath = tslib_1.__importStar(require("jsonpath-plus"));
const shelljs = tslib_1.__importStar(require("shelljs"));
const jsonpath = require("jsonpath-plus");
const shelljs = require("shelljs");
class CloudAuth {

@@ -7,0 +6,0 @@ isAuthProvider(user) {

export interface Cluster {
readonly name: string;
readonly caData?: string;
readonly caFile?: string;
caFile?: string;
readonly server: string;

@@ -12,6 +12,6 @@ readonly skipTLSVerify: boolean;

readonly certData?: string;
readonly certFile?: string;
certFile?: string;
readonly exec?: any;
readonly keyData?: string;
readonly keyFile?: string;
keyFile?: string;
readonly authProvider?: any;

@@ -18,0 +18,0 @@ readonly token?: string;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const fs = tslib_1.__importStar(require("fs"));
const u = tslib_1.__importStar(require("underscore"));
const fs = require("fs");
const u = require("underscore");
function newClusters(a) {

@@ -7,0 +6,0 @@ return u.map(a, clusterIterator());

@@ -24,6 +24,2 @@ /// <reference types="node" />

'currentContext': string;
/**
* Root directory for a config file driven config. Used for loading relative cert paths.
*/
'rootDirectory': string;
getContexts(): Context[];

@@ -46,4 +42,9 @@ getClusters(): Cluster[];

loadFromCluster(pathPrefix?: string): void;
mergeConfig(config: KubeConfig): void;
addCluster(cluster: Cluster): void;
addUser(user: User): void;
addContext(ctx: Context): void;
loadFromDefault(): void;
makeApiClient<T extends ApiType>(apiClientType: ApiConstructor<T>): T;
makePathsAbsolute(rootDirectory: string): void;
private getCurrentContextObject;

@@ -57,5 +58,3 @@ private applyHTTPSOptions;

}
export interface ApiConstructor<T extends ApiType> {
new (server: string): T;
}
declare type ApiConstructor<T extends ApiType> = new (server: string) => T;
export declare class Config {

@@ -72,3 +71,4 @@ static SERVICEACCOUNT_ROOT: string;

}
export declare function bufferFromFileOrString(root?: string, file?: string, data?: string): Buffer | null;
export declare function makeAbsolutePath(root: string, file: string): string;
export declare function bufferFromFileOrString(file?: string, data?: string): Buffer | null;
export declare function findHomeDir(): string | null;

@@ -79,1 +79,2 @@ export interface Named {

export declare function findObject<T extends Named>(list: T[], name: string, key: string): T | null;
export {};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const fs = require("fs");

@@ -8,3 +7,3 @@ const path = require("path");

const shelljs = require("shelljs");
const api = tslib_1.__importStar(require("./api"));
const api = require("./api");
const cloud_auth_1 = require("./cloud_auth");

@@ -66,4 +65,5 @@ const config_types_1 = require("./config_types");

loadFromFile(file) {
this.rootDirectory = path.dirname(file);
const rootDirectory = path.dirname(file);
this.loadFromString(fs.readFileSync(file, 'utf8'));
this.makePathsAbsolute(rootDirectory);
}

@@ -152,5 +152,47 @@ applytoHTTPSOptions(opts) {

}
mergeConfig(config) {
this.currentContext = config.currentContext;
config.clusters.forEach((cluster) => {
this.addCluster(cluster);
});
config.users.forEach((user) => {
this.addUser(user);
});
config.contexts.forEach((ctx) => {
this.addContext(ctx);
});
}
addCluster(cluster) {
this.clusters.forEach((c, ix) => {
if (c.name === cluster.name) {
throw new Error(`Duplicate cluster: ${c.name}`);
}
});
this.clusters.push(cluster);
}
addUser(user) {
this.users.forEach((c, ix) => {
if (c.name === user.name) {
throw new Error(`Duplicate user: ${c.name}`);
}
});
this.users.push(user);
}
addContext(ctx) {
this.contexts.forEach((c, ix) => {
if (c.name === ctx.name) {
throw new Error(`Duplicate context: ${c.name}`);
}
});
this.contexts.push(ctx);
}
loadFromDefault() {
if (process.env.KUBECONFIG && process.env.KUBECONFIG.length > 0) {
this.loadFromFile(process.env.KUBECONFIG);
const files = process.env.KUBECONFIG.split(path.delimiter);
this.loadFromFile(files[0]);
for (let i = 1; i < files.length; i++) {
const kc = new KubeConfig();
kc.loadFromFile(files[i]);
this.mergeConfig(kc);
}
return;

@@ -191,2 +233,17 @@ }

}
makePathsAbsolute(rootDirectory) {
this.clusters.forEach((cluster) => {
if (cluster.caFile) {
cluster.caFile = makeAbsolutePath(rootDirectory, cluster.caFile);
}
});
this.users.forEach((user) => {
if (user.certFile) {
user.certFile = makeAbsolutePath(rootDirectory, user.certFile);
}
if (user.keyFile) {
user.keyFile = makeAbsolutePath(rootDirectory, user.keyFile);
}
});
}
getCurrentContextObject() {

@@ -204,13 +261,11 @@ return this.getContextObject(this.currentContext);

}
const ca = cluster != null
? bufferFromFileOrString(this.rootDirectory, cluster.caFile, cluster.caData)
: null;
const ca = cluster != null ? bufferFromFileOrString(cluster.caFile, cluster.caData) : null;
if (ca) {
opts.ca = ca;
}
const cert = bufferFromFileOrString(this.rootDirectory, user.certFile, user.certData);
const cert = bufferFromFileOrString(user.certFile, user.certData);
if (cert) {
opts.cert = cert;
}
const key = bufferFromFileOrString(this.rootDirectory, user.keyFile, user.keyData);
const key = bufferFromFileOrString(user.keyFile, user.keyData);
if (key) {

@@ -285,8 +340,12 @@ opts.key = key;

exports.Config = Config;
function makeAbsolutePath(root, file) {
if (!root || path.isAbsolute(file)) {
return file;
}
return path.join(root, file);
}
exports.makeAbsolutePath = makeAbsolutePath;
// This is public really only for testing.
function bufferFromFileOrString(root, file, data) {
function bufferFromFileOrString(file, data) {
if (file) {
if (!path.isAbsolute(file) && root) {
file = path.join(root, file);
}
return fs.readFileSync(file);

@@ -293,0 +352,0 @@ }

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const shell = tslib_1.__importStar(require("shelljs"));
const shell = require("shelljs");
class ExecAuth {

@@ -6,0 +5,0 @@ constructor() {

@@ -11,1 +11,2 @@ export * from './config';

export * from './log';
export * from './informer';

@@ -13,2 +13,3 @@ "use strict";

tslib_1.__exportStar(require("./log"), exports);
tslib_1.__exportStar(require("./informer"), exports);
//# sourceMappingURL=index.js.map

@@ -7,7 +7,7 @@ import { V1ListMeta, V1ObjectMeta } from './api';

}
export interface KubernetesListObject {
export interface KubernetesListObject<T extends KubernetesObject> {
apiVersion?: string;
kind?: string;
metadata?: V1ListMeta;
items: KubernetesObject;
items: T[];
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const json_stream_1 = tslib_1.__importDefault(require("json-stream"));
const JSONStream = require("json-stream");
const request = require("request");

@@ -39,3 +38,3 @@ class DefaultRequest {

this.config.applyToRequest(requestOptions);
const stream = new json_stream_1.default();
const stream = new JSONStream();
stream.on('data', (data) => callback(data.type, data.object));

@@ -42,0 +41,0 @@ const req = this.requestImpl.webRequest(requestOptions, (error, response, body) => {

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const yaml = tslib_1.__importStar(require("js-yaml"));
const yaml = require("js-yaml");
function loadYaml(data, opts) {

@@ -6,0 +5,0 @@ return yaml.safeLoad(data, opts);

{
"name": "@kubernetes/client-node",
"version": "0.10.1",
"version": "0.10.2",
"description": "NodeJS client for kubernetes",

@@ -50,3 +50,3 @@ "repository": {

"dependencies": {
"@types/js-yaml": "^3.11.2",
"@types/js-yaml": "^3.12.1",
"@types/node": "^10.12.0",

@@ -69,3 +69,3 @@ "@types/request": "^2.47.1",

"@types/chai-as-promised": "^7.1.0",
"@types/mocha": "^5.2.5",
"@types/mocha": "^5.2.7",
"@types/mock-fs": "^3.6.30",

@@ -77,3 +77,3 @@ "@types/stream-buffers": "^3.0.3",

"jasmine": "^3.3.0",
"mocha": "^5.2.0",
"mocha": "^6.1.4",
"mock-fs": "^4.7.0",

@@ -86,4 +86,4 @@ "nock": "^10.0.6",

"ts-mockito": "^2.3.1",
"ts-node": "^7.0.1",
"tslint": "^5.11.0",
"ts-node": "^8.2.0",
"tslint": "^5.17.0",
"typescript": "^3.1.3"

@@ -90,0 +90,0 @@ },

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc