Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "skyflow-node",
"version": "2.0.0-beta.2",
"version": "2.0.0-beta.3",
"description": "Skyflow SDK for Node.js",
"main": "./lib/index.js",
"module": "./lib/index.js",
Expand Down
2 changes: 1 addition & 1 deletion src/error/messages/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const errorPrefix = `Skyflow Node SDK v${sdkDetails.version}`;

const errorMessages = {
CONFIG_MISSING: `${errorPrefix} Initialization failed. Skyflow config cannot be empty. Specify a valid skyflow config.`,
INVALID_SKYFLOW_CONFIG: `${errorPrefix} Initialization failed. Invalid skyflow config. Vaults configs key missing in skyflow config.`,
INVALID_SKYFLOW_CONFIG: `${errorPrefix} Initialization failed. Invalid skyflow config. Vault/Connection config key missing in skyflow config.`,
INVALID_TYPE_FOR_CONFIG: `${errorPrefix} Initialization failed. Invalid %s1 config. Specify a valid %s1 config.`,
EMPTY_VAULT_CONFIG: `${errorPrefix} Initialization failed. Vault config cannot be empty. Specify a valid vault config.`,
EMPTY_CONNECTION_CONFIG: `${errorPrefix} Initialization failed. Connection config cannot be empty. Specify a valid connection config.`,
Expand Down
87 changes: 40 additions & 47 deletions src/utils/validations/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,17 +91,22 @@ export const validateSkyflowConfig = (config: SkyflowConfig, logLevel: LogLevel
if (config) {
if (!Object.prototype.hasOwnProperty.call(config, 'vaultConfigs')) {
printLog(logs.errorLogs.VAULT_CONFIG_KEY_MISSING, MessageType.ERROR, logLevel);
}

const { vaultConfigs, connectionConfigs } = config;

// Count how many of the fields are defined
const definedFields = [vaultConfigs, connectionConfigs].filter(Boolean).length;

// If none are present
if (definedFields === 0) {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_SKYFLOW_CONFIG);
}

if (config?.vaultConfigs && !Array.isArray(config.vaultConfigs)) {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TYPE_FOR_CONFIG, [VAULT])
}

if (config?.vaultConfigs.length === 0) {
throw new SkyflowError(SKYFLOW_ERROR_CODE.EMPTY_VAULT_CONFIG);
}

if (config?.connectionConfigs && !Array.isArray(config?.connectionConfigs)) {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TYPE_FOR_CONFIG, [CONNECTION])
}
Expand Down Expand Up @@ -321,15 +326,11 @@ function validateInsertInput(input: unknown, index: number): void {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_RECORD_IN_INSERT, [index]);
}

// Iterate over the key-value pairs and check their types
for (const [key, value] of entries) {
// Iterate over the keys and check their types
for (const [key] of entries) {
if (key && typeof key !== 'string') {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_RECORD_IN_INSERT, [index]);
}
// update the data type accordingly
if (value && typeof value !== 'string') {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_RECORD_IN_INSERT, [index]);
}
}

} catch (error) {
Expand All @@ -349,15 +350,11 @@ function validateUpdateInput(input: unknown): void {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_RECORD_IN_UPDATE);
}

// Iterate over the key-value pairs and check their types
for (const [key, value] of entries) {
// Iterate over the keys and check their types
for (const [key] of entries) {
if (key && typeof key !== 'string') {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_RECORD_IN_UPDATE);
}
// update the data type accordingly
if (value && typeof value !== 'string') {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_RECORD_IN_UPDATE);
}
}

} catch (error) {
Expand All @@ -377,15 +374,11 @@ function validateUpdateToken(input: unknown): void {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TOKEN_IN_UPDATE);
}

// Iterate over the key-value pairs and check their types
for (const [key, value] of entries) {
// Iterate over the keys and check their types
for (const [key] of entries) {
if (key && typeof key !== 'string') {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TOKEN_IN_UPDATE);
}
// update the data type accordingly
if (value && typeof value !== 'string') {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TOKEN_IN_UPDATE);
}
}

} catch (error) {
Expand Down Expand Up @@ -434,42 +427,42 @@ export const validateInsertOptions = (insertOptions?: InsertOptions) => {
};

const validateTokensMapWithTokenStrict = (
data: object,
tokens: object
data: object,
tokens: object
) => {
const dataKeys = Object.keys(data);
const dataKeys = Object.keys(data);

for (const key of dataKeys) {
if (!tokens.hasOwnProperty(key)) {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INSUFFICIENT_TOKENS_PASSED_FOR_TOKEN_MODE_ENABLE_STRICT);
for (const key of dataKeys) {
if (!tokens.hasOwnProperty(key)) {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INSUFFICIENT_TOKENS_PASSED_FOR_TOKEN_MODE_ENABLE_STRICT);
}
}
}
};

