├── .gitignore
├── .jscs.json
├── .travis.yml
├── Gruntfile.js
├── LICENSE
├── README.md
├── index.js
├── package.json
└── test
└── test.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 |
6 | # Runtime data
7 | pids
8 | *.pid
9 | *.seed
10 |
11 | # Directory for instrumented libs generated by jscoverage/JSCover
12 | lib-cov
13 |
14 | # Coverage directory used by tools like istanbul
15 | coverage
16 |
17 | # nyc test coverage
18 | .nyc_output
19 |
20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
21 | .grunt
22 |
23 | # node-waf configuration
24 | .lock-wscript
25 |
26 | # Compiled binary addons (http://nodejs.org/api/addons.html)
27 | build/Release
28 |
29 | # Dependency directories
30 | node_modules
31 | jspm_packages
32 |
33 | # Optional npm cache directory
34 | .npm
35 |
36 | # Optional REPL history
37 | .node_repl_history
38 |
39 | # Real Sense certificates
40 | test/certs
41 |
42 | # Old stuff
43 | old
--------------------------------------------------------------------------------
/.jscs.json:
--------------------------------------------------------------------------------
1 | {
2 | "preset": "google",
3 | "maxErrors" : 5000,
4 | "validateIndentation": 4,
5 | "maximumLineLength": 512,
6 | "requireCurlyBraces": false,
7 | "jsDoc": {
8 | "checkAnnotations": {
9 | "preset": "closurecompiler",
10 | "extra": {
11 | "module": true,
12 | "typicalname": true,
13 | "copyright": true,
14 | "classdesc": true
15 | }
16 | }
17 | },
18 | "requireCamelCaseOrUpperCaseIdentifiers": false
19 | }
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "7.4.0"
4 | - "6.9.4"
5 | - "6"
6 | - "6.1"
7 | - "5.11"
8 | after_success:
9 | - 'cat ./coverage/lcov.info | node ./node_modules/coveralls/bin/coveralls.js'
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | module.exports = function(grunt) {
2 |
3 | // Project configuration.
4 | grunt.initConfig({
5 | pkg: grunt.file.readJSON('package.json'),
6 |
7 | jsdoc2md: {
8 | oneOutputFile: {
9 | src: ['index.js', 'lib/**/*.js'],
10 | dest: 'README.md'
11 | },
12 | multipleOutputfiles: {
13 | files: [
14 | {src: 'index.js', dest: 'README.md'},
15 | {src: 'lib/array.js', dest: 'lib/array.md'},
16 | {src: 'lib/core.js', dest: 'lib/core.md'},
17 | {src: 'lib/object.js', dest: 'lib/object.md'},
18 | {src: ['lib/qlik.js', 'lib/qlik/*.js', 'lib/qlik/apis/qrs/qrs.js', 'lib/qlik/apis/qps/qps.js'], dest: 'lib/qlik.md'},
19 | {src: 'lib/qlik/apis/qrs/qrs.sdk.js', dest: 'lib/qlik/apis/qrs/qrs.md'},
20 | {src: 'lib/qlik/apis/qrs/qrs.sdk.about.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.about.md'},
21 | {src: 'lib/qlik/apis/qrs/qrs.sdk.app.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.app.md'},
22 | {src: 'lib/qlik/apis/qrs/qrs.sdk.appavailability.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.appavailability.md'},
23 | {src: 'lib/qlik/apis/qrs/qrs.sdk.appcomponent.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.appcomponent.md'},
24 | {src: 'lib/qlik/apis/qrs/qrs.sdk.appcontent.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.appcontent.md'},
25 | {src: 'lib/qlik/apis/qrs/qrs.sdk.appcontentquota.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.appcontentquota.md'},
26 | {src: 'lib/qlik/apis/qrs/qrs.sdk.applicationlog.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.applicationlog.md'},
27 | {src: 'lib/qlik/apis/qrs/qrs.sdk.appseedinfo.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.appseedinfo.md'},
28 | {src: 'lib/qlik/apis/qrs/qrs.sdk.appstatus.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.appstatus.md'},
29 | {src: 'lib/qlik/apis/qrs/qrs.sdk.binarydelete.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.binarydelete.md'},
30 | {src: 'lib/qlik/apis/qrs/qrs.sdk.binarydownload.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.binarydownload.md'},
31 | {src: 'lib/qlik/apis/qrs/qrs.sdk.binarysyncruleevaluation.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.binarysyncruleevaluation.md'},
32 | {src: 'lib/qlik/apis/qrs/qrs.sdk.cache.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.cache.md'},
33 | {src: 'lib/qlik/apis/qrs/qrs.sdk.certificatedistribution.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.certificatedistribution.md'},
34 | {src: 'lib/qlik/apis/qrs/qrs.sdk.compositeevent.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.compositeevent.md'},
35 | {src: 'lib/qlik/apis/qrs/qrs.sdk.compositeeventoperational.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.compositeeventoperational.md'},
36 | {src: 'lib/qlik/apis/qrs/qrs.sdk.compositeeventruleoperational.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.compositeeventruleoperational.md'},
37 | {src: 'lib/qlik/apis/qrs/qrs.sdk.contentlibrary.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.contentlibrary.md'},
38 | {src: 'lib/qlik/apis/qrs/qrs.sdk.custompropertydefinition.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.custompropertydefinition.md'},
39 | {src: 'lib/qlik/apis/qrs/qrs.sdk.dataconnection.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.dataconnection.md'},
40 | {src: 'lib/qlik/apis/qrs/qrs.sdk.download.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.download.md'},
41 | {src: 'lib/qlik/apis/qrs/qrs.sdk.engineservice.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.engineservice.md'},
42 | {src: 'lib/qlik/apis/qrs/qrs.sdk.event.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.event.md'},
43 | {src: 'lib/qlik/apis/qrs/qrs.sdk.eventoperational.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.eventoperational.md'},
44 | {src: 'lib/qlik/apis/qrs/qrs.sdk.executionresult.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.executionresult.md'},
45 | {src: 'lib/qlik/apis/qrs/qrs.sdk.executionsession.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.executionsession.md'},
46 | {src: 'lib/qlik/apis/qrs/qrs.sdk.extension.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.extension.md'},
47 | {src: 'lib/qlik/apis/qrs/qrs.sdk.externalchangeinfo.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.externalchangeinfo.md'},
48 | {src: 'lib/qlik/apis/qrs/qrs.sdk.externalprogramtask.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.externalprogramtask.md'},
49 | {src: 'lib/qlik/apis/qrs/qrs.sdk.externalprogramtaskoperational.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.externalprogramtaskoperational.md'},
50 | {src: 'lib/qlik/apis/qrs/qrs.sdk.filereference.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.filereference.md'},
51 | {src: 'lib/qlik/apis/qrs/qrs.sdk.license.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.license.md'},
52 | {src: 'lib/qlik/apis/qrs/qrs.sdk.licenseaccessusage.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.licenseaccessusage.md'},
53 | {src: 'lib/qlik/apis/qrs/qrs.sdk.loadbalancing.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.loadbalancing.md'},
54 | {src: 'lib/qlik/apis/qrs/qrs.sdk.log.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.log.md'},
55 | {src: 'lib/qlik/apis/qrs/qrs.sdk.managementconsolelog.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.managementconsolelog.md'},
56 | {src: 'lib/qlik/apis/qrs/qrs.sdk.mimetype.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.mimetype.md'},
57 | {src: 'lib/qlik/apis/qrs/qrs.sdk.notification.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.notification.md'},
58 | {src: 'lib/qlik/apis/qrs/qrs.sdk.printingservice.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.printingservice.md'},
59 | {src: 'lib/qlik/apis/qrs/qrs.sdk.proxyservice.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.proxyservice.md'},
60 | {src: 'lib/qlik/apis/qrs/qrs.sdk.reloadtask.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.reloadtask.md'},
61 | {src: 'lib/qlik/apis/qrs/qrs.sdk.reloadtaskoperational.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.reloadtaskoperational.md'},
62 | {src: 'lib/qlik/apis/qrs/qrs.sdk.repositoryservice.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.repositoryservice.md'},
63 | {src: 'lib/qlik/apis/qrs/qrs.sdk.schedulerservice.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.schedulerservice.md'},
64 | {src: 'lib/qlik/apis/qrs/qrs.sdk.schemaevent.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.schemaevent.md'},
65 | {src: 'lib/qlik/apis/qrs/qrs.sdk.schemaeventoperational.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.schemaeventoperational.md'},
66 | {src: 'lib/qlik/apis/qrs/qrs.sdk.selection.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.selection.md'},
67 | {src: 'lib/qlik/apis/qrs/qrs.sdk.servernodeconfiguration.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.servernodeconfiguration.md'},
68 | {src: 'lib/qlik/apis/qrs/qrs.sdk.servernoderegistration.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.servernoderegistration.md'},
69 | {src: 'lib/qlik/apis/qrs/qrs.sdk.servicestatus.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.servicestatus.md'},
70 | {src: 'lib/qlik/apis/qrs/qrs.sdk.staticcontent.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.staticcontent.md'},
71 | {src: 'lib/qlik/apis/qrs/qrs.sdk.staticcontentreference.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.staticcontentreference.md'},
72 | {src: 'lib/qlik/apis/qrs/qrs.sdk.staticcontentreferencebase.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.staticcontentreferencebase.md'},
73 | {src: 'lib/qlik/apis/qrs/qrs.sdk.stream.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.stream.md'},
74 | {src: 'lib/qlik/apis/qrs/qrs.sdk.sync.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.sync.md'},
75 | {src: 'lib/qlik/apis/qrs/qrs.sdk.syncsession.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.syncsession.md'},
76 | {src: 'lib/qlik/apis/qrs/qrs.sdk.systemrule.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.systemrule.md'},
77 | {src: 'lib/qlik/apis/qrs/qrs.sdk.tag.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.tag.md'},
78 | {src: 'lib/qlik/apis/qrs/qrs.sdk.task.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.task.md'},
79 | {src: 'lib/qlik/apis/qrs/qrs.sdk.taskoperational.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.taskoperational.md'},
80 | {src: 'lib/qlik/apis/qrs/qrs.sdk.tempcontent.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.tempcontent.md'},
81 | {src: 'lib/qlik/apis/qrs/qrs.sdk.user.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.user.md'},
82 | {src: 'lib/qlik/apis/qrs/qrs.sdk.userdirectory.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.userdirectory.md'},
83 | {src: 'lib/qlik/apis/qrs/qrs.sdk.userdirectoryconnector.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.userdirectoryconnector.md'},
84 | {src: 'lib/qlik/apis/qrs/qrs.sdk.usersynctask.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.usersynctask.md'},
85 | {src: 'lib/qlik/apis/qrs/qrs.sdk.usersynctaskoperational.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.usersynctaskoperational.md'},
86 | {src: 'lib/qlik/apis/qrs/qrs.sdk.virtualproxyconfig.js', dest: 'lib/qlik/apis/qrs/qrs.sdk.virtualproxyconfig.md'}
87 | ]
88 | }
89 | },
90 |
91 | jscs: {
92 | src: ['index.js', 'lib/**/*.js'],
93 | options: {
94 | config: '.jscs.json'
95 | }
96 | },
97 | simplemocha: {
98 | options: {
99 | ui: 'bdd',
100 | reporter: 'tap'
101 | },
102 | all: {src: ['test/**/*.js']}
103 | },
104 | mocha_istanbul: {
105 | coverage: {
106 | src: 'test',
107 | options: {
108 | mask: '*.js',
109 | coverageFolder: 'coverage',
110 | check: {
111 | statements: 20,
112 | branches: 70,
113 | functions: 10,
114 | lines: 20
115 | }
116 | }
117 | }
118 | },
119 | coveralls: {
120 | options: {
121 | force: false
122 | },
123 | default: {
124 | src: 'coverage/*.info',
125 | options: {
126 | }
127 | }
128 | },
129 | bump: {
130 | options: {
131 | push: true,
132 | pushTo: 'origin'
133 | }
134 |
135 | },
136 | shell: {
137 | publish: {
138 | command: 'npm publish'
139 | }
140 | }
141 | });
142 |
143 | grunt.loadNpmTasks('grunt-jsdoc-to-markdown');
144 | grunt.loadNpmTasks('grunt-bump');
145 | grunt.loadNpmTasks('grunt-shell');
146 | grunt.loadNpmTasks('grunt-jscs');
147 | grunt.loadNpmTasks('grunt-simple-mocha');
148 | grunt.loadNpmTasks('grunt-mocha-istanbul');
149 | grunt.loadNpmTasks('grunt-coveralls');
150 |
151 | grunt.registerTask('patch', 'patch', function() {
152 | grunt.task.run('bump:patch', 'shell:publish');
153 | });
154 |
155 | grunt.registerTask('release', 'Release a new version, push it and publish it', function() {
156 | grunt.task.run('jscs', /*'simplemocha:all',*/ 'mocha_istanbul:coverage', 'jsdoc2md:multipleOutputfiles', 'bump:patch', 'shell:publish', 'coveralls:default');
157 | });
158 |
159 | };
160 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Loïc Formont
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## qlik-utils
4 | [](https://badge.fury.io/gh/pouc%2Fmy-node-template)
5 | [](https://badge.fury.io/js/my-node-template)
6 | [](https://npmjs.org/package/my-node-template)
7 | [](https://travis-ci.org/pouc/my-node-template)
8 | [](https://gemnasium.com/github.com/pouc/my-node-template)
9 | [](https://coveralls.io/github/pouc/my-node-template?branch=master)
10 | [](https://snyk.io/test/github/pouc/my-node-template)
11 |
12 | A set of utilities to deal with Qlik Sense APIs
13 |
14 | Version 3 is compatible with enigma.js v2
15 |
16 | Not compatible with version 2
17 |
18 | **Author:** Loïc Formont
19 | **License**: MIT Licensed
20 | **Example**
21 | ```javascript
22 | var template = require("my-node-template");
23 | ```
24 |
25 |
26 | ### template.example(name) ⇒ \*
27 | Description of the function
28 |
29 | **Kind**: static method of [my-node-template](#module_my-node-template)
30 | **Returns**: \*
- a value
31 |
32 | | Param | Type | Description |
33 | | --- | --- | --- |
34 | | name | type
| the first parameter |
35 |
36 | **Example**
37 | Example of the function
38 |
39 | ```javascript
40 | var code = of.the.function;
41 | ```
42 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var Rx = require('rxjs/Rx');
4 | var promise = require('q');
5 | var mapObj = require('map-obj');
6 | var values = require('object.values');
7 | var extend = require('extend');
8 | var sprintf = require('sprintf-js').sprintf;
9 | var arrayDivide = require('array-divide');
10 |
11 | var undef = require('ifnotundef');
12 |
13 | var qps = require('qlik-api-qps');
14 | var qrs = require('qlik-api-qrs');
15 |
16 | var Task = require('rxjs-task-subject');
17 |
18 | /**
19 | *
20 | * [](https://badge.fury.io/gh/pouc%2Fqlik-utils)
21 | * [](https://badge.fury.io/js/qlik-utils)
22 | * [](https://npmjs.org/package/qlik-utils)
23 | * [](https://travis-ci.org/pouc/qlik-utils)
24 | * [](https://gemnasium.com/github.com/pouc/qlik-utils)
25 | * [](https://coveralls.io/github/pouc/qlik-utils?branch=master)
26 | * [](https://snyk.io/test/github/pouc/qlik-utils)
27 | *
28 | * A set of utility functions for simplifying the call to Qlik Sense APIs
29 | *
30 | * @module qlik-utils
31 | * @typicalname utils
32 | * @author Loic Formont
33 | *
34 | * @copyright Copyright (C) 2017 Loic Formont
35 | * @license MIT Licensed
36 | *
37 | * @example
38 | * ```javascript
39 | * var utils = require("qlik-utils");
40 | * ```
41 | */
42 | module.exports = createUtils({});
43 | module.exports.create = createUtils;
44 |
45 | function createUtils(utilsOptions) {
46 | undef.try(utilsOptions);
47 |
48 | var extPromise = undef.if(utilsOptions.promise, promise.promise);
49 | var returnObservable = undef.if(utilsOptions.returnObservable, false);
50 |
51 | var retVal = {
52 |
53 | /**
54 | * Generates a ticket on Qlik Sense QRS Api. If the targetId is not correct
55 | * then the ticket will redirect to the hub
56 | *
57 | * @example
58 | * ```javascript
59 | * utils.getTicket({
60 | * restUri: 'https://10.76.224.72',
61 | * pfx: pfx,
62 | * passPhrase: ''
63 | * },
64 | * {
65 | * UserId: 'qlikservice',
66 | * UserDirectory: '2008R2-0',
67 | * Attributes: []
68 | * }
69 | * }).then(function(retVal) {
70 | * console.log(retVal);
71 | * });
72 | * ```
73 | *
74 | * @memberOf Qlik
75 | *
76 | * @param {options} options Qlik Sense connection options
77 | * @param {ticketParams} params the ticket parameters
78 | * @returns {Task.} a Task resolving to the generated ticket
79 | */
80 | getTicket: function(options, params) {
81 |
82 | // Create connection to qps
83 | var qpsApi = qps(options);
84 |
85 | // Returned object
86 | var task = new Task();
87 |
88 | // Ticket flow
89 | Rx.Observable
90 | .from(qpsApi.ticket.post(params))
91 | .catch((err) => {
92 | if (err.match(/^Specified targetId .* was unknown$/)) {
93 |
94 | // if there was a problem with the target Id, try to generate another ticket by reseting target Id
95 | task.running('warning', `Wrong targetId: '${params.TargetId}', generating a ticket to default location`);
96 | delete params.TargetId;
97 |
98 | return Rx.Observable.from(module.exports.getTicket(options, params));
99 | } else {
100 | return Rx.Observable.throw(new Error(err));
101 | }
102 | })
103 | .subscribe(task);
104 |
105 | if (returnObservable) {
106 | return task;
107 | } else {
108 | return task.toPromise(extPromise);
109 | }
110 | },
111 |
112 | /**
113 | * Adds the given ip address to the websocket whitelist of the given virtual proxy.
114 | * Be careful: this restarts the proxy. The restart can take 1-2 seconds. All subsequent API
115 | * calls within this restart will fail miserably with various random & useless error messages.
116 | *
117 | * @example
118 | * ```javascript
119 | * readFile('./client.pfx').then(function(certif) {
120 | *
121 | * return utils.Qlik.addToWhiteList({
122 | * restUri: 'https://10.76.224.72:4242',
123 | * pfx: certif,
124 | * passPhrase: '',
125 | * UserId: 'qlikservice',
126 | * UserDirectory: '2008R2-0',
127 | * params: {
128 | * ip: '10.76.224.72'
129 | * }
130 | * });
131 | *
132 | * }).then(function(ret) {
133 | * console.log(ret);
134 | * }, function(ret) {
135 | * console.log(ret);
136 | * });
137 | * ```
138 | *
139 | * @memberOf Qlik
140 | *
141 | * @param {options} options Qlik Sense connection options
142 | * @param {string} params parameters to add to the whitelist
143 | * @param {string} params.ip the ip to add
144 | * @param {string|int} [params.vp] the prefix or id of the virtual proxy to update. If null or false, this function will update all vps
145 | * @returns {Promise.