monday-sdk-js 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +136 -1
- package/dist/main.js +1 -1
- package/package.json +1 -1
- package/src/client.js +5 -0
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@ The SDK contains methods for server-side and client-side application development
|
|
|
19
19
|
- [SDK capabilities](#sdk-capabilities)
|
|
20
20
|
- [`monday.api`](#mondayapiquery-options--)
|
|
21
21
|
- [`monday.get`](#mondaygettype-params--)
|
|
22
|
+
- [`monday.set`](#mondaysettype-params--)
|
|
22
23
|
- [`monday.listen`](#mondaylistentypeortypes-callback-params--)
|
|
23
24
|
- [`monday.execute`](#mondayexecutetype-params)
|
|
24
25
|
- [`monday.oauth`](#mondayoauthoptions--)
|
|
@@ -151,6 +152,7 @@ The available types that can be requested are:
|
|
|
151
152
|
| `'settings'` | The application settings as configured by the user that installed the app |
|
|
152
153
|
| `'itemIds'` | The list of item IDs that are filtered in the current board (or all items if no filters are applied) |
|
|
153
154
|
| `'sessionToken'` | A JWT token which is decoded with your app's secret and can be used as a session token between your app's frontend & backend |
|
|
155
|
+
| `'filter'` | The state of the _Search_ filter |
|
|
154
156
|
|
|
155
157
|
**Returns:**
|
|
156
158
|
|
|
@@ -188,6 +190,46 @@ Requesting the list of items currently in view in the board:
|
|
|
188
190
|
monday.get("itemIds").then(res => console.log(res));
|
|
189
191
|
// => [234234, 4564, 234234, 67675, 576567]
|
|
190
192
|
```
|
|
193
|
+
|
|
194
|
+
<br/>
|
|
195
|
+
|
|
196
|
+
### **`monday.set(type, params = {})`**
|
|
197
|
+
|
|
198
|
+
Used for setting up data inside your application. This method can only be used when your app is running inside an `iframe`. This can only be used in client-side apps.
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
**Parameters:**
|
|
202
|
+
|
|
203
|
+
- `type`: The type of data that can be set (available values below)
|
|
204
|
+
- `params`: Optional parameters for the action
|
|
205
|
+
|
|
206
|
+
The available types that can be set are:
|
|
207
|
+
| Type | Description |
|
|
208
|
+
|--|--|
|
|
209
|
+
| `'settings'` | The application settings as configured by the user that installed the app |
|
|
210
|
+
|
|
211
|
+
**Returns:**
|
|
212
|
+
|
|
213
|
+
A `Promise` that will be `resolved` to the set method response.
|
|
214
|
+
|
|
215
|
+
**Examples:**
|
|
216
|
+
|
|
217
|
+
Setting application settings data:
|
|
218
|
+
```js
|
|
219
|
+
monday.set("settings").then(res => ...);
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Example application settings object that we are able to set for a board view:
|
|
223
|
+
```js
|
|
224
|
+
// Board view settings example
|
|
225
|
+
{
|
|
226
|
+
"text": "textual value",
|
|
227
|
+
"color": "#037f4c",
|
|
228
|
+
"date": "2022-08-25"
|
|
229
|
+
"checkbox1": false
|
|
230
|
+
"textarea": "line1\nline2\n.....\nline n"
|
|
231
|
+
}
|
|
232
|
+
```
|
|
191
233
|
<br/>
|
|
192
234
|
|
|
193
235
|
### **`monday.listen(typeOrTypes, callback, params = {})`**
|
|
@@ -207,6 +249,7 @@ You can subscribe to the following types of events:
|
|
|
207
249
|
| `'settings'` | Fired when a setting value is changed by the user |
|
|
208
250
|
| `'itemIds'` | Fired when the board filter changes, which impacts the list of items currently in view |
|
|
209
251
|
| `'events'` | Fired when an interaction takes place with the board/dashboard |
|
|
252
|
+
| `'filter'` | Fired when the _Search_ filter changes |
|
|
210
253
|
|
|
211
254
|
**Returns:**
|
|
212
255
|
|
|
@@ -341,7 +384,6 @@ monday.execute('openFilesDialog', {
|
|
|
341
384
|
})
|
|
342
385
|
```
|
|
343
386
|
|
|
344
|
-
|
|
345
387
|
#### Trigger file upload process
|
|
346
388
|
Opens a modal to let the current user upload a file to a specific file column.
|
|
347
389
|
|
|
@@ -372,6 +414,99 @@ monday.execute('triggerFilesUpload', {
|
|
|
372
414
|
})
|
|
373
415
|
```
|
|
374
416
|
|
|
417
|
+
#### Open modal
|
|
418
|
+
Opens a new modal window as an iFrame.
|
|
419
|
+
|
|
420
|
+
**type**
|
|
421
|
+
`'openAppFeatureModal'`
|
|
422
|
+
|
|
423
|
+
**params**
|
|
424
|
+
|
|
425
|
+
| Parameter|Type | Description | Required | Default Value |
|
|
426
|
+
| --- | --- | --- | --- | --- |
|
|
427
|
+
| url | String | The URL of the page displayed in the modal | No | current iFrame's URL |
|
|
428
|
+
| urlPath | String | Subdirectory or path of the URL to open | No | |
|
|
429
|
+
| urlParams | Object | Query parameters for the URL | No | |
|
|
430
|
+
| width | String | The width of the modal | No | "0px" |
|
|
431
|
+
| height | String | The height of the modal | No | "0px" |
|
|
432
|
+
|
|
433
|
+
**Example**
|
|
434
|
+
```javascript
|
|
435
|
+
monday.execute('openAppFeatureModal', { urlPath, urlParams, height, width }).then((res) => {
|
|
436
|
+
console.log(res.data);
|
|
437
|
+
{"close": true}
|
|
438
|
+
// The above is a callback to see if a user closed the modal from the inside. This is useful should you want to run some logic within the app window.
|
|
439
|
+
});
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
Note: make sure the urlPath you pass is a relative URL and not an absolute URL.
|
|
443
|
+
|
|
444
|
+
#### Close modal
|
|
445
|
+
Closes the modal window.
|
|
446
|
+
|
|
447
|
+
**type**
|
|
448
|
+
`'closeAppFeatureModal'`
|
|
449
|
+
|
|
450
|
+
**params**
|
|
451
|
+
This method does not have any parameters.
|
|
452
|
+
|
|
453
|
+
**Example**
|
|
454
|
+
```javascript
|
|
455
|
+
monday.execute('closeAppFeatureModal').then((res) => {
|
|
456
|
+
console.log(res.data);
|
|
457
|
+
});
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
#### Value created for user
|
|
461
|
+
Notifies the monday platform that user gains a first value in an app.
|
|
462
|
+
|
|
463
|
+
**type**
|
|
464
|
+
`'value'`
|
|
465
|
+
|
|
466
|
+
**params**
|
|
467
|
+
This method does not have any parameters.
|
|
468
|
+
|
|
469
|
+
**Example**
|
|
470
|
+
```javascript
|
|
471
|
+
monday.execute('valueCreatedForUser').then((res) => {
|
|
472
|
+
console.log(res.data);
|
|
473
|
+
});
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
#### Open setting window
|
|
477
|
+
Opens view settings window
|
|
478
|
+
|
|
479
|
+
**type**
|
|
480
|
+
`'value'`
|
|
481
|
+
|
|
482
|
+
**params**
|
|
483
|
+
This method does not have any parameters.
|
|
484
|
+
|
|
485
|
+
**Example**
|
|
486
|
+
```javascript
|
|
487
|
+
monday.execute('openSettings').then((res) => {
|
|
488
|
+
console.log(res.data);
|
|
489
|
+
// note that method will open view settings, unless settings were alreday opened
|
|
490
|
+
});
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
#### Close setting window
|
|
494
|
+
Closes view settings window
|
|
495
|
+
|
|
496
|
+
**type**
|
|
497
|
+
`'value'`
|
|
498
|
+
|
|
499
|
+
**params**
|
|
500
|
+
This method does not have any parameters.
|
|
501
|
+
|
|
502
|
+
**Example**
|
|
503
|
+
```javascript
|
|
504
|
+
monday.execute('closeSettings').then((res) => {
|
|
505
|
+
console.log(res.data);
|
|
506
|
+
// note that method will close view settings, unless settings were alreday closed
|
|
507
|
+
});
|
|
508
|
+
```
|
|
509
|
+
|
|
375
510
|
### **`monday.oauth(options = {})`**
|
|
376
511
|
Performs a client-side redirection of the user to the monday OAuth screen with your client ID embedded in the URL, in order to get their approval to generate a temporary OAuth token based on your requested permission scopes.
|
|
377
512
|
|
package/dist/main.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var
|
|
1
|
+
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=3)}([function(e,t){const n="undefined"!=typeof window&&void 0!==window.document;e.exports={convertToArrayIfNeeded:e=>Array.isArray(e)?e:[e],isBrowser:n}},function(e,t,n){e.exports=n(5)},function(e,t,n){(function(t){const{isBrowser:r}=n(0),i=!r&&!1,o=i&&t.env.MONDAY_COM_PROTOCOL||"https",s=i&&t.env.MONDAY_COM_DOMAIN||"monday.com",a=`${o}://api.${s}/v2`,c=`${o}://auth.${s}/oauth2/authorize`,u=`${o}://auth.${s}/oauth2/token`;e.exports={MONDAY_DOMAIN:s,MONDAY_PROTOCOL:o,MONDAY_API_URL:a,MONDAY_OAUTH_URL:c,MONDAY_OAUTH_TOKEN_URL:u}}).call(this,n(6))},function(e,t,n){var r,i;const{isBrowser:o}=n(0),s=n(o?4:12);"undefined"!=typeof self&&self,void 0===(i="function"==typeof(r=function(){return window.mondaySdk=s,s})?r.call(t,n,t,e):r)||(e.exports=i)},function(e,t,n){const r=n(1),{MONDAY_OAUTH_URL:i}=n(2),{convertToArrayIfNeeded:o}=n(0),{initScrollHelperIfNeeded:s}=n(9),{initBackgroundTracking:a}=n(10),c=[];class u{constructor(e={}){this._clientId=e.clientId,this._apiToken=e.apiToken,this.listeners={},this.setClientId=this.setClientId.bind(this),this.setToken=this.setToken.bind(this),this.api=this.api.bind(this),this.listen=this.listen.bind(this),this.get=this.get.bind(this),this.set=this.set.bind(this),this.execute=this.execute.bind(this),this.oauth=this.oauth.bind(this),this._receiveMessage=this._receiveMessage.bind(this),this.storage={instance:{setItem:this.setStorageInstanceItem.bind(this),getItem:this.getStorageInstanceItem.bind(this),deleteItem:this.deleteStorageInstanceItem.bind(this)}},window.addEventListener("message",this._receiveMessage,!1),e.withoutScrollHelper||s(),a(this)}setClientId(e){this._clientId=e}setToken(e){this._apiToken=e}api(e,t={}){const n={query:e,variables:t.variables},i=t.token||this._apiToken;return i?r.execute(n,i):new Promise((e,t)=>{this._localApi("api",{params:n}).then(t=>{e(t.data)}).catch(e=>t(e))})}listen(e,t,n){o(e).forEach(e=>{this._addListener(e,t),this._localApi("listen",{type:e,params:n})})}get(e,t){return this._localApi("get",{type:e,params:t})}set(e,t){return this._localApi("set",{type:e,params:t})}execute(e,t){return this._localApi("execute",{type:e,params:t})}track(e,t){return this.execute("track",{name:e,data:t})}oauth(e={}){const t=e.clientId||this._clientId;if(!t)throw new Error("clientId is required");const n=`${e.mondayOauthUrl||i}?client_id=${t}`;window.location=n}setStorageInstanceItem(e,t,n={}){return this._localApi("storage",{method:"set",key:e,value:t,options:n,segment:"instance"})}getStorageInstanceItem(e,t={}){return this._localApi("storage",{method:"get",key:e,options:t,segment:"instance"})}deleteStorageInstanceItem(e,t={}){return this._localApi("storage",{method:"delete",key:e,options:t,segment:"instance"})}_localApi(e,t){return new Promise((r,i)=>{const o=this._generateRequestId(),s=this._clientId,a=n(11).version;window.parent.postMessage({method:e,args:t,requestId:o,clientId:s,version:a},"*"),this._addListener(o,e=>{if(e.errorMessage){const t=new Error(e.errorMessage);t.data=e.data,i(t)}else r(e)})})}_receiveMessage(e){const{method:t,type:n,requestId:r}=e.data;let i=[...this.listeners[t]||c,...this.listeners[n]||c,...this.listeners[r]||c];i&&i.forEach(t=>{try{t(e.data)}catch(e){console.error("Message callback error: ",e)}})}_addListener(e,t){this.listeners[e]=this.listeners[e]||[],this.listeners[e].push(t)}_generateRequestId(){return Math.random().toString(36).substr(2,9)}_removeEventListener(){window.removeEventListener("message",this._receiveMessage,!1)}_clearListeners(){this.listeners=[]}}e.exports=function(e={}){return new u(e)}},function(e,t,n){const{MONDAY_API_URL:r,MONDAY_OAUTH_TOKEN_URL:i}=n(2),o=n(7),s="Could not parse JSON from monday.com's GraphQL API response",a="Token is required",c="Received timeout from monday.com's GraphQL API";e.exports={execute:async function(e,t,n={}){if(!t&&n.url!==i)throw new Error(a);const u=`${n.url||r}${n.path||""}`;let l=await function(e,t,n,r={}){return o.nodeFetch(e,{method:r.method||"POST",body:JSON.stringify(t||{}),headers:{Authorization:n,"Content-Type":"application/json"}})}(u,e,t,n);const d=l.status,h=l.headers.get("content-type");if(!h||!h.includes("application/json")){if(504===d)throw new Error(c);const e=await l.text();throw new Error(e)}try{return await l.json()}catch(e){throw new Error(s)}},COULD_NOT_PARSE_JSON_RESPONSE_ERROR:s,TOKEN_IS_REQUIRED_ERROR:a,API_TIMEOUT_ERROR:c}},function(e,t){var n,r,i=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(e){n=o}try{r="function"==typeof clearTimeout?clearTimeout:s}catch(e){r=s}}();var c,u=[],l=!1,d=-1;function h(){l&&c&&(l=!1,c.length?u=c.concat(u):d=-1,u.length&&p())}function p(){if(!l){var e=a(h);l=!0;for(var t=u.length;t;){for(c=u,u=[];++d<t;)c&&c[d].run();d=-1,t=u.length}c=null,l=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===s||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function f(e,t){this.fun=e,this.array=t}function m(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];u.push(new f(e,t)),1!==u.length||l||a(p)},f.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=m,i.addListener=m,i.once=m,i.off=m,i.removeListener=m,i.removeAllListeners=m,i.emit=m,i.prependListener=m,i.prependOnceListener=m,i.listeners=function(e){return[]},i.binding=function(e){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(e){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(e,t,n){const r=n(8);e.exports={nodeFetch:function(e,t={}){return r(e,t)}}},function(e,t,n){"use strict";var r=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==r)return r;throw new Error("unable to locate global object")}();e.exports=t=r.fetch,t.default=r.fetch.bind(r),t.Headers=r.Headers,t.Request=r.Request,t.Response=r.Response},function(e,t){let n=!1;e.exports={initScrollHelperIfNeeded:function(){if(n)return;n=!0;const e=document.createElement("style");e.appendChild(document.createTextNode('body::before { content: ""; position: fixed; top: 0; right: 0; bottom: 0; left: 0; pointer-events: none; z-index: 2147483647; /* mondaySdk css - can be disabled with: mondaySdk({withoutScrollHelper: true }) */ }')),(document.head||document.getElementsByTagName("head")[0]).appendChild(e)}}},function(e,t){let n=!1;e.exports={initBackgroundTracking:e=>{if(n)return;n=!0;const t=()=>{e.track("ping")};t(),setInterval(t,3e5)}}},function(e){e.exports=JSON.parse('{"name":"monday-sdk-js","version":"0.1.3","private":false,"repository":"https://github.com/mondaycom/monday-sdk-js","main":"src/index.js","author":"talharamati <tal@monday.com>","license":"MIT","files":["LICENSE","README.md","dist/","src/","server-sdk.js"],"dependencies":{"@types/source-map":"^0.5.2","node-fetch":"^2.6.0"},"devDependencies":{"@babel/cli":"^7.6.0","@babel/core":"^7.6.0","@babel/node":"^7.6.1","@babel/preset-env":"^7.6.0","@babel/preset-react":"^7.0.0","@babel/register":"^7.6.0","babel-loader":"^8.0.6","chai":"^4.2.0","eslint":"^6.8.0","jsdom":"^16.2.0","mocha":"^7.1.0","prettier":"^1.19.1","sinon":"^9.0.0","sinon-chai":"^3.5.0","webpack":"^4.38.0","webpack-cli":"^3.3.6","webpack-dev-server":"^3.7.2"},"scripts":{"start":"webpack-dev-server","build":"webpack --mode=production --env.WEBPACK_BUILD=true","test":"mocha \'./src/**/*-test.js\'","test:watch":"mocha \'./src/**/*-test.js\' --watch","precommit":"yarn lint && yarn style-check","lint":"eslint \'./src/**/*.*\'","style-check":"prettier --check \'./src/**/*.js\'"}}')},function(e,t,n){const r=n(1),{oauthToken:i}=n(13),o="Should send 'token' as an option or call mondaySdk.setToken(TOKEN)";class s{constructor(e={}){this._token=e.token,this.setToken=this.setToken.bind(this),this.api=this.api.bind(this)}setToken(e){this._token=e}async api(e,t={}){const n={query:e,variables:t.variables},i=t.token||this._token;if(!i)throw new Error(o);return await r.execute(n,i)}oauthToken(e,t,n){return i(e,t,n)}}e.exports=function(e={}){return new s(e)}},function(e,t,n){const{execute:r}=n(1),{MONDAY_OAUTH_TOKEN_URL:i}=n(2);e.exports={oauthToken:(e,t,n)=>{return r({code:e,client_id:t,client_secret:n},null,{url:i})}}}]);
|
package/package.json
CHANGED
package/src/client.js
CHANGED
|
@@ -18,6 +18,7 @@ class MondayClientSdk {
|
|
|
18
18
|
this.api = this.api.bind(this);
|
|
19
19
|
this.listen = this.listen.bind(this);
|
|
20
20
|
this.get = this.get.bind(this);
|
|
21
|
+
this.set = this.set.bind(this);
|
|
21
22
|
this.execute = this.execute.bind(this);
|
|
22
23
|
this.oauth = this.oauth.bind(this);
|
|
23
24
|
this._receiveMessage = this._receiveMessage.bind(this);
|
|
@@ -74,6 +75,10 @@ class MondayClientSdk {
|
|
|
74
75
|
return this._localApi("get", { type, params });
|
|
75
76
|
}
|
|
76
77
|
|
|
78
|
+
set(type, params) {
|
|
79
|
+
return this._localApi("set", { type, params });
|
|
80
|
+
}
|
|
81
|
+
|
|
77
82
|
execute(type, params) {
|
|
78
83
|
return this._localApi("execute", { type, params });
|
|
79
84
|
}
|