export const validateTokensForInsertRequest = (
insertRequest?: InsertRequest,
insertOptions?: InsertOptions
insertRequest?: InsertRequest,
insertOptions?: InsertOptions
) => {
if (insertRequest && insertOptions && insertOptions.getTokenMode()) {
if (
(insertOptions.getTokenMode() == TokenMode.ENABLE ||
insertOptions.getTokenMode() == TokenMode.ENABLE_STRICT) && !insertOptions.getTokens()
) {
throw new SkyflowError(SKYFLOW_ERROR_CODE.NO_TOKENS_WITH_TOKEN_MODE);
}

if((insertOptions.getTokenMode() == TokenMode.ENABLE_STRICT) && insertOptions.getTokens()) {
if(insertRequest.data.length!=insertOptions.getTokens()?.length) {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INSUFFICIENT_TOKENS_PASSED_FOR_TOKEN_MODE_ENABLE_STRICT);
if (insertRequest && insertOptions && insertOptions.getTokenMode()) {
if (
(insertOptions.getTokenMode() == TokenMode.ENABLE ||
insertOptions.getTokenMode() == TokenMode.ENABLE_STRICT) && !insertOptions.getTokens()
) {
throw new SkyflowError(SKYFLOW_ERROR_CODE.NO_TOKENS_WITH_TOKEN_MODE);
}

if(insertOptions.getTokens()) {
for(let i=0;i<insertRequest.data.length;i++) {
validateTokensMapWithTokenStrict(insertRequest.data[i], insertOptions.getTokens()![i])
if ((insertOptions.getTokenMode() == TokenMode.ENABLE_STRICT) && insertOptions.getTokens()) {
if (insertRequest.data.length != insertOptions.getTokens()?.length) {
throw new SkyflowError(SKYFLOW_ERROR_CODE.INSUFFICIENT_TOKENS_PASSED_FOR_TOKEN_MODE_ENABLE_STRICT);
}

if (insertOptions.getTokens()) {
for (let i = 0; i < insertRequest.data.length; i++) {
validateTokensMapWithTokenStrict(insertRequest.data[i], insertOptions.getTokens()![i])
}
}
}
}
}
}
};

export const validateInsertRequest = (insertRequest: InsertRequest, insertOptions?: InsertOptions, logLevel: LogLevel = LogLevel.ERROR) => { //
Expand Down
2 changes: 1 addition & 1 deletion src/vault/skyflow/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class Skyflow {

this.commonCredentials = config?.skyflowCredentials;
printLog(logs.infoLogs.VALIDATING_VAULT_CONFIG, MessageType.LOG, this.logLevel);
config.vaultConfigs.map(vaultConfig => {
config.vaultConfigs?.map(vaultConfig => {
this.addVaultConfig(vaultConfig);
});
printLog(logs.infoLogs.VALIDATING_CONNECTION_CONFIG, MessageType.LOG, this.logLevel);
Expand Down
2 changes: 1 addition & 1 deletion src/vault/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import ConnectionController from "../controller/connections";
import VaultClient from "../client";

export interface SkyflowConfig {
vaultConfigs: VaultConfig[];
vaultConfigs?: VaultConfig[];
connectionConfigs?: ConnectionConfig[];
skyflowCredentials?: Credentials;
logLevel?: LogLevel;
Expand Down
4 changes: 0 additions & 4 deletions test/vault/skyflow/skyflow.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,6 @@ describe('Skyflow initialization', () => {
})).toThrowError(invalidVaultConfigError);
});

test('should throw error when empty vaultConfig is passed', () => {
expect(() => new Skyflow({ vaultConfigs: [] })).toThrowError(emptyVaultConfigError);
});

test('should throw error when invalid connectionConfig is passed', () => {
expect(() => new Skyflow({
vaultConfigs: [{
Expand Down
Loading