@octostar/platform-api 0.5.17 → 0.5.18

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.
@@ -1,32 +1,27 @@
1
1
  import { Context, ContextAPISetParams, ContextListener } from '@octostar/platform-types';
2
- export type ContextAPIConstructorParams<ContextData extends Record<string, any>> = {
3
- contextData?: ContextData;
4
- targetWindow?: Window;
5
- channelId?: string;
6
- };
7
2
  export declare class ContextAPI<ContextData extends Record<string, any>> implements Context<ContextData> {
8
- private contextData?;
9
- private internalTargetWindow;
10
- readonly id: string;
3
+ private contextData;
11
4
  private listeners;
12
5
  private postRobotListener;
13
- private internalChannelId;
14
- private postRobotEventId;
15
- constructor({ targetWindow, contextData, channelId, }: ContextAPIConstructorParams<ContextData>);
16
- get targetWindow(): Window | undefined;
17
- set targetWindow(targetWindow: Window | undefined);
18
- get channelId(): string | undefined;
19
- set channelId(channelId: string | undefined);
20
- listenToPostRobot(): void;
21
- get context(): ContextData | undefined;
22
- set context(context: ContextData | undefined);
23
- getContext(): ContextData | undefined;
6
+ private type;
7
+ private channelId;
8
+ private iframeChannelAttr;
9
+ constructor(contextData: ContextData);
10
+ private getTargetWindow;
11
+ private setContextAndNotify;
12
+ private getPostRobotEventName;
13
+ private connect;
14
+ private sendContextUpdate;
15
+ getContext(): ContextData;
24
16
  setContext(context: ContextAPISetParams<ContextData>): void;
25
- notifyListeners(): void;
26
- syncContextToChannel(type?: 'update-context' | 'get-context'): Promise<void>;
27
17
  subscribeToChanges(contextListener: ContextListener<ContextData>): string;
28
18
  subscribeToChanges(id: string, contextListener: ContextListener<ContextData>): string;
29
19
  unsubscribeFromChanges(id: string): void;
20
+ connectToIframe(): {
21
+ channelId: string;
22
+ onIframeLoad: React.ReactEventHandler<HTMLIFrameElement>;
23
+ };
24
+ connectToParent(): void;
30
25
  destroy(): void;
31
26
  }
32
27
  //# sourceMappingURL=ContextAPI.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContextAPI.d.ts","sourceRoot":"","sources":["../../src/lib/ContextAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,mBAAmB,EACnB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAIlC,MAAM,MAAM,2BAA2B,CACrC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IACnC;IACJ,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,UAAU,CAAC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAC7D,YAAW,OAAO,CAAC,WAAW,CAAC;IAE/B,OAAO,CAAC,WAAW,CAAC,CAAc;IAElC,OAAO,CAAC,oBAAoB,CAAqB;IAEjD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,OAAO,CAAC,SAAS,CAA+C;IAEhE,OAAO,CAAC,iBAAiB,CAA8C;IAEvE,OAAO,CAAC,iBAAiB,CAAqB;IAE9C,OAAO,CAAC,gBAAgB,CAAqB;gBAEjC,EACV,YAAY,EACZ,WAAW,EACX,SAAS,GACV,EAAE,2BAA2B,CAAC,WAAW,CAAC;IAQ3C,IAAI,YAAY,IAIe,MAAM,GAAG,SAAS,CAFhD;IAED,IAAI,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAGhD;IAED,IAAI,SAAS,IAIY,MAAM,GAAG,SAAS,CAF1C;IAED,IAAI,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAO1C;IAED,iBAAiB;IAiBjB,IAAI,OAAO,IAIU,WAAW,GAAG,SAAS,CAF3C;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,EAK3C;IAED,UAAU;IAIV,UAAU,CAAC,OAAO,EAAE,mBAAmB,CAAC,WAAW,CAAC;IAKpD,eAAe;IAIT,oBAAoB,CACxB,IAAI,GAAE,gBAAgB,GAAG,aAAgC;IAgB3D,kBAAkB,CAAC,eAAe,EAAE,eAAe,CAAC,WAAW,CAAC,GAAG,MAAM;IAEzE,kBAAkB,CAChB,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,eAAe,CAAC,WAAW,CAAC,GAC5C,MAAM;IAqBT,sBAAsB,CAAC,EAAE,EAAE,MAAM;IAIjC,OAAO;CAGR"}
