New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@ibm-cloud/data-virtualization-on-cloud

Package Overview
Dependencies
Maintainers
13
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ibm-cloud/data-virtualization-on-cloud - npm Package Compare versions

Comparing version 0.0.2 to 0.1.0

7

CHANGELOG.md

@@ -0,1 +1,8 @@

# [0.1.0](https://github.com/IBM/data-virtualization-on-cloud-node-sdk/compare/v0.0.2...v0.1.0) (2021-11-09)
### Features
* **global catalog:** add api SDK for cache and object store ([#21](https://github.com/IBM/data-virtualization-on-cloud-node-sdk/issues/21)) ([3826e85](https://github.com/IBM/data-virtualization-on-cloud-node-sdk/commit/3826e8587368790b0540db889f8c850c700c158e))
## [0.0.2](https://github.com/IBM/data-virtualization-on-cloud-node-sdk/compare/v0.0.1...v0.0.2) (2021-08-12)

@@ -2,0 +9,0 @@

251

data-virtualization/v1.d.ts

@@ -22,2 +22,4 @@ /**

* user roles.
*
* API Version: 1.6.0
*/

@@ -90,2 +92,11 @@ declare class DataVirtualizationV1 extends BaseService {

deleteDatasourceConnection(params: DataVirtualizationV1.DeleteDatasourceConnectionParams): Promise<DataVirtualizationV1.Response<DataVirtualizationV1.Empty>>;
/**
* Gets object store connection details.
*
* @param {Object} [params] - The parameters to send to the service.
* @param {string} [params.jwtAuthUserPayload] - Supplied by proxy. Do NOT add your own value.
* @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
* @returns {Promise<DataVirtualizationV1.Response<DataVirtualizationV1.ObjStoreConnectionResponseV2>>}
*/
getObjectStoreConnectionsV2(params?: DataVirtualizationV1.GetObjectStoreConnectionsV2Params): Promise<DataVirtualizationV1.Response<DataVirtualizationV1.ObjStoreConnectionResponseV2>>;
/*************************

@@ -169,8 +180,8 @@ * users

/**
* Turn on or off WKC policy enforcement status.
* Turn policy enforcement status on or off.
*
* Turn on WKC policy enforcement status.
* Turns policy enforcement status on or off.
*
* @param {Object} params - The parameters to send to the service.
* @param {string} params.status - Set the status of WKC policy.
* @param {string} params.status - Set the status of policy enforcement.
* @param {OutgoingHttpHeaders} [params.headers] - Custom request headers

@@ -181,5 +192,5 @@ * @returns {Promise<DataVirtualizationV1.Response<DataVirtualizationV1.TurnOnPolicyV2Response>>}

/**
* Get WKC policy enforcement status.
* Get policy enforcement status.
*
* Get WKC policy enforcement status, return enabled or disabled.
* Get policy enforcement status, return enabled or disabled.
*

@@ -224,2 +235,19 @@ * @param {Object} [params] - The parameters to send to the service.

deleteTable(params: DataVirtualizationV1.DeleteTableParams): Promise<DataVirtualizationV1.Response<DataVirtualizationV1.Empty>>;
/**
* Create a remote table for the ORC or Parquet file on a cloud object store (COS).
*
* Create a remote table for the ORC or Parquet file on a cloud object store (COS).
*
* @param {Object} params - The parameters to send to the service.
* @param {string} params.url - the file path with bucket name.
* @param {string} params.virtualName - the virtual table name.
* @param {string} params.virtualSchema - the virtual table schema.
* @param {VirtualizeCosV2RequestVirtualTableDefItem[]} params.virtualTableDef -
* @param {boolean} [params.isReplace] - if repalce the existing one when create the virtual table.
* @param {string} [params.options] - the options used to virtualize file.
* @param {string} [params.jwtAuthUserPayload] - Supplied by proxy. Do NOT add your own value.
* @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
* @returns {Promise<DataVirtualizationV1.Response<DataVirtualizationV1.SuccessResponse>>}
*/
virtualizeCosV2(params: DataVirtualizationV1.VirtualizeCosV2Params): Promise<DataVirtualizationV1.Response<DataVirtualizationV1.SuccessResponse>>;
/*************************

@@ -231,3 +259,3 @@ * primaryCatalog

*
* Get primary catalog ID from the table DVSYS.INSTANCE_INFO.
* Gets the primary catalog ID from the DVSYS.INSTANCE_INFO table.
*

@@ -242,3 +270,3 @@ * @param {Object} [params] - The parameters to send to the service.

*
* Insert primary catalog ID into table DVSYS.INSTANCE_INFO.
* Inserts primary catalog ID into table DVSYS.INSTANCE_INFO.
*

@@ -267,5 +295,5 @@ * @param {Object} params - The parameters to send to the service.

/**
* publish virtual table to WKC.
* Publish virtual tables to a catalog.
*
* publish virtual tables to WKC.
* Publishes virtual tables to a catalog.
*

@@ -280,2 +308,36 @@ * @param {Object} params - The parameters to send to the service.

publishAssets(params: DataVirtualizationV1.PublishAssetsParams): Promise<DataVirtualizationV1.Response<DataVirtualizationV1.CatalogPublishResponse>>;
/*************************
* caches
************************/
/**
* List caches.
*
* List all active, inactive and deleted caches in Data Virtualization.
*
* @param {Object} [params] - The parameters to send to the service.
* @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
* @returns {Promise<DataVirtualizationV1.Response<DataVirtualizationV1.CacheListResponse>>}
*/
getCachesList(params?: DataVirtualizationV1.GetCachesListParams): Promise<DataVirtualizationV1.Response<DataVirtualizationV1.CacheListResponse>>;
/**
* List a cache.
*
* List a specific cache in Data Virtualization.
*
* @param {Object} params - The parameters to send to the service.
* @param {string} params.id - The ID of the cache to be listed.
* @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
* @returns {Promise<DataVirtualizationV1.Response<DataVirtualizationV1.CacheResponse>>}
*/
getCache(params: DataVirtualizationV1.GetCacheParams): Promise<DataVirtualizationV1.Response<DataVirtualizationV1.CacheResponse>>;
/**
* Fetch the cache storage.
*
* Fetch the total cache storage and used capacities for active and inactive caches in Data Virtualization.
*
* @param {Object} [params] - The parameters to send to the service.
* @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
* @returns {Promise<DataVirtualizationV1.Response<DataVirtualizationV1.StorageDetails>>}
*/
getCacheStorageDetail(params?: DataVirtualizationV1.GetCacheStorageDetailParams): Promise<DataVirtualizationV1.Response<DataVirtualizationV1.StorageDetails>>;
}

@@ -329,2 +391,8 @@ /*************************

}
/** Parameters for the `getObjectStoreConnectionsV2` operation. */
interface GetObjectStoreConnectionsV2Params {
/** Supplied by proxy. Do NOT add your own value. */
jwtAuthUserPayload?: string;
headers?: OutgoingHttpHeaders;
}
/** Parameters for the `grantUserToVirtualTable` operation. */

@@ -388,3 +456,3 @@ interface GrantUserToVirtualTableParams {

interface TurnOnPolicyV2Params {
/** Set the status of WKC policy. */
/** Set the status of policy enforcement. */
status: string;

@@ -422,2 +490,19 @@ headers?: OutgoingHttpHeaders;

}
/** Parameters for the `virtualizeCosV2` operation. */
interface VirtualizeCosV2Params {
/** the file path with bucket name. */
url: string;
/** the virtual table name. */
virtualName: string;
/** the virtual table schema. */
virtualSchema: string;
virtualTableDef: VirtualizeCosV2RequestVirtualTableDefItem[];
/** if repalce the existing one when create the virtual table. */
isReplace?: boolean;
/** the options used to virtualize file. */
options?: string;
/** Supplied by proxy. Do NOT add your own value. */
jwtAuthUserPayload?: string;
headers?: OutgoingHttpHeaders;
}
/** Parameters for the `getPrimaryCatalog` operation. */

@@ -448,5 +533,105 @@ interface GetPrimaryCatalogParams {

}
/** Parameters for the `getCachesList` operation. */
interface GetCachesListParams {
headers?: OutgoingHttpHeaders;
}
/** Parameters for the `getCache` operation. */
interface GetCacheParams {
/** The ID of the cache to be listed. */
id: string;
headers?: OutgoingHttpHeaders;
}
/** Parameters for the `getCacheStorageDetail` operation. */
interface GetCacheStorageDetailParams {
headers?: OutgoingHttpHeaders;
}
/*************************
* model interfaces
************************/
/** CacheListResponse. */
interface CacheListResponse {
caches?: CacheListResponseCachesItem[];
}
/** CacheListResponseCachesItem. */
interface CacheListResponseCachesItem {
/** The name of this cache. */
name?: string;
/** The unique ID of this cache. */
id?: string;
/** The query that defines this cache. */
query?: string;
/** Owner ID of this cache. */
owner_id?: string;
/** Type of the cache - User-defined (U), Recommended (R). */
type?: string;
/** Database timestamp at the time of cache creation. */
created_timestamp?: string;
/** Database timestamp when this cache was last modified (state change). */
last_modified_timestamp?: string;
/** Database timestamp when this cache was last refreshed. */
last_refresh_timestamp?: string;
/** Database timestamp when this cache was last used. */
last_used_timestamp?: string;
/** State of this cache - one of
* Enabled,Disabled,Deleted,Failed,Populating,Activating,Enabling,Disabling,Refreshing,Deleting.
*/
state?: string;
/** Size of this cache (in KB). */
size?: number;
/** Cardinality (number of rows) of this cache. */
cardinality?: number;
/** Time taken to refresh this cache most recently (in milliseconds). */
time_taken_for_refresh?: number;
/** Number of times this cache has been refreshed since creation. */
refresh_count?: number;
/** Hit Count of the cache (number of times this cache was used). */
hit_count?: number;
/** Encoded cron-style representation of the cache refresh schedule. */
refresh_schedule?: string;
/** Human-readable description of the cache refresh schedule. */
refresh_schedule_desc?: string;
/** Status message indicating the most recent error/issue with the cache, if any. */
status_msg?: string;
}
/** CacheResponse. */
interface CacheResponse {
/** The name of this cache. */
name?: string;
/** The unique ID of this cache. */
id?: string;
/** The query that defines this cache. */
query?: string;
/** Owner ID of this cache. */
owner_id?: string;
/** Type of the cache - User-defined (U), Recommended (R). */
type?: string;
/** Database timestamp at the time of cache creation. */
created_timestamp?: string;
/** Database timestamp when this cache was last modified (state change). */
last_modified_timestamp?: string;
/** Database timestamp when this cache was last refreshed. */
last_refresh_timestamp?: string;
/** Database timestamp when this cache was last used. */
last_used_timestamp?: string;
/** State of this cache - one of
* Enabled,Disabled,Deleted,Failed,Populating,Activating,Enabling,Disabling,Refreshing,Deleting.
*/
state?: string;
/** Size of this cache (in KB). */
size?: number;
/** Cardinality (number of rows) of this cache. */
cardinality?: number;
/** Time taken to refresh this cache most recently (in milliseconds). */
time_taken_for_refresh?: number;
/** Number of times this cache has been refreshed since creation. */
refresh_count?: number;
/** Hit Count of the cache (number of times this cache was used). */
hit_count?: number;
/** Encoded cron-style representation of the cache refresh schedule. */
refresh_schedule?: string;
/** Human-readable description of the cache refresh schedule. */
refresh_schedule_desc?: string;
/** Status message indicating the most recent error/issue with the cache, if any. */
status_msg?: string;
}
/** CatalogPublishResponseDuplicateAssetsItem. */

@@ -521,2 +706,12 @@ interface CatalogPublishResponseDuplicateAssetsItem {

}
/** ObjStoreConnectionResponseV2CosConnectionsItem. */
interface ObjStoreConnectionResponseV2CosConnectionsItem {
bucket_name?: string;
ccid?: string;
cid?: string;
endpoint?: string;
removed?: boolean;
service_type?: string;
status?: string;
}
/** PostDatasourceConnection. */

@@ -586,2 +781,25 @@ interface PostDatasourceConnection {

}
/** StorageDetails. */
interface StorageDetails {
/** Total cache storage size. */
total_size?: string;
/** Storage details of active caches. */
enabled?: StorageDetailsEnabled;
/** Storage details of inactive caches. */
disabled?: StorageDetailsDisabled;
}
/** Storage details of inactive caches. */
interface StorageDetailsDisabled {
/** Total size of all inactive caches (in KB). */
size?: number;
/** Number of inactive caches. */
count?: number;
}
/** Storage details of active caches. */
interface StorageDetailsEnabled {
/** Total size of all active caches (in KB). */
size?: number;
/** Number of active caches. */
count?: number;
}
/** TablesForRoleResponse. */

@@ -602,2 +820,7 @@ interface TablesForRoleResponse {

}
/** VirtualizeCosV2RequestVirtualTableDefItem. */
interface VirtualizeCosV2RequestVirtualTableDefItem {
column_name: string;
column_type: string;
}
/** VirtualizeTableParameterSourceTableDefItem. */

@@ -630,2 +853,6 @@ interface VirtualizeTableParameterSourceTableDefItem {

}
/** ObjStoreConnectionResponseV2. */
interface ObjStoreConnectionResponseV2 {
cos_connections?: ObjStoreConnectionResponseV2CosConnectionsItem[];
}
/** PostPrimaryCatalog. */

@@ -643,3 +870,7 @@ interface PostPrimaryCatalog {

}
/** SuccessResponse. */
interface SuccessResponse {
message: string;
}
}
export = DataVirtualizationV1;

@@ -42,3 +42,3 @@ "use strict";

/**
* IBM OpenAPI SDK Code Generator Version: 3.34.1-ad041667-20210617-195430
* IBM OpenAPI SDK Code Generator Version: 3.42.0-8746aaa4-20211102-213344
*/

@@ -51,2 +51,4 @@ var extend = require("extend");

* user roles.
*
* API Version: 1.6.0
*/

@@ -211,2 +213,27 @@ var DataVirtualizationV1 = /** @class */ (function (_super) {

};
/**
* Gets object store connection details.
*
* @param {Object} [params] - The parameters to send to the service.
* @param {string} [params.jwtAuthUserPayload] - Supplied by proxy. Do NOT add your own value.
* @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
* @returns {Promise<DataVirtualizationV1.Response<DataVirtualizationV1.ObjStoreConnectionResponseV2>>}
*/
DataVirtualizationV1.prototype.getObjectStoreConnectionsV2 = function (params) {
var _params = __assign({}, params);
var sdkHeaders = common_1.getSdkHeaders(DataVirtualizationV1.DEFAULT_SERVICE_NAME, 'v1', 'getObjectStoreConnectionsV2');
var parameters = {
options: {
url: '/v2/datasource/objectstore_connections',
method: 'GET',
},
defaultOptions: extend(true, {}, this.baseOptions, {
headers: extend(true, sdkHeaders, {
'Accept': 'application/json',
'jwt-auth-user-payload': _params.jwtAuthUserPayload,
}, _params.headers),
}),
};
return this.createRequest(parameters);
};
/*************************

@@ -420,8 +447,8 @@ * users

/**
* Turn on or off WKC policy enforcement status.
* Turn policy enforcement status on or off.
*
* Turn on WKC policy enforcement status.
* Turns policy enforcement status on or off.
*
* @param {Object} params - The parameters to send to the service.
* @param {string} params.status - Set the status of WKC policy.
* @param {string} params.status - Set the status of policy enforcement.
* @param {OutgoingHttpHeaders} [params.headers] - Custom request headers

@@ -456,5 +483,5 @@ * @returns {Promise<DataVirtualizationV1.Response<DataVirtualizationV1.TurnOnPolicyV2Response>>}

/**
* Get WKC policy enforcement status.
* Get policy enforcement status.
*
* Get WKC policy enforcement status, return enabled or disabled.
* Get policy enforcement status, return enabled or disabled.
*

@@ -579,2 +606,50 @@ * @param {Object} [params] - The parameters to send to the service.

};
/**
* Create a remote table for the ORC or Parquet file on a cloud object store (COS).
*
* Create a remote table for the ORC or Parquet file on a cloud object store (COS).
*
* @param {Object} params - The parameters to send to the service.
* @param {string} params.url - the file path with bucket name.
* @param {string} params.virtualName - the virtual table name.
* @param {string} params.virtualSchema - the virtual table schema.
* @param {VirtualizeCosV2RequestVirtualTableDefItem[]} params.virtualTableDef -
* @param {boolean} [params.isReplace] - if repalce the existing one when create the virtual table.
* @param {string} [params.options] - the options used to virtualize file.
* @param {string} [params.jwtAuthUserPayload] - Supplied by proxy. Do NOT add your own value.
* @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
* @returns {Promise<DataVirtualizationV1.Response<DataVirtualizationV1.SuccessResponse>>}
*/
DataVirtualizationV1.prototype.virtualizeCosV2 = function (params) {
var _params = __assign({}, params);
var requiredParams = ['url', 'virtualName', 'virtualSchema', 'virtualTableDef'];
var missingParams = ibm_cloud_sdk_core_1.getMissingParams(_params, requiredParams);
if (missingParams) {
return Promise.reject(missingParams);
}
var body = {
'url': _params.url,
'virtual_name': _params.virtualName,
'virtual_schema': _params.virtualSchema,
'virtual_table_def': _params.virtualTableDef,
'is_replace': _params.isReplace,
'options': _params.options,
};
var sdkHeaders = common_1.getSdkHeaders(DataVirtualizationV1.DEFAULT_SERVICE_NAME, 'v1', 'virtualizeCosV2');
var parameters = {
options: {
url: '/v2/virtualization/cloud_object_storages',
method: 'POST',
body: body,
},
defaultOptions: extend(true, {}, this.baseOptions, {
headers: extend(true, sdkHeaders, {
'Accept': 'application/json',
'Content-Type': 'application/json',
'jwt-auth-user-payload': _params.jwtAuthUserPayload,
}, _params.headers),
}),
};
return this.createRequest(parameters);
};
/*************************

@@ -586,3 +661,3 @@ * primaryCatalog

*
* Get primary catalog ID from the table DVSYS.INSTANCE_INFO.
* Gets the primary catalog ID from the DVSYS.INSTANCE_INFO table.
*

@@ -612,3 +687,3 @@ * @param {Object} [params] - The parameters to send to the service.

*
* Insert primary catalog ID into table DVSYS.INSTANCE_INFO.
* Inserts primary catalog ID into table DVSYS.INSTANCE_INFO.
*

@@ -684,5 +759,5 @@ * @param {Object} params - The parameters to send to the service.

/**
* publish virtual table to WKC.
* Publish virtual tables to a catalog.
*
* publish virtual tables to WKC.
* Publishes virtual tables to a catalog.
*

@@ -724,2 +799,90 @@ * @param {Object} params - The parameters to send to the service.

};
/*************************
* caches
************************/
/**
* List caches.
*
* List all active, inactive and deleted caches in Data Virtualization.
*
* @param {Object} [params] - The parameters to send to the service.
* @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
* @returns {Promise<DataVirtualizationV1.Response<DataVirtualizationV1.CacheListResponse>>}
*/
DataVirtualizationV1.prototype.getCachesList = function (params) {
var _params = __assign({}, params);
var sdkHeaders = common_1.getSdkHeaders(DataVirtualizationV1.DEFAULT_SERVICE_NAME, 'v1', 'getCachesList');
var parameters = {
options: {
url: '/v1/caching/caches',
method: 'GET',
},
defaultOptions: extend(true, {}, this.baseOptions, {
headers: extend(true, sdkHeaders, {
'Accept': 'application/json',
}, _params.headers),
}),
};
return this.createRequest(parameters);
};
/**
* List a cache.
*
* List a specific cache in Data Virtualization.
*
* @param {Object} params - The parameters to send to the service.
* @param {string} params.id - The ID of the cache to be listed.
* @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
* @returns {Promise<DataVirtualizationV1.Response<DataVirtualizationV1.CacheResponse>>}
*/
DataVirtualizationV1.prototype.getCache = function (params) {
var _params = __assign({}, params);
var requiredParams = ['id'];
var missingParams = ibm_cloud_sdk_core_1.getMissingParams(_params, requiredParams);
if (missingParams) {
return Promise.reject(missingParams);
}
var path = {
'id': _params.id,
};
var sdkHeaders = common_1.getSdkHeaders(DataVirtualizationV1.DEFAULT_SERVICE_NAME, 'v1', 'getCache');
var parameters = {
options: {
url: '/v1/caching/caches/{id}',
method: 'GET',
path: path,
},
defaultOptions: extend(true, {}, this.baseOptions, {
headers: extend(true, sdkHeaders, {
'Accept': 'application/json',
}, _params.headers),
}),
};
return this.createRequest(parameters);
};
/**
* Fetch the cache storage.
*
* Fetch the total cache storage and used capacities for active and inactive caches in Data Virtualization.
*
* @param {Object} [params] - The parameters to send to the service.
* @param {OutgoingHttpHeaders} [params.headers] - Custom request headers
* @returns {Promise<DataVirtualizationV1.Response<DataVirtualizationV1.StorageDetails>>}
*/
DataVirtualizationV1.prototype.getCacheStorageDetail = function (params) {
var _params = __assign({}, params);
var sdkHeaders = common_1.getSdkHeaders(DataVirtualizationV1.DEFAULT_SERVICE_NAME, 'v1', 'getCacheStorageDetail');
var parameters = {
options: {
url: '/v1/caching/storage',
method: 'GET',
},
defaultOptions: extend(true, {}, this.baseOptions, {
headers: extend(true, sdkHeaders, {
'Accept': 'application/json',
}, _params.headers),
}),
};
return this.createRequest(parameters);
};
DataVirtualizationV1.DEFAULT_SERVICE_NAME = 'data_virtualization';

@@ -726,0 +889,0 @@ return DataVirtualizationV1;

2

package.json
{
"name": "@ibm-cloud/data-virtualization-on-cloud",
"version": "0.0.2",
"version": "0.1.0",
"description": "IBM Data Virtualization on Cloud Node.js SDK",

@@ -5,0 +5,0 @@ "repository": {

[![Build Status](https://travis-ci.com/IBM/data-virtualization-on-cloud-node-sdk.svg?branch=main)](https://travis-ci.com/IBM/data-virtualization-on-cloud-node-sdk.svg?branch=main)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)
<!--
[![npm-version](https://img.shields.io/npm/v/IBM/data-virtualization-on-cloud-node-sdk.svg)](https://www.npmjs.com/package/ibm-platform-services)
[![npm-version](https://img.shields.io/npm/v/IBM/data-virtualization-on-cloud-node-sdk.svg)](https://www.npmjs.com/package/@ibm-cloud/data-virtualization-on-cloud)
[![codecov](https://codecov.io/gh/IBM/data-virtualization-on-cloud-node-sdk/branch/main/graph/badge.svg)](https://codecov.io/gh/IBM/data-virtualization-on-cloud-node-sdk)

@@ -49,3 +50,3 @@ -->

--- | ---
[Data Virtualization on Cloud](https://cloud.ibm.com/apidocs/data-virtualization-on-cloud-node-sdk) | data-virtualization
[Data Virtualization on Cloud](https://cloud.ibm.com/apidocs/data-virtualization-on-cloud) | @ibm-cloud/data-virtualization-on-cloud/data-virtualization

@@ -63,3 +64,3 @@ ## Prerequisites

```sh
npm install @ibm-cloud/ibm-data-virtualization-on-cloud
npm install @ibm-cloud/data-virtualization-on-cloud
```

@@ -66,0 +67,0 @@

Sorry, the diff of this file is not supported yet

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