@wix/services-manager 0.2.1 → 0.2.3

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 +1,3 @@
1
+ import { GetService, ThreadMode } from '@wix/services-definitions';
1
2
  export { defineService, implementService } from '@wix/services-definitions';
3
+ export declare const resolveServiceGetterFromContext: <M extends ThreadMode = ThreadMode.REMOTE>() => GetService<M>;
package/build/helpers.js CHANGED
@@ -1 +1,3 @@
1
+ import { wixContext } from '@wix/sdk-context';
1
2
  export { defineService, implementService } from '@wix/services-definitions';
3
+ export const resolveServiceGetterFromContext = () => wixContext?.getService || globalThis?.__wix_context__?.getService;
@@ -14,7 +14,7 @@ export type RemoteServicesManager = ServicesManager<ThreadMode.REMOTE> & {
14
14
  awaitConnectionFromMain: () => Promise<boolean>;
15
15
  };
16
16
  export type ProxyServiceManager = Comlink.Remote<RemoteServicesManager>;
17
- export declare function createServiceProxy<T extends ServiceDefinition<any, any>>(definition: T, remoteServiceManager: ProxyServiceManager, localServicesManager: ServicesManager): PromisifiedServiceAPI<T>;
17
+ export declare function createServiceProxy<T extends ServiceDefinition<any, any>>(definition: T, remoteServiceManager: ProxyServiceManager, localServicesManager: ServicesManager, awaiter?: Promise<any>): PromisifiedServiceAPI<T>;
18
18
  export declare enum SERVICE_MANAGER_MESSAGES {
19
19
  INIT_PORT = "WIX_MESSAGE.SERVICE_MANAGER.INIT_PORT",
20
20
  SIGNAL = "WIX_MESSAGE.SERVICE_MANAGER.SIGNAL",
@@ -1,13 +1,16 @@
1
1
  import { defineService, } from '@wix/services-definitions';
2
2
  import * as Comlink from 'comlink';
3
3
  import { initializeTransferHandlers } from './transfer-handlers/init-handlers.js';
4
- export function createServiceProxy(definition, remoteServiceManager, localServicesManager) {
4
+ export function createServiceProxy(definition, remoteServiceManager, localServicesManager, awaiter) {
5
5
  return new Proxy({}, {
6
6
  get(_, prop) {
7
7
  if (prop === 'signals') {
8
8
  return localServicesManager.getServiceSignals(definition);
9
9
  }
10
10
  return async (...args) => {
11
+ if (awaiter) {
12
+ await awaiter;
13
+ }
11
14
  let service = remoteServiceManager.getServiceProxy(definition);
12
15
  if (!service[prop]) {
13
16
  service = await service;
@@ -52,24 +55,26 @@ retryOptions: { timeout = 10000, interval = 11000 } = {}, remoteServices = [], a
52
55
  console.warn('setting a low interval might cause a race condition on the response message');
53
56
  }
54
57
  const signalsRegistry = manager.getSignalsRegistry();
58
+ const onReadyFromRemote = (callback) => {
59
+ if (type === 'iframe') {
60
+ window.addEventListener('message', (event) => {
61
+ if (event.data?.type === SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION &&
62
+ event.source === target) {
63
+ callback();
64
+ }
65
+ });
66
+ }
67
+ else {
68
+ target.onmessage = (event) => {
69
+ if (event.data?.type === SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION) {
70
+ callback();
71
+ }
72
+ };
73
+ }
74
+ };
55
75
  if (awaitInitialConnection && typeof window !== 'undefined') {
56
76
  await new Promise((resolve) => {
57
- if (type === 'iframe') {
58
- window.addEventListener('message', (event) => {
59
- if (event.data?.type ===
60
- SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION &&
61
- event.source === target) {
62
- resolve();
63
- }
64
- });
65
- }
66
- else {
67
- target.onmessage = (event) => {
68
- if (event.data?.type === SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION) {
69
- resolve();
70
- }
71
- };
72
- }
77
+ onReadyFromRemote(resolve);
73
78
  });
74
79
  }
75
80
  return new Promise((resolve, reject) => {
@@ -124,7 +129,11 @@ retryOptions: { timeout = 10000, interval = 11000 } = {}, remoteServices = [], a
124
129
  }
125
130
  };
126
131
  };
132
+ // first connection
127
133
  triggerConnection();
134
+ // re-establish connection if remote frame is reloaded
135
+ onReadyFromRemote(() => triggerConnection());
136
+ // retries if defined in options
128
137
  const intervalId = setInterval(triggerConnection, interval);
129
138
  const timeoutId = setTimeout(() => {
130
139
  clearInterval(intervalId);
@@ -152,7 +161,7 @@ export function createRemoteServicesManager({ servicesManager, messageFrame, })
152
161
  result = servicesManager.getService(definition, getService, signals || servicesManager.getServiceSignals(definition));
153
162
  }
154
163
  else {
155
- result = createServiceProxy(definition, remoteServiceManager, servicesManager);
164
+ result = createServiceProxy(definition, remoteServiceManager, servicesManager, connectedPromise);
156
165
  servicesManager.addService(definition, () => result);
157
166
  }
158
167
  if (result) {
@@ -1 +1,3 @@
1
+ import { GetService, ThreadMode } from '@wix/services-definitions';
1
2
  export { defineService, implementService } from '@wix/services-definitions';
3
+ export declare const resolveServiceGetterFromContext: <M extends ThreadMode = ThreadMode.REMOTE>() => GetService<M>;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.implementService = exports.defineService = void 0;
3
+ exports.resolveServiceGetterFromContext = exports.implementService = exports.defineService = void 0;
4
+ const sdk_context_1 = require("@wix/sdk-context");
4
5
  var services_definitions_1 = require("@wix/services-definitions");
5
6
  Object.defineProperty(exports, "defineService", { enumerable: true, get: function () { return services_definitions_1.defineService; } });
6
7
  Object.defineProperty(exports, "implementService", { enumerable: true, get: function () { return services_definitions_1.implementService; } });
8
+ const resolveServiceGetterFromContext = () => sdk_context_1.wixContext?.getService || globalThis?.__wix_context__?.getService;
9
+ exports.resolveServiceGetterFromContext = resolveServiceGetterFromContext;
@@ -14,7 +14,7 @@ export type RemoteServicesManager = ServicesManager<ThreadMode.REMOTE> & {
14
14
  awaitConnectionFromMain: () => Promise<boolean>;
15
15
  };
16
16
  export type ProxyServiceManager = Comlink.Remote<RemoteServicesManager>;
17
- export declare function createServiceProxy<T extends ServiceDefinition<any, any>>(definition: T, remoteServiceManager: ProxyServiceManager, localServicesManager: ServicesManager): PromisifiedServiceAPI<T>;
17
+ export declare function createServiceProxy<T extends ServiceDefinition<any, any>>(definition: T, remoteServiceManager: ProxyServiceManager, localServicesManager: ServicesManager, awaiter?: Promise<any>): PromisifiedServiceAPI<T>;
18
18
  export declare enum SERVICE_MANAGER_MESSAGES {
19
19
  INIT_PORT = "WIX_MESSAGE.SERVICE_MANAGER.INIT_PORT",
20
20
  SIGNAL = "WIX_MESSAGE.SERVICE_MANAGER.SIGNAL",
@@ -41,13 +41,16 @@ exports.createRemoteServicesManager = createRemoteServicesManager;
41
41
  const services_definitions_1 = require("@wix/services-definitions");
42
42
  const Comlink = __importStar(require("comlink"));
43
43
  const init_handlers_js_1 = require("./transfer-handlers/init-handlers.js");
44
- function createServiceProxy(definition, remoteServiceManager, localServicesManager) {
44
+ function createServiceProxy(definition, remoteServiceManager, localServicesManager, awaiter) {
45
45
  return new Proxy({}, {
46
46
  get(_, prop) {
47
47
  if (prop === 'signals') {
48
48
  return localServicesManager.getServiceSignals(definition);
49
49
  }
50
50
  return async (...args) => {
51
+ if (awaiter) {
52
+ await awaiter;
53
+ }
51
54
  let service = remoteServiceManager.getServiceProxy(definition);
52
55
  if (!service[prop]) {
53
56
  service = await service;
@@ -92,24 +95,26 @@ retryOptions: { timeout = 10000, interval = 11000 } = {}, remoteServices = [], a
92
95
  console.warn('setting a low interval might cause a race condition on the response message');
93
96
  }
94
97
  const signalsRegistry = manager.getSignalsRegistry();
98
+ const onReadyFromRemote = (callback) => {
99
+ if (type === 'iframe') {
100
+ window.addEventListener('message', (event) => {
101
+ if (event.data?.type === SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION &&
102
+ event.source === target) {
103
+ callback();
104
+ }
105
+ });
106
+ }
107
+ else {
108
+ target.onmessage = (event) => {
109
+ if (event.data?.type === SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION) {
110
+ callback();
111
+ }
112
+ };
113
+ }
114
+ };
95
115
  if (awaitInitialConnection && typeof window !== 'undefined') {
96
116
  await new Promise((resolve) => {
97
- if (type === 'iframe') {
98
- window.addEventListener('message', (event) => {
99
- if (event.data?.type ===
100
- SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION &&
101
- event.source === target) {
102
- resolve();
103
- }
104
- });
105
- }
106
- else {
107
- target.onmessage = (event) => {
108
- if (event.data?.type === SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION) {
109
- resolve();
110
- }
111
- };
112
- }
117
+ onReadyFromRemote(resolve);
113
118
  });
114
119
  }
115
120
  return new Promise((resolve, reject) => {
@@ -164,7 +169,11 @@ retryOptions: { timeout = 10000, interval = 11000 } = {}, remoteServices = [], a
164
169
  }
165
170
  };
166
171
  };
172
+ // first connection
167
173
  triggerConnection();
174
+ // re-establish connection if remote frame is reloaded
175
+ onReadyFromRemote(() => triggerConnection());
176
+ // retries if defined in options
168
177
  const intervalId = setInterval(triggerConnection, interval);
169
178
  const timeoutId = setTimeout(() => {
170
179
  clearInterval(intervalId);
@@ -192,7 +201,7 @@ function createRemoteServicesManager({ servicesManager, messageFrame, }) {
192
201
  result = servicesManager.getService(definition, getService, signals || servicesManager.getServiceSignals(definition));
193
202
  }
194
203
  else {
195
- result = createServiceProxy(definition, remoteServiceManager, servicesManager);
204
+ result = createServiceProxy(definition, remoteServiceManager, servicesManager, connectedPromise);
196
205
  servicesManager.addService(definition, () => result);
197
206
  }
198
207
  if (result) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/services-manager",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "type": "module",
5
5
  "main": "./cjs/build/services-manager.js",
6
6
  "exports": {
@@ -90,5 +90,5 @@
90
90
  ]
91
91
  }
92
92
  },
93
- "falconPackageHash": "db299042061f1059d9b8c0e0c5fe7d87b50de29a2430a530afebd384"
93
+ "falconPackageHash": "eed0598aa64a95e9a1df2cc92a6d52fb261b4b13956db5a9deaec5b9"
94
94
  }