1
+ {"version":3,"file":"ContextAPI.d.ts","sourceRoot":"","sources":["../../src/lib/ContextAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,mBAAmB,EACnB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAMlC,qBAAa,UAAU,CAAC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAE,YAAW,OAAO,CAAC,WAAW,CAAC;IAE9F,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAoD;IACrE,OAAO,CAAC,iBAAiB,CAAgD;IACzE,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,iBAAiB,CAAkC;gBAE/C,WAAW,EAAE,WAAW;IAOpC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,OAAO;IAkBf,OAAO,CAAC,iBAAiB;IAYzB,UAAU;IAIV,UAAU,CAAC,OAAO,EAAE,mBAAmB,CAAC,WAAW,CAAC;IAKpD,kBAAkB,CAAC,eAAe,EAAE,eAAe,CAAC,WAAW,CAAC,GAAG,MAAM;IAEzE,kBAAkB,CAChB,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,eAAe,CAAC,WAAW,CAAC,GAC5C,MAAM;IAsBT,sBAAsB,CAAC,EAAE,EAAE,MAAM;IAIjC,eAAe,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAA;KAAE;IAalG,eAAe;IAQf,OAAO;CAGR"}
@@ -1,75 +1,69 @@
1
1
  import { v4 as uuidv4 } from 'uuid';
2
2
  import * as postRobot from 'post-robot';
3
+ const CONTEXT_UPDATE_EVENT = 'context-update';
3
4
  export class ContextAPI {
4
- constructor({ targetWindow, contextData, channelId, }) {
5
- this.contextData = contextData;
5
+ constructor(contextData) {
6
6
  this.listeners = {};
7
- this.id = uuidv4();
8
- this.targetWindow = targetWindow;
9
- this.channelId = channelId;
7
+ this.iframeChannelAttr = 'data-octostar-iframe-channel';
8
+ this.contextData = contextData;
9
+ const iframeChannelId = window.frameElement?.getAttribute(this.iframeChannelAttr);
10
+ this.channelId = iframeChannelId || uuidv4();
11
+ this.type = iframeChannelId ? 'iframe' : 'parent';
10
12
  }
11
- get targetWindow() {
12
- return this.internalTargetWindow;
13
+ getTargetWindow() {
14
+ if (this.type === 'iframe') {
15
+ return window.top;
16
+ }
17
+ return document.querySelector(`iframe[${this.iframeChannelAttr}='${this.channelId}']`)?.contentWindow || undefined;
13
18
  }
14
- set targetWindow(targetWindow) {
15
- this.internalTargetWindow = targetWindow;
16
- this.syncContextToChannel('get-context');
19
+ setContextAndNotify(context) {
20
+ if (typeof context === 'function') {
21
+ this.contextData = context(this.contextData);
22
+ }
23
+ else {
24
+ this.contextData = context;
25
+ }
26
+ Object.values(this.listeners).forEach(listener => listener(this.contextData));
17
27
  }
18
- get channelId() {
19
- return this.internalChannelId;
28
+ getPostRobotEventName(channelId) {
29
+ return `${channelId}-${CONTEXT_UPDATE_EVENT}`;
20
30
  }
21
- set channelId(channelId) {
22
- this.internalChannelId = channelId;
23
- if (channelId) {
24
- this.postRobotEventId = `context-api-update::${channelId}`;
25
- this.listenToPostRobot();
26
- this.syncContextToChannel('get-context');
31
+ connect(channelId) {
32
+ const targetWindow = this.getTargetWindow();
33
+ if (!targetWindow) {
34
+ const error = new Error('Target window not found');
35
+ throw error;
27
36
  }
37
+ const postRobotEventName = this.getPostRobotEventName(channelId);
38
+ this.postRobotListener = (postRobot.on(postRobotEventName, { window: targetWindow }, (event) => {
39
+ if (event.data.type === 'init') {
40
+ this.setContext((context) => ({ ...context, ...event.data.context }));
41
+ }
42
+ else {
43
+ this.setContextAndNotify((context) => ({ ...context, ...event.data.context }));
44
+ }
45
+ return Promise.resolve();
46
+ }));
47
+ this.sendContextUpdate(true);
28
48
  }
29
- listenToPostRobot() {
30
- if (!this.postRobotEventId) {
49
+ sendContextUpdate(isInit = false) {
50
+ const targetWindow = this.getTargetWindow();
51
+ if (!targetWindow) {
31
52
  return;
32
53
  }
33
- if (this.postRobotListener) {
34
- this.postRobotListener.cancel();
54
+ try {
55
+ postRobot.send(targetWindow, this.getPostRobotEventName(this.channelId), { context: this.contextData, ...(isInit && { type: 'init' }) });
56
+ }
57
+ catch (error) {
58
+ // do nothing
35
59
  }
36
- this.postRobotListener = postRobot.on(this.postRobotEventId, event => {
37
- if (event.data.from !== this.id) {
38
- this.contextData = { ...this.contextData, ...event.data.contextData };
39
- this.notifyListeners();
40
- }
41
- return Promise.resolve();
42
- });
43
- }
44
- get context() {
45
- return this.contextData;
46
- }
47
- set context(context) {
48
- this.contextData = context;
49
- this.notifyListeners();
50
- this.syncContextToChannel();
51
60
  }
52
61
  getContext() {
53
- return this.context;
62
+ return this.contextData;
54
63
  }
55
64
  setContext(context) {
56
- this.context =
57
- typeof context === 'function' ? context(this.context) : context;
58
- }
59
- notifyListeners() {
60
- Object.values(this.listeners).forEach(listener => listener(this.context));
61
- }
62
- async syncContextToChannel(type = 'update-context') {
63
- if (!this.targetWindow || !this.postRobotEventId) {
64
- return;
65
- }
66
- /** Try to exclude functions in the context */
67
- // const context = classInstanceToObject(this.context);
68
- await postRobot.send(this.targetWindow, this.postRobotEventId, {
69
- from: this.id,
70
- type,
71
- context: this.context,
72
- });
65
+ this.setContextAndNotify(context);
66
+ this.sendContextUpdate();
73
67
  }
74
68
  subscribeToChanges(idOrContextListener, contextListenerOrNothing) {
75
69
  const id = typeof idOrContextListener === 'string' ? idOrContextListener : uuidv4();
@@ -77,7 +71,8 @@ export class ContextAPI {
77
71
  ? idOrContextListener
78
72
  : contextListenerOrNothing;
79
73
  if (!contextListener) {
80
- throw new Error('Context listener is required');
74
+ const error = new Error('Context listener is required');
75
+ throw error;
81
76
  }
82
77
  this.listeners[id] = contextListener;
83
78
  return id;
@@ -85,6 +80,23 @@ export class ContextAPI {
85
80
  unsubscribeFromChanges(id) {
86
81
  delete this.listeners[id];
87
82
  }
83
+ connectToIframe() {
84
+ if (this.type !== 'parent') {
85
+ const error = new Error('ContextAPI is not a parent');
86
+ throw error;
87
+ }
88
+ const onIframeLoad = () => {
89
+ this.connect(this.channelId);
90
+ };
91
+ return { channelId: this.channelId, onIframeLoad };
92
+ }
93
+ connectToParent() {
94
+ if (this.type !== 'iframe') {
95
+ const error = new Error('ContextAPI is not an iframe');
96
+ throw error;
97
+ }
98
+ this.connect(this.channelId);
99
+ }
88
100
  destroy() {
89
101
  this.postRobotListener?.cancel();
90
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ContextAPI.js","sourceRoot":"","sources":["../../src/lib/ContextAPI.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ContextAPI.js","sourceRoot":"","sources":["../../src/lib/ContextAPI.ts"],"names":[],"mappings":"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"}
@@ -7081,9 +7081,6 @@ var _uuid = require("uuid");
7081
7081
  var postRobot = _interopRequireWildcard(require("post-robot"));
7082
7082
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
7083
7083
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
7084
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = "function" == typeof Symbol ? Symbol : {}, i = o.iterator || "@@iterator", a = o.asyncIterator || "@@asyncIterator", u = o.toStringTag || "@@toStringTag"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, ""); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, "_invoke", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error("Generator is already running"); if (4 === o) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = 3; var h = s(r, e, n); if ("normal" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } "throw" === h.type && (o = 4, n.method = "throw", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: "normal", arg: t.call(r, e) }; } catch (t) { return { type: "throw", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { ["next", "throw", "return"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if ("throw" !== c.type) { var h = c.arg, f = h.value; return f && "object" == _typeof(f) && n.call(f, "__await") ? r.resolve(f.__await).then(function (t) { e("next", t, a, u); }, function (t) { e("throw", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e("throw", t, a, u); }); } u(c.arg); } var o; c(this, "_invoke", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, "throw" === n && r.i["return"] && (e.method = "return", e.arg = t, d(r, e), "throw" === e.method) || "return" !== n && (e.method = "throw", e.arg = new TypeError("The iterator does not provide a '" + n + "' method")), f; var i = s(o, r.i, e.arg); if ("throw" === i.type) return e.method = "throw", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, "return" !== e.method && (e.method = "next", e.arg = t), e.delegate = null, f) : a : (e.method = "throw", e.arg = new TypeError("iterator result is not an object"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = "normal", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if ("function" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, "constructor", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, "GeneratorFunction"), r.isGeneratorFunction = function (t) { var r = "function" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || "GeneratorFunction" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, "GeneratorFunction")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, "Generator"), c(v, i, function () { return this; }), c(v, "toString", function () { return "[object Generator]"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) "t" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = "throw", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n("end"), !1; if (!c && !h) throw Error("try statement without catch or finally"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = "next", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && ("break" === t || "continue" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = "next", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, "catch": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if ("throw" === n.type) { var o = n.arg; m(e); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, "next" === this.method && (this.arg = t), f; } }, r; }
7085
- function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
7086
- function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
7087
7084
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7088
7085
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7089
7086
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
@@ -7092,126 +7089,108 @@ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o =
7092
7089
  function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
7093
7090
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
7094
7091
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7092
+ var CONTEXT_UPDATE_EVENT = 'context-update';
7095
7093
  var ContextAPI = exports.ContextAPI = /*#__PURE__*/function () {
7096
- function ContextAPI(_ref) {
7097
- var targetWindow = _ref.targetWindow,
7098
- contextData = _ref.contextData,
7099
- channelId = _ref.channelId;
7094
+ function ContextAPI(contextData) {
7095
+ var _window$frameElement;
7100
7096
  _classCallCheck(this, ContextAPI);
7101
- this.contextData = contextData;
7102
7097
  this.listeners = {};
7103
- this.id = (0, _uuid.v4)();
7104
- this.targetWindow = targetWindow;
7105
- this.channelId = channelId;
7098
+ this.iframeChannelAttr = 'data-octostar-iframe-channel';
7099
+ this.contextData = contextData;
7100
+ var iframeChannelId = (_window$frameElement = window.frameElement) === null || _window$frameElement === void 0 ? void 0 : _window$frameElement.getAttribute(this.iframeChannelAttr);
7101
+ this.channelId = iframeChannelId || (0, _uuid.v4)();
7102
+ this.type = iframeChannelId ? 'iframe' : 'parent';
7106
7103
  }
7107
7104
  return _createClass(ContextAPI, [{
7108
- key: "targetWindow",
7109
- get: function get() {
7110
- return this.internalTargetWindow;
7111
- },
7112
- set: function set(targetWindow) {
7113
- this.internalTargetWindow = targetWindow;
7114
- this.syncContextToChannel('get-context');
7115
- }
7116
- }, {
7117
- key: "channelId",
7118
- get: function get() {
7119
- return this.internalChannelId;
7120
- },
7121
- set: function set(channelId) {
7122
- this.internalChannelId = channelId;
7123
- if (channelId) {
7124
- this.postRobotEventId = "context-api-update::".concat(channelId);
7125
- this.listenToPostRobot();
7126
- this.syncContextToChannel('get-context');
7105
+ key: "getTargetWindow",
7106
+ value: function getTargetWindow() {
7107
+ var _document$querySelect;
7108
+ if (this.type === 'iframe') {
7109
+ return window.top;
7127
7110
  }
7111
+ return ((_document$querySelect = document.querySelector("iframe[".concat(this.iframeChannelAttr, "='").concat(this.channelId, "']"))) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.contentWindow) || undefined;
7128
7112
  }
7129
7113
  }, {
7130
- key: "listenToPostRobot",
7131
- value: function listenToPostRobot() {
7114
+ key: "setContextAndNotify",
7115
+ value: function setContextAndNotify(context) {
7132
7116
  var _this = this;
7133
- if (!this.postRobotEventId) {
7134
- return;
7117
+ if (typeof context === 'function') {
7118
+ this.contextData = context(this.contextData);
7119
+ } else {
7120
+ this.contextData = context;
7135
7121
  }
7136
- if (this.postRobotListener) {
7137
- this.postRobotListener.cancel();
7122
+ Object.values(this.listeners).forEach(function (listener) {
7123
+ return listener(_this.contextData);
7124
+ });
7125
+ }
7126
+ }, {
7127
+ key: "getPostRobotEventName",
7128
+ value: function getPostRobotEventName(channelId) {
7129
+ return "".concat(channelId, "-").concat(CONTEXT_UPDATE_EVENT);
7130
+ }
7131
+ }, {
7132
+ key: "connect",
7133
+ value: function connect(channelId) {
7134
+ var _this2 = this;
7135
+ var targetWindow = this.getTargetWindow();
7136
+ if (!targetWindow) {
7137
+ var error = new Error('Target window not found');
7138
+ throw error;
7138
7139
  }
7139
- this.postRobotListener = postRobot.on(this.postRobotEventId, function (event) {
7140
- if (event.data.from !== _this.id) {
7141
- _this.contextData = _objectSpread(_objectSpread({}, _this.contextData), event.data.contextData);
7142
- _this.notifyListeners();
7140
+ var postRobotEventName = this.getPostRobotEventName(channelId);
7141
+ this.postRobotListener = postRobot.on(postRobotEventName, {
7142
+ window: targetWindow
7143
+ }, function (event) {
7144
+ if (event.data.type === 'init') {
7145
+ _this2.setContext(function (context) {
7146
+ return _objectSpread(_objectSpread({}, context), event.data.context);
7147
+ });
7148
+ } else {
7149
+ _this2.setContextAndNotify(function (context) {
7150
+ return _objectSpread(_objectSpread({}, context), event.data.context);
7151
+ });
7143
7152
  }
7144
7153
  return Promise.resolve();
7145
7154
  });
7155
+ this.sendContextUpdate(true);
7146
7156
  }
7147
7157
  }, {
7148
- key: "context",
7149
- get: function get() {
7150
- return this.contextData;
7151
- },
7152
- set: function set(context) {
7153
- this.contextData = context;
7154
- this.notifyListeners();
7155
- this.syncContextToChannel();
7158
+ key: "sendContextUpdate",
7159
+ value: function sendContextUpdate() {
7160
+ var isInit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
7161
+ var targetWindow = this.getTargetWindow();
7162
+ if (!targetWindow) {
7163
+ return;
7164
+ }
7165
+ try {
7166
+ postRobot.send(targetWindow, this.getPostRobotEventName(this.channelId), _objectSpread({
7167
+ context: this.contextData
7168
+ }, isInit && {
7169
+ type: 'init'
7170
+ }));
7171
+ } catch (error) {
7172
+ // do nothing
7173
+ }
7156
7174
  }
7157
7175
  }, {
7158
7176
  key: "getContext",
7159
7177
  value: function getContext() {
7160
- return this.context;
7178
+ return this.contextData;
7161
7179
  }
7162
7180
  }, {
7163
7181
  key: "setContext",
7164
7182
  value: function setContext(context) {
7165
- this.context = typeof context === 'function' ? context(this.context) : context;
7183
+ this.setContextAndNotify(context);
7184
+ this.sendContextUpdate();
7166
7185
  }
7167
- }, {
7168
- key: "notifyListeners",
7169
- value: function notifyListeners() {
7170
- var _this2 = this;
7171
- Object.values(this.listeners).forEach(function (listener) {
7172
- return listener(_this2.context);
7173
- });
7174
- }
7175
- }, {
7176
- key: "syncContextToChannel",
7177
- value: function () {
7178
- var _syncContextToChannel = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
7179
- var type,
7180
- _args = arguments;
7181
- return _regeneratorRuntime().wrap(function _callee$(_context) {
7182
- while (1) switch (_context.prev = _context.next) {
7183
- case 0:
7184
- type = _args.length > 0 && _args[0] !== undefined ? _args[0] : 'update-context';
7185
- if (!(!this.targetWindow || !this.postRobotEventId)) {
7186
- _context.next = 3;
7187
- break;
7188
- }
7189
- return _context.abrupt("return");
7190
- case 3:
7191
- _context.next = 5;
7192
- return postRobot.send(this.targetWindow, this.postRobotEventId, {
7193
- from: this.id,
7194
- type: type,
7195
- context: this.context
7196
- });
7197
- case 5:
7198
- case "end":
7199
- return _context.stop();
7200
- }
7201
- }, _callee, this);
7202
- }));
7203
- function syncContextToChannel() {
7204
- return _syncContextToChannel.apply(this, arguments);
7205
- }
7206
- return syncContextToChannel;
7207
- }()
7208
7186
  }, {
7209
7187
  key: "subscribeToChanges",
7210
7188
  value: function subscribeToChanges(idOrContextListener, contextListenerOrNothing) {
7211
7189
  var id = typeof idOrContextListener === 'string' ? idOrContextListener : (0, _uuid.v4)();
7212
7190
  var contextListener = typeof idOrContextListener === 'function' ? idOrContextListener : contextListenerOrNothing;
7213
7191
  if (!contextListener) {
7214
- throw new Error('Context listener is required');
7192
+ var error = new Error('Context listener is required');
7193
+ throw error;
7215
7194
  }
7216
7195
  this.listeners[id] = contextListener;
7217
7196
  return id;
@@ -7221,6 +7200,31 @@ var ContextAPI = exports.ContextAPI = /*#__PURE__*/function () {
7221
7200
  value: function unsubscribeFromChanges(id) {
7222
7201
  delete this.listeners[id];
7223
7202
  }
7203
+ }, {
7204
+ key: "connectToIframe",
7205
+ value: function connectToIframe() {
7206
+ var _this3 = this;
7207
+ if (this.type !== 'parent') {
7208
+ var error = new Error('ContextAPI is not a parent');
7209
+ throw error;
7210
+ }
7211
+ var onIframeLoad = function onIframeLoad() {
7212
+ _this3.connect(_this3.channelId);
7213
+ };
7214
+ return {
7215
+ channelId: this.channelId,
7216
+ onIframeLoad: onIframeLoad
7217
+ };
7218
+ }
7219
+ }, {
7220
+ key: "connectToParent",
7221
+ value: function connectToParent() {
7222
+ if (this.type !== 'iframe') {
7223
+ var error = new Error('ContextAPI is not an iframe');
7224
+ throw error;
7225
+ }
7226
+ this.connect(this.channelId);
7227
+ }
7224
7228
  }, {
7225
7229
  key: "destroy",
7226
7230
  value: function destroy() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@octostar/platform-api",
3
- "version": "0.5.17",
3
+ "version": "0.5.18",
4
4
  "description": "Provides access to the API exposed by Octostar platform to an application run in an iframe",
5
5
  "keywords": [
6
6
  "octostar",
@@ -39,10 +39,10 @@
39
39
  "rimraf": "^5.0.5",
40
40
  "tsup": "^8.4.0",
41
41
  "typescript": "^5.8.2",
42
- "@octostar/platform-types": "0.5.20"
42
+ "@octostar/platform-types": "0.5.22"
43
43
  },
44
44
  "peerDependencies": {
45
- "@octostar/platform-types": "^0.5.20"
45
+ "@octostar/platform-types": "^0.5.22"
46
46
  },
47
47
  "publishConfig": {
48
48
  "access": "public"