copper-sdk 0.6.2 → 0.7.0

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/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ ## 0.7.0
2
+
3
+ * Bump all dependencies as far as they can go on Node 10
package/README.md CHANGED
@@ -1,10 +1,8 @@
1
1
  Copper App SDK
2
2
  ====================
3
3
 
4
- [![Travis branch](https://img.shields.io/travis/ProsperWorks/copper-sdk/master.svg?style=flat-square)](https://travis-ci.org/ProsperWorks/copper-sdk)
5
4
  [![npm](https://img.shields.io/npm/v/copper-sdk.svg?style=flat-square)](https://www.npmjs.com/package/copper-sdk)
6
- [![Test Coverage](https://api.codeclimate.com/v1/badges/d8ef6bf3d4669616c465/test_coverage)](https://codeclimate.com/github/ProsperWorks/copper-sdk/test_coverage)
7
- [![Maintainability](https://api.codeclimate.com/v1/badges/d8ef6bf3d4669616c465/maintainability)](https://codeclimate.com/github/ProsperWorks/copper-sdk/maintainability)
5
+
8
6
 
9
7
  The javascript SDK provides client-side functionalities for adding embedded app to the Copper web client.
10
8
 
@@ -51,6 +49,9 @@ https://docs.copper.com/copper-sdk
51
49
 
52
50
  ## Development
53
51
  ### Prerequisites
52
+
53
+ We recommend Node 10 or newer.
54
+
54
55
  Confirm all packages have been installed before development. Yarn will be used for this particular project.
55
56
 
56
57
  ```bash
@@ -60,8 +61,10 @@ yarn
60
61
  ### Developing SDK
61
62
  ```bash
62
63
  ## watch changes
64
+ yarn dev
65
+
66
+ ## or run separately
63
67
  yarn dev:es
64
- # or
65
68
  yarn dev:commonjs
66
69
 
67
70
  ## build
@@ -2,21 +2,21 @@
2
2
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
3
3
  typeof define === 'function' && define.amd ? define(factory) :
4
4
  (global = global || self, global.Copper = factory());
5
- }(this, function () { 'use strict';
5
+ }(this, (function () { 'use strict';
6
6
 
7
7
  /*! *****************************************************************************
8
- Copyright (c) Microsoft Corporation. All rights reserved.
9
- Licensed under the Apache License, Version 2.0 (the "License"); you may not use
10
- this file except in compliance with the License. You may obtain a copy of the
11
- License at http://www.apache.org/licenses/LICENSE-2.0
8
+ Copyright (c) Microsoft Corporation.
12
9
 
13
- THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
- KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
15
- WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
16
- MERCHANTABLITY OR NON-INFRINGEMENT.
10
+ Permission to use, copy, modify, and/or distribute this software for any
11
+ purpose with or without fee is hereby granted.
17
12
 
18
- See the Apache Version 2.0 License for specific language governing permissions
19
- and limitations under the License.
13
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
14
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
15
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
16
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
17
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
18
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19
+ PERFORMANCE OF THIS SOFTWARE.
20
20
  ***************************************************************************** */
21
21
 
22
22
  var __assign = function() {
@@ -31,10 +31,11 @@
31
31
  };
32
32
 
33
33
  function __awaiter(thisArg, _arguments, P, generator) {
34
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
34
35
  return new (P || (P = Promise))(function (resolve, reject) {
35
36
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
36
37
  function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
37
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
38
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
38
39
  step((generator = generator.apply(thisArg, _arguments || [])).next());
39
40
  });
40
41
  }
@@ -67,7 +68,7 @@
67
68
  }
68
69
  }
69
70
 
70
- var version = "0.6.2";
71
+ var version = "0.7.0";
71
72
 
72
73
  var ENTITY_PATH_MAP = {
73
74
  lead: 'leads',
@@ -168,7 +169,7 @@
168
169
  get: function () {
169
170
  return this._promise;
170
171
  },
171
- enumerable: true,
172
+ enumerable: false,
172
173
  configurable: true
173
174
  });
174
175
  return Deferred;
@@ -321,6 +322,8 @@
321
322
  this._listenMessage();
322
323
  // listen to contextUpdated event
323
324
  this._subscribeContextUpdated();
325
+ // notify parent frame init
326
+ this._postMessage('init');
324
327
  }
325
328
  Copper.init = function () {
326
329
  var parentOrigin = getParameterByName('origin');
@@ -337,14 +340,14 @@
337
340
  get: function () {
338
341
  return version;
339
342
  },
340
- enumerable: true,
343
+ enumerable: false,
341
344
  configurable: true
342
345
  });
343
346
  Object.defineProperty(Copper.prototype, "win", {
344
347
  get: function () {
345
348
  return this._win;
346
349
  },
347
- enumerable: true,
350
+ enumerable: false,
348
351
  configurable: true
349
352
  });
350
353
  Copper.prototype.getContext = function () {
@@ -563,7 +566,7 @@
563
566
  };
564
567
  Copper.prototype._postMessage = function (type, message) {
565
568
  if (message === void 0) { message = {}; }
566
- this.win.top.postMessage(__assign({}, message, {
569
+ this.win.top.postMessage(__assign(__assign({}, message), {
567
570
  // as a credential to the parent frame, so parent frame can recoganize the origin
568
571
  instanceId: this.instanceId,
569
572
  // tell parent frame current sdk version
@@ -642,14 +645,14 @@
642
645
  executor();
643
646
  return deferred.promise;
644
647
  };
645
- Copper.prototype._deferredPost = function (name$$1, data) {
648
+ Copper.prototype._deferredPost = function (name, data) {
646
649
  var _this = this;
647
- return this._createDeferredMethod(name$$1, function () {
650
+ return this._createDeferredMethod(name, function () {
648
651
  if (data) {
649
- _this._postMessage(name$$1, data);
652
+ _this._postMessage(name, data);
650
653
  }
651
654
  else {
652
- _this._postMessage(name$$1);
655
+ _this._postMessage(name);
653
656
  }
654
657
  });
655
658
  };
@@ -665,4 +668,4 @@
665
668
 
666
669
  return Copper;
667
670
 
668
- }));
671
+ })));
@@ -1 +1 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Copper=e()}(this,function(){"use strict";var n=function(){return(n=Object.assign||function(t){for(var e,n=1,i=arguments.length;n<i;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)};function e(o,s,a,u){return new(a||(a=Promise))(function(t,e){function n(t){try{r(u.next(t))}catch(t){e(t)}}function i(t){try{r(u.throw(t))}catch(t){e(t)}}function r(e){e.done?t(e.value):new a(function(t){t(e.value)}).then(n,i)}r((u=u.apply(o,s||[])).next())})}function f(n,i){var r,o,s,t,a={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return t={next:e(0),throw:e(1),return:e(2)},"function"==typeof Symbol&&(t[Symbol.iterator]=function(){return this}),t;function e(e){return function(t){return function(e){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,o&&(s=2&e[0]?o.return:e[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,e[1])).done)return s;switch(o=0,s&&(e=[2&e[0],s.value]),e[0]){case 0:case 1:s=e;break;case 4:return a.label++,{value:e[1],done:!1};case 5:a.label++,o=e[1],e=[0];continue;case 7:e=a.ops.pop(),a.trys.pop();continue;default:if(!(s=0<(s=a.trys).length&&s[s.length-1])&&(6===e[0]||2===e[0])){a=0;continue}if(3===e[0]&&(!s||s[0]<e[1]&&e[1]<s[3])){a.label=e[1];break}if(6===e[0]&&a.label<s[1]){a.label=s[1],s=e;break}if(s&&a.label<s[2]){a.label=s[2],a.ops.push(e);break}s[2]&&a.ops.pop(),a.trys.pop();continue}e=i.call(n,a)}catch(t){e=[6,t],o=0}finally{r=s=0}if(5&e[0])throw e[1];return{value:e[0]?e[1]:void 0,done:!0}}([e,t])}}}var h,t,r="0.6.2",l={lead:"leads",person:"people",company:"companies",opportunity:"opportunities",task:"tasks",project:"projects"};(t=h||(h={})).ActivityLog="ActivityLog",t.ListView="ListView",t.Related="Related";var o=function(){function t(){var n=this;this.resolve=function(t){n._resolve(t)},this.reject=function(t){n._reject(t)},this._promise=new Promise(function(t,e){n._resolve=t,n._reject=e})}return Object.defineProperty(t.prototype,"promise",{get:function(){return this._promise},enumerable:!0,configurable:!0}),t}();function s(t,e){void 0===e&&(e=""),e||(e=window.location.href),t=t.replace(/[[]]/g,"\\$&");var n=RegExp("[?&]"+t+"(=([^&#]*)|&|#|$)").exec(e);return n&&n[2]?decodeURIComponent(n[2].replace(/\+/g," ")):""}function a(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];console.log.apply(console,t)}function u(t,e){t[e]||(t[e]=[])}function y(t,e){void 0===e&&(e=1e3),setTimeout(function(){t()},e)}var c=function(){function t(t,e,n,i){void 0===n&&(n=[]);var r=this._getEntityDataDefinition(e,n);r.type={enumerable:!1,writable:!1,value:t},r._onSave={enumerable:!1,value:i},Object.defineProperties(this,r)}return t.prototype.save=function(){return e(this,void 0,void 0,function(){return f(this,function(t){switch(t.label){case 0:return this._onSave?[4,this._onSave(this)]:[3,2];case 1:return[2,t.sent()];case 2:return[2,null]}})})},t.prototype.toJSON=function(){return JSON.stringify(this.toObject())},t.prototype.toObject=function(){var e=this,n={};return Object.keys(this).forEach(function(t){n[t]=e[t]}),n},t.prototype._getEntityDataDefinition=function(e,n){void 0===n&&(n=[]);var i={};return Object.keys(e).forEach(function(t){i[t]=-1==n.indexOf(t)?{get:function(){return e[t]},set:function(){a("property "+t+" is read only")},enumerable:!0}:{value:e[t],writable:!0,enumerable:!0}}),i},t}();return function(){function i(t,e,n,i){if(void 0===i&&(i=window),this.parentOrigin=t,this.instanceId=e,this.options=n,this._win=i,this.deferredQueues={},this.events={},!this.parentOrigin||!this.instanceId)throw new TypeError("parentOrigin or instanceId is empty");this._listenMessage(),this._subscribeContextUpdated()}return i.init=function(){var t=s("origin"),e=s("instanceId"),n={isGlobal:"1"===s("isGlobal")};if(!("undefined"==typeof window?(a("Copper can only run in browser environment"),0):(window.top===window&&a("Copper should be inside an iframe, otherwise it might not work as expected."),1)))throw Error("Environment checking does not pass.");return new i(t,e,n)},Object.defineProperty(i,"version",{get:function(){return r},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"win",{get:function(){return this._win},enumerable:!0,configurable:!0}),i.prototype.getContext=function(){return e(this,void 0,void 0,function(){var e;return f(this,function(t){switch(t.label){case 0:return[4,this._deferredPost("getContext")];case 1:return e=t.sent(),[2,this._createContextModel(e)]}})})},i.prototype.getUserInfo=function(){return e(this,void 0,void 0,function(){return f(this,function(t){return[2,this._deferredPost("getUserInfo")]})})},i.prototype.getRouteInfo=function(){return e(this,void 0,void 0,function(){return f(this,function(t){return[2,this._deferredPost("getRouteInfo")]})})},i.prototype.saveContext=function(n){return e(this,void 0,void 0,function(){var e;return f(this,function(t){switch(t.label){case 0:return[4,this._deferredPost("saveContext",{data:{entityType:n.type,entityData:n.toObject()}})];case 1:return e=t.sent(),[2,this._createContextModel(e)]}})})},i.prototype.setAppUI=function(t){this._postMessage("setUI",{data:t})},i.prototype.showModal=function(t){void 0===t&&(t={}),this._postMessage("showModal",{params:t})},i.prototype.closeModal=function(){this._postMessage("closeModal")},i.prototype.publishMessage=function(t,e,n){void 0===n&&(n={}),this._postMessage("publishMessage",{target:e,data:{type:t,msg:n}})},i.prototype.logActivity=function(s,a,u,c){return void 0===c&&(c=0),e(this,void 0,void 0,function(){var o;return f(this,function(t){switch(t.label){case 0:return[4,this._getCachedContext()];case 1:return o=t.sent(),r={parent:{type:(e=o).type,id:e.id},type:{category:"user",id:(n={activityType:s,details:a,activityDate:u}).activityType},details:n.details},(i=n.activityDate)&&(r.activity_date=i),[2,this._action({url:"/v1/activities",method:"POST",data:r,target:{name:h.ActivityLog}},c)]}var e,n,i,r})})},i.prototype.createEntity=function(c,p,d){return void 0===d&&(d=0),e(this,void 0,void 0,function(){var r,o,s,a,u=this;return f(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,this._getCachedContext()];case 1:return r=t.sent(),[3,3];case 2:return t.sent(),r={},[3,3];case 3:return s=(o={url:"/v1/"+l[n=(e={entityType:c,data:p}).entityType],method:"POST",data:i=e.data,target:n===r.type?{name:h.ListView,data:{entityType:n,entityData:i}}:null}).target,[4,this.api(o.url,{method:o.method,body:JSON.stringify(o.data)})];case 4:return a=t.sent(),s&&s.data&&(s.data.entityData=a,y(function(){u.refreshUI(s)},d)),[2,a]}var e,n,i})})},i.prototype.relateEntity=function(a,u,c,p){return void 0===p&&(p=0),e(this,void 0,void 0,function(){var s;return f(this,function(t){switch(t.label){case 0:return[4,this._getCachedContext()];case 1:return s=t.sent(),e=s,[2,this._action({url:"/v1/"+l[i=(n={entityType:a,entityId:parseInt(u,10),data:c}).entityType]+"/"+(r=n.entityId)+"/related",method:"POST",data:{resource:o=n.data},target:i===e.type&&r===e.id?{name:h.Related,data:o}:null},p)]}var e,n,i,r,o})})},i.prototype.refreshUI=function(t){this._postMessage("refreshUI",{target:t})},i.prototype.on=function(t,e){u(this.events,t),this.events[t].push(e)},i.prototype.trigger=function(t,e){var n=this;this.events[t]&&this.events[t].forEach(function(t){t.call(n,e)})},i.prototype.api=function(t,e){if(!t)return Promise.reject({id:"sdk-api",version:i.version,detail:"url cannot be empty"});if(e&&e.body)try{JSON.parse(e.body)}catch(t){return Promise.reject({id:"sdk-api",version:i.version,detail:"body must be a valid JSON string"})}return this._deferredPost("api",{url:t,options:e})},i.prototype.navigateToEntityDetail=function(t,e){return this._deferredPost("navigateToEntityDetail",{entityType:t,entityId:e})},i.prototype.getSelectedRecords=function(t){var e=void 0===t?{}:t,n=e.pageSize,i=e.pageNumber;return this._deferredPost("getSelectedRecords",{pageSize:void 0===n?100:n,pageNumber:void 0===i?0:i})},i.prototype.getConfig=function(){return this._deferredPost("getConfig")},i.prototype._getCachedContext=function(){return e(this,void 0,void 0,function(){return f(this,function(t){switch(t.label){case 0:return this._context?[2,this._context]:[4,this.getContext()];case 1:return[2,t.sent().context]}})})},i.prototype._postMessage=function(t,e){void 0===e&&(e={}),this.win.top.postMessage(n({},e,{instanceId:this.instanceId,version:r,type:t}),this.parentOrigin)},i.prototype._listenMessage=function(){var e=this;this.win.addEventListener("message",function(t){e._isOriginValid(t)&&(e._resolveDeferred(t.data.type,t.data),t.data.type&&e.trigger(t.data.type,t.data.msg||t.data.data))},!1)},i.prototype._isOriginValid=function(t){return t.origin===this.parentOrigin},i.prototype._enqueueDeferred=function(t,e){u(this.deferredQueues,t),this.deferredQueues[t].push(e)},i.prototype._resolveDeferred=function(t,e){if(this.deferredQueues[t]){var n=this.deferredQueues[t].shift();if(n){if(e.error)return n.reject(e.error);n.resolve(e.data)}}},i.prototype._createContextModel=function(t){var e=t.entityType,n=new c(e,t.entityData,t.editableFields,this.saveContext.bind(this));return{type:e,context:this._context=n}},i.prototype._action=function(t,i){var r=t.url,o=t.method,s=t.data,a=t.target;return e(this,void 0,void 0,function(){var e,n=this;return f(this,function(t){switch(t.label){case 0:return[4,this.api(r,{method:o,body:JSON.stringify(s)})];case 1:return e=t.sent(),a&&y(function(){n.refreshUI(a)},i),[2,e]}})})},i.prototype._createDeferredMethod=function(t,e){var n=new o;return this._enqueueDeferred(t,n),e(),n.promise},i.prototype._deferredPost=function(t,e){var n=this;return this._createDeferredMethod(t,function(){e?n._postMessage(t,e):n._postMessage(t)})},i.prototype._subscribeContextUpdated=function(){var t=this;this.on("contextUpdated",function(){t._context=null})},i}()});
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Copper=e()}(this,function(){"use strict";var n=function(){return(n=Object.assign||function(t){for(var e,n=1,i=arguments.length;n<i;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)};function e(t,s,a,u){return new(a=a||Promise)(function(n,e){function i(t){try{o(u.next(t))}catch(t){e(t)}}function r(t){try{o(u.throw(t))}catch(t){e(t)}}function o(t){var e;t.done?n(t.value):((e=t.value)instanceof a?e:new a(function(t){t(e)})).then(i,r)}o((u=u.apply(t,s||[])).next())})}function d(i,r){var o,s,a,u={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},t={next:e(0),throw:e(1),return:e(2)};return"function"==typeof Symbol&&(t[Symbol.iterator]=function(){return this}),t;function e(n){return function(t){var e=[n,t];if(o)throw new TypeError("Generator is already executing.");for(;u;)try{if(o=1,s&&(a=2&e[0]?s.return:e[0]?s.throw||((a=s.return)&&a.call(s),0):s.next)&&!(a=a.call(s,e[1])).done)return a;switch(s=0,(e=a?[2&e[0],a.value]:e)[0]){case 0:case 1:a=e;break;case 4:return u.label++,{value:e[1],done:!1};case 5:u.label++,s=e[1],e=[0];continue;case 7:e=u.ops.pop(),u.trys.pop();continue;default:if(!(a=0<(a=u.trys).length&&a[a.length-1])&&(6===e[0]||2===e[0])){u=0;continue}if(3===e[0]&&(!a||a[0]<e[1]&&e[1]<a[3]))u.label=e[1];else if(6===e[0]&&u.label<a[1])u.label=a[1],a=e;else{if(!a||a[2]<=u.label){a[2]&&u.ops.pop(),u.trys.pop();continue}u.label=a[2],u.ops.push(e)}}e=r.call(i,u)}catch(t){e=[6,t],s=0}finally{o=a=0}if(5&e[0])throw e[1];return{value:e[0]?e[1]:void 0,done:!0}}}}var f,t,i="0.7.0",h={lead:"leads",person:"people",company:"companies",opportunity:"opportunities",task:"tasks",project:"projects"};(t=f=f||{}).ActivityLog="ActivityLog",t.ListView="ListView";Object.defineProperty(o.prototype,"promise",{get:function(){return this._promise},enumerable:!(t.Related="Related"),configurable:!0});var r=o;function o(){var n=this;this.resolve=function(t){n._resolve(t)},this.reject=function(t){n._reject(t)},this._promise=new Promise(function(t,e){n._resolve=t,n._reject=e})}function s(t,e){e=(e=void 0===e?"":e)||window.location.href,t=t.replace(/[[]]/g,"\\$&");t=RegExp("[?&]"+t+"(=([^&#]*)|&|#|$)").exec(e);return t&&t[2]?decodeURIComponent(t[2].replace(/\+/g," ")):""}function a(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];console.log.apply(console,t)}function u(t,e){t[e]||(t[e]=[])}function l(t,e){setTimeout(function(){t()},e=void 0===e?1e3:e)}p.prototype.save=function(){return e(this,void 0,void 0,function(){return d(this,function(t){switch(t.label){case 0:return this._onSave?[4,this._onSave(this)]:[3,2];case 1:return[2,t.sent()];case 2:return[2,null]}})})},p.prototype.toJSON=function(){return JSON.stringify(this.toObject())},p.prototype.toObject=function(){var e=this,n={};return Object.keys(this).forEach(function(t){n[t]=e[t]}),n},p.prototype._getEntityDataDefinition=function(e,n){void 0===n&&(n=[]);var i={};return Object.keys(e).forEach(function(t){~n.indexOf(t)?i[t]={value:e[t],writable:!0,enumerable:!0}:i[t]={get:function(){return e[t]},set:function(){a("property "+t+" is read only")},enumerable:!0}}),i};var c=p;function p(t,e,n,i){e=this._getEntityDataDefinition(e,n=void 0===n?[]:n);e.type={enumerable:!1,writable:!1,value:t},e._onSave={enumerable:!1,value:i},Object.defineProperties(this,e)}function y(t,e,n,i){if(void 0===i&&(i=window),this.parentOrigin=t,this.instanceId=e,this.options=n,this._win=i,this.deferredQueues={},this.events={},!this.parentOrigin||!this.instanceId)throw new TypeError("parentOrigin or instanceId is empty");this._listenMessage(),this._subscribeContextUpdated(),this._postMessage("init")}return y.init=function(){var t=s("origin"),e=s("instanceId"),n={isGlobal:"1"===s("isGlobal")};if(function(){if("undefined"!=typeof window)return window.top===window&&a("Copper should be inside an iframe, otherwise it might not work as expected."),1;a("Copper can only run in browser environment")}())return new y(t,e,n);throw Error("Environment checking does not pass.")},Object.defineProperty(y,"version",{get:function(){return i},enumerable:!1,configurable:!0}),Object.defineProperty(y.prototype,"win",{get:function(){return this._win},enumerable:!1,configurable:!0}),y.prototype.getContext=function(){return e(this,void 0,void 0,function(){var e;return d(this,function(t){switch(t.label){case 0:return[4,this._deferredPost("getContext")];case 1:return e=t.sent(),[2,this._createContextModel(e)]}})})},y.prototype.getUserInfo=function(){return e(this,void 0,void 0,function(){return d(this,function(t){return[2,this._deferredPost("getUserInfo")]})})},y.prototype.getRouteInfo=function(){return e(this,void 0,void 0,function(){return d(this,function(t){return[2,this._deferredPost("getRouteInfo")]})})},y.prototype.saveContext=function(n){return e(this,void 0,void 0,function(){var e;return d(this,function(t){switch(t.label){case 0:return[4,this._deferredPost("saveContext",{data:{entityType:n.type,entityData:n.toObject()}})];case 1:return e=t.sent(),[2,this._createContextModel(e)]}})})},y.prototype.setAppUI=function(t){this._postMessage("setUI",{data:t})},y.prototype.showModal=function(t){this._postMessage("showModal",{params:t=void 0===t?{}:t})},y.prototype.closeModal=function(){this._postMessage("closeModal")},y.prototype.publishMessage=function(t,e,n){this._postMessage("publishMessage",{target:e,data:{type:t,msg:n=void 0===n?{}:n}})},y.prototype.logActivity=function(r,o,s,a){return void 0===a&&(a=0),e(this,void 0,void 0,function(){var i;return d(this,function(t){switch(t.label){case 0:return[4,this._getCachedContext()];case 1:return i=t.sent(),e={parent:{type:(e=i).type,id:e.id},type:{category:"user",id:(n={activityType:r,details:o,activityDate:s}).activityType},details:n.details},(n=n.activityDate)&&(e.activity_date=n),i={url:"/v1/activities",method:"POST",data:e,target:{name:f.ActivityLog}},[2,this._action(i,a)]}var e,n})})},y.prototype.createEntity=function(u,c,p){return void 0===p&&(p=0),e(this,void 0,void 0,function(){var r,o,s,a=this;return d(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,this._getCachedContext()];case 1:return r=t.sent(),[3,3];case 2:return t.sent(),r={},[3,3];case 3:return e=r,i=(n={entityType:u,data:c}).entityType,n=n.data,o=(s={url:"/v1/"+h[i],method:"POST",data:n,target:i===e.type?{name:f.ListView,data:{entityType:i,entityData:n}}:null}).target,[4,this.api(s.url,{method:s.method,body:JSON.stringify(s.data)})];case 4:return s=t.sent(),o&&o.data&&(o.data.entityData=s,l(function(){a.refreshUI(o)},p)),[2,s]}var e,n,i})})},y.prototype.relateEntity=function(o,s,a,u){return void 0===u&&(u=0),e(this,void 0,void 0,function(){var r;return d(this,function(t){switch(t.label){case 0:return[4,this._getCachedContext()];case 1:return r=t.sent(),r={url:"/v1/"+h[n=(e={entityType:o,entityId:parseInt(s,10),data:a}).entityType]+"/"+(i=e.entityId)+"/related",method:"POST",data:{resource:e=e.data},target:n===(n=r).type&&i===n.id?{name:f.Related,data:e}:null},[2,this._action(r,u)]}var e,n,i})})},y.prototype.refreshUI=function(t){this._postMessage("refreshUI",{target:t})},y.prototype.on=function(t,e){u(this.events,t),this.events[t].push(e)},y.prototype.trigger=function(t,e){var n=this;this.events[t]&&this.events[t].forEach(function(t){t.call(n,e)})},y.prototype.api=function(t,e){if(!t)return Promise.reject({id:"sdk-api",version:y.version,detail:"url cannot be empty"});if(e&&e.body)try{JSON.parse(e.body)}catch(t){return Promise.reject({id:"sdk-api",version:y.version,detail:"body must be a valid JSON string"})}return this._deferredPost("api",{url:t,options:e})},y.prototype.navigateToEntityDetail=function(t,e){return this._deferredPost("navigateToEntityDetail",{entityType:t,entityId:e})},y.prototype.getSelectedRecords=function(t){var t=void 0===t?{}:t,e=t.pageSize,t=t.pageNumber;return this._deferredPost("getSelectedRecords",{pageSize:void 0===e?100:e,pageNumber:void 0===t?0:t})},y.prototype.getConfig=function(){return this._deferredPost("getConfig")},y.prototype._getCachedContext=function(){return e(this,void 0,void 0,function(){return d(this,function(t){switch(t.label){case 0:return this._context?[2,this._context]:[4,this.getContext()];case 1:return[2,t.sent().context]}})})},y.prototype._postMessage=function(t,e){this.win.top.postMessage(n(n({},e=void 0===e?{}:e),{instanceId:this.instanceId,version:i,type:t}),this.parentOrigin)},y.prototype._listenMessage=function(){var e=this;this.win.addEventListener("message",function(t){e._isOriginValid(t)&&(e._resolveDeferred(t.data.type,t.data),t.data.type)&&e.trigger(t.data.type,t.data.msg||t.data.data)},!1)},y.prototype._isOriginValid=function(t){return t.origin===this.parentOrigin},y.prototype._enqueueDeferred=function(t,e){u(this.deferredQueues,t),this.deferredQueues[t].push(e)},y.prototype._resolveDeferred=function(t,e){if(this.deferredQueues[t]){t=this.deferredQueues[t].shift();if(t){if(e.error)return t.reject(e.error);t.resolve(e.data)}}},y.prototype._createContextModel=function(t){var e=t.entityType,t=new c(e,t.entityData,t.editableFields,this.saveContext.bind(this));return{type:e,context:this._context=t}},y.prototype._action=function(t,i){var r=t.url,o=t.method,s=t.data,a=t.target;return e(this,void 0,void 0,function(){var e,n=this;return d(this,function(t){switch(t.label){case 0:return[4,this.api(r,{method:o,body:JSON.stringify(s)})];case 1:return e=t.sent(),a&&l(function(){n.refreshUI(a)},i),[2,e]}})})},y.prototype._createDeferredMethod=function(t,e){var n=new r;return this._enqueueDeferred(t,n),e(),n.promise},y.prototype._deferredPost=function(t,e){var n=this;return this._createDeferredMethod(t,function(){e?n._postMessage(t,e):n._postMessage(t)})},y.prototype._subscribeContextUpdated=function(){this.on("contextUpdated",function(){0})},y});
package/dist/defer.d.ts CHANGED
@@ -3,7 +3,7 @@ export default class Deferred<T> {
3
3
  private _resolve;
4
4
  private _reject;
5
5
  constructor();
6
- readonly promise: Promise<T>;
6
+ get promise(): Promise<T>;
7
7
  resolve: (value?: T | PromiseLike<T> | undefined) => void;
8
8
  reject: (reason?: any) => void;
9
9
  }
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export default class Copper {
7
7
  private options;
8
8
  private _win;
9
9
  static init(): Copper;
10
- static readonly version: string;
10
+ static get version(): string;
11
11
  /**
12
12
  * store deferred queues by name
13
13
  */
@@ -23,7 +23,7 @@ export default class Copper {
23
23
  * @memberof Copper
24
24
  */
25
25
  constructor(parentOrigin: string, instanceId: string, options: ISdkInitOptions, _win?: any);
26
- readonly win: Window;
26
+ get win(): Window;
27
27
  getContext(): Promise<IContextData>;
28
28
  getUserInfo(): Promise<any>;
29
29
  getRouteInfo(): Promise<any>;
package/es/copper-sdk.js CHANGED
@@ -1,16 +1,16 @@
1
1
  /*! *****************************************************************************
2
- Copyright (c) Microsoft Corporation. All rights reserved.
3
- Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4
- this file except in compliance with the License. You may obtain a copy of the
5
- License at http://www.apache.org/licenses/LICENSE-2.0
2
+ Copyright (c) Microsoft Corporation.
6
3
 
7
- THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
8
- KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
9
- WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
10
- MERCHANTABLITY OR NON-INFRINGEMENT.
4
+ Permission to use, copy, modify, and/or distribute this software for any
5
+ purpose with or without fee is hereby granted.
11
6
 
12
- See the Apache Version 2.0 License for specific language governing permissions
13
- and limitations under the License.
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
8
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
9
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
10
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
11
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
12
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13
+ PERFORMANCE OF THIS SOFTWARE.
14
14
  ***************************************************************************** */
15
15
 
16
16
  var __assign = function() {
@@ -25,10 +25,11 @@ var __assign = function() {
25
25
  };
26
26
 
27
27
  function __awaiter(thisArg, _arguments, P, generator) {
28
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
28
29
  return new (P || (P = Promise))(function (resolve, reject) {
29
30
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
30
31
  function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
31
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
32
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
32
33
  step((generator = generator.apply(thisArg, _arguments || [])).next());
33
34
  });
34
35
  }
@@ -61,7 +62,7 @@ function __generator(thisArg, body) {
61
62
  }
62
63
  }
63
64
 
64
- var version = "0.6.2";
65
+ var version = "0.7.0";
65
66
 
66
67
  var ENTITY_PATH_MAP = {
67
68
  lead: 'leads',
@@ -162,7 +163,7 @@ var Deferred = /** @class */ (function () {
162
163
  get: function () {
163
164
  return this._promise;
164
165
  },
165
- enumerable: true,
166
+ enumerable: false,
166
167
  configurable: true
167
168
  });
168
169
  return Deferred;
@@ -315,6 +316,8 @@ var Copper = /** @class */ (function () {
315
316
  this._listenMessage();
316
317
  // listen to contextUpdated event
317
318
  this._subscribeContextUpdated();
319
+ // notify parent frame init
320
+ this._postMessage('init');
318
321
  }
319
322
  Copper.init = function () {
320
323
  var parentOrigin = getParameterByName('origin');
@@ -331,14 +334,14 @@ var Copper = /** @class */ (function () {
331
334
  get: function () {
332
335
  return version;
333
336
  },
334
- enumerable: true,
337
+ enumerable: false,
335
338
  configurable: true
336
339
  });
337
340
  Object.defineProperty(Copper.prototype, "win", {
338
341
  get: function () {
339
342
  return this._win;
340
343
  },
341
- enumerable: true,
344
+ enumerable: false,
342
345
  configurable: true
343
346
  });
344
347
  Copper.prototype.getContext = function () {
@@ -557,7 +560,7 @@ var Copper = /** @class */ (function () {
557
560
  };
558
561
  Copper.prototype._postMessage = function (type, message) {
559
562
  if (message === void 0) { message = {}; }
560
- this.win.top.postMessage(__assign({}, message, {
563
+ this.win.top.postMessage(__assign(__assign({}, message), {
561
564
  // as a credential to the parent frame, so parent frame can recoganize the origin
562
565
  instanceId: this.instanceId,
563
566
  // tell parent frame current sdk version
@@ -636,14 +639,14 @@ var Copper = /** @class */ (function () {
636
639
  executor();
637
640
  return deferred.promise;
638
641
  };
639
- Copper.prototype._deferredPost = function (name$$1, data) {
642
+ Copper.prototype._deferredPost = function (name, data) {
640
643
  var _this = this;
641
- return this._createDeferredMethod(name$$1, function () {
644
+ return this._createDeferredMethod(name, function () {
642
645
  if (data) {
643
- _this._postMessage(name$$1, data);
646
+ _this._postMessage(name, data);
644
647
  }
645
648
  else {
646
- _this._postMessage(name$$1);
649
+ _this._postMessage(name);
647
650
  }
648
651
  });
649
652
  };
package/es/defer.d.ts CHANGED
@@ -3,7 +3,7 @@ export default class Deferred<T> {
3
3
  private _resolve;
4
4
  private _reject;
5
5
  constructor();
6
- readonly promise: Promise<T>;
6
+ get promise(): Promise<T>;
7
7
  resolve: (value?: T | PromiseLike<T> | undefined) => void;
8
8
  reject: (reason?: any) => void;
9
9
  }
package/es/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export default class Copper {
7
7
  private options;
8
8
  private _win;
9
9
  static init(): Copper;
10
- static readonly version: string;
10
+ static get version(): string;
11
11
  /**
12
12
  * store deferred queues by name
13
13
  */
@@ -23,7 +23,7 @@ export default class Copper {
23
23
  * @memberof Copper
24
24
  */
25
25
  constructor(parentOrigin: string, instanceId: string, options: ISdkInitOptions, _win?: any);
26
- readonly win: Window;
26
+ get win(): Window;
27
27
  getContext(): Promise<IContextData>;
28
28
  getUserInfo(): Promise<any>;
29
29
  getRouteInfo(): Promise<any>;
package/lib/copper-sdk.js CHANGED
@@ -1,18 +1,18 @@
1
1
  'use strict';
2
2
 
3
3
  /*! *****************************************************************************
4
- Copyright (c) Microsoft Corporation. All rights reserved.
5
- Licensed under the Apache License, Version 2.0 (the "License"); you may not use
6
- this file except in compliance with the License. You may obtain a copy of the
7
- License at http://www.apache.org/licenses/LICENSE-2.0
4
+ Copyright (c) Microsoft Corporation.
8
5
 
9
- THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
10
- KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
11
- WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
12
- MERCHANTABLITY OR NON-INFRINGEMENT.
6
+ Permission to use, copy, modify, and/or distribute this software for any
7
+ purpose with or without fee is hereby granted.
13
8
 
14
- See the Apache Version 2.0 License for specific language governing permissions
15
- and limitations under the License.
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
+ PERFORMANCE OF THIS SOFTWARE.
16
16
  ***************************************************************************** */
17
17
 
18
18
  var __assign = function() {
@@ -27,10 +27,11 @@ var __assign = function() {
27
27
  };
28
28
 
29
29
  function __awaiter(thisArg, _arguments, P, generator) {
30
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
31
  return new (P || (P = Promise))(function (resolve, reject) {
31
32
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
33
  function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
34
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
35
  step((generator = generator.apply(thisArg, _arguments || [])).next());
35
36
  });
36
37
  }
@@ -63,7 +64,7 @@ function __generator(thisArg, body) {
63
64
  }
64
65
  }
65
66
 
66
- var version = "0.6.2";
67
+ var version = "0.7.0";
67
68
 
68
69
  var ENTITY_PATH_MAP = {
69
70
  lead: 'leads',
@@ -164,7 +165,7 @@ var Deferred = /** @class */ (function () {
164
165
  get: function () {
165
166
  return this._promise;
166
167
  },
167
- enumerable: true,
168
+ enumerable: false,
168
169
  configurable: true
169
170
  });
170
171
  return Deferred;
@@ -317,6 +318,8 @@ var Copper = /** @class */ (function () {
317
318
  this._listenMessage();
318
319
  // listen to contextUpdated event
319
320
  this._subscribeContextUpdated();
321
+ // notify parent frame init
322
+ this._postMessage('init');
320
323
  }
321
324
  Copper.init = function () {
322
325
  var parentOrigin = getParameterByName('origin');
@@ -333,14 +336,14 @@ var Copper = /** @class */ (function () {
333
336
  get: function () {
334
337
  return version;
335
338
  },
336
- enumerable: true,
339
+ enumerable: false,
337
340
  configurable: true
338
341
  });
339
342
  Object.defineProperty(Copper.prototype, "win", {
340
343
  get: function () {
341
344
  return this._win;
342
345
  },
343
- enumerable: true,
346
+ enumerable: false,
344
347
  configurable: true
345
348
  });
346
349
  Copper.prototype.getContext = function () {
@@ -559,7 +562,7 @@ var Copper = /** @class */ (function () {
559
562
  };
560
563
  Copper.prototype._postMessage = function (type, message) {
561
564
  if (message === void 0) { message = {}; }
562
- this.win.top.postMessage(__assign({}, message, {
565
+ this.win.top.postMessage(__assign(__assign({}, message), {
563
566
  // as a credential to the parent frame, so parent frame can recoganize the origin
564
567
  instanceId: this.instanceId,
565
568
  // tell parent frame current sdk version
@@ -638,14 +641,14 @@ var Copper = /** @class */ (function () {
638
641
  executor();
639
642
  return deferred.promise;
640
643
  };
641
- Copper.prototype._deferredPost = function (name$$1, data) {
644
+ Copper.prototype._deferredPost = function (name, data) {
642
645
  var _this = this;
643
- return this._createDeferredMethod(name$$1, function () {
646
+ return this._createDeferredMethod(name, function () {
644
647
  if (data) {
645
- _this._postMessage(name$$1, data);
648
+ _this._postMessage(name, data);
646
649
  }
647
650
  else {
648
- _this._postMessage(name$$1);
651
+ _this._postMessage(name);
649
652
  }
650
653
  });
651
654
  };
package/lib/defer.d.ts CHANGED
@@ -3,7 +3,7 @@ export default class Deferred<T> {
3
3
  private _resolve;
4
4
  private _reject;
5
5
  constructor();
6
- readonly promise: Promise<T>;
6
+ get promise(): Promise<T>;
7
7
  resolve: (value?: T | PromiseLike<T> | undefined) => void;
8
8
  reject: (reason?: any) => void;
9
9
  }
package/lib/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export default class Copper {
7
7
  private options;
8
8
  private _win;
9
9
  static init(): Copper;
10
- static readonly version: string;
10
+ static get version(): string;
11
11
  /**
12
12
  * store deferred queues by name
13
13
  */
@@ -23,7 +23,7 @@ export default class Copper {
23
23
  * @memberof Copper
24
24
  */
25
25
  constructor(parentOrigin: string, instanceId: string, options: ISdkInitOptions, _win?: any);
26
- readonly win: Window;
26
+ get win(): Window;
27
27
  getContext(): Promise<IContextData>;
28
28
  getUserInfo(): Promise<any>;
29
29
  getRouteInfo(): Promise<any>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "copper-sdk",
3
- "version": "0.6.2",
3
+ "version": "0.7.0",
4
4
  "description": "Copper App SDK",
5
5
  "main": "lib/copper-sdk.js",
6
6
  "module": "es/copper-sdk.js",
@@ -50,11 +50,11 @@
50
50
  "homepage": "https://github.com/ProsperWorks/copper-sdk#readme",
51
51
  "devDependencies": {
52
52
  "@types/chai": "^4.1.7",
53
- "@types/mocha": "^5.2.5",
53
+ "@types/mocha": "^8.2.2",
54
54
  "@types/sinon": "^7.0.3",
55
55
  "chai": "^4.1.2",
56
- "concurrently": "^4.1.0",
57
- "cross-env": "^5.1.3",
56
+ "concurrently": "^6.5.1",
57
+ "cross-env": "^7.0.3",
58
58
  "gitbook-cli": "^2.3.2",
59
59
  "gitbook-plugin-anker-enable": "0.0.4",
60
60
  "gitbook-plugin-edit-link": "^2.0.2",
@@ -64,23 +64,22 @@
64
64
  "gitbook-plugin-prism-ext": "^3.1.0",
65
65
  "karma": "^3.1.4",
66
66
  "karma-chai": "^0.1.0",
67
- "karma-chrome-launcher": "^2.2.0",
68
- "karma-coverage-istanbul-reporter": "^2.0.4",
69
- "karma-mocha": "^1.3.0",
67
+ "karma-chrome-launcher": "^3.2.0",
68
+ "karma-coverage-istanbul-reporter": "^3.0.3",
69
+ "karma-mocha": "^2.0.1",
70
70
  "karma-mocha-reporter": "^2.2.5",
71
- "karma-rollup-preprocessor": "^6.1.2",
71
+ "karma-rollup-preprocessor": "^7.0.8",
72
72
  "karma-sinon": "^1.0.5",
73
- "mocha": "^5.0.1",
74
- "rimraf": "^2.6.3",
75
- "rollup": "0.68.2",
76
- "rollup-plugin-istanbul": "^2.0.1",
77
- "rollup-plugin-json": "^3.1.0",
73
+ "mocha": "^8.4.0",
74
+ "rimraf": "^3.0.2",
75
+ "rollup": "^1.32.1",
76
+ "rollup-plugin-istanbul": "^3.0.0",
77
+ "rollup-plugin-json": "^4.0.0",
78
78
  "rollup-plugin-replace": "^2.0.0",
79
- "rollup-plugin-typescript2": "^0.19.0",
79
+ "rollup-plugin-typescript2": "^0.30.0",
80
80
  "rollup-plugin-uglify": "^6.0.1",
81
- "sinon": "^7.2.2",
81
+ "sinon": "^13.0.2",
82
82
  "tslint": "^5.12.1",
83
83
  "typescript": "^3.2.2"
84
- },
85
- "dependencies": {}
84
+ }
86
85
  }
package/src/index.ts CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  logActivityDataGenerator,
5
5
  relateEntityDataGenerator,
6
6
  } from './action-data-generator';
7
- import { ENTITY_TYPE, HTTP_METHOD } from './constant';
7
+ import { ENTITY_TYPE } from './constant';
8
8
  import Deferred from './defer';
9
9
  import EntityModel, { IContextData, IEntityModel } from './entity-model';
10
10
  import {
@@ -72,6 +72,9 @@ export default class Copper {
72
72
 
73
73
  // listen to contextUpdated event
74
74
  this._subscribeContextUpdated();
75
+
76
+ // notify parent frame init
77
+ this._postMessage('init');
75
78
  }
76
79
 
77
80
  public get win(): Window {