@coveo/relay 0.3.0 → 0.3.2

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/lib/relay.cjs CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  var crypto = require('crypto');
4
4
 
5
- async function callEventApi({ event, options, environment, }) {
6
- const { token, host, organizationId } = options;
5
+ async function callEventApi({ event, config, environment, }) {
6
+ const { token, host, organizationId } = config;
7
7
  const headers = {
8
8
  "Content-Type": "application/json",
9
9
  Authorization: `Bearer ${token}`,
10
10
  };
11
- const response = await environment.fetch(`${host}/rest/organizations/${organizationId}/events/v1${options.mode == "validate" ? "/validate" : ""}`, {
11
+ const response = await environment.fetch(`${host}/rest/organizations/${organizationId}/events/v1${config.mode == "validate" ? "/validate" : ""}`, {
12
12
  method: "POST",
13
13
  body: JSON.stringify([event]),
14
14
  headers,
@@ -134,35 +134,35 @@ function isBrowser() {
134
134
  }
135
135
  }
136
136
 
137
- const version = "0.3.0" ;
137
+ const version = "0.3.2" ;
138
138
 
139
- function getConfig(options) {
140
- const { trackingId } = options;
139
+ function getEventConfig(config) {
140
+ const { trackingId } = config;
141
141
  return { trackingId };
142
142
  }
143
143
  function getSource() {
144
144
  return `relay@${version}`;
145
145
  }
146
- function createMeta(type, options, environment, clientIdManager) {
146
+ function createMeta(type, config, environment, clientIdManager) {
147
147
  const { getReferrerUrl, getUrl, getUserAgent } = environment;
148
- const config = getConfig(options);
148
+ const eventConfig = getEventConfig(config);
149
149
  const { clientId } = clientIdManager;
150
- return {
150
+ return Object.freeze({
151
151
  type,
152
- config,
152
+ config: eventConfig,
153
153
  ts: Date.now(),
154
154
  source: getSource(),
155
155
  clientId,
156
156
  userAgent: getUserAgent(),
157
157
  referrerUrl: getReferrerUrl(),
158
158
  url: getUrl(),
159
- };
159
+ });
160
160
  }
161
161
 
162
- function createRelayEvent(type, payload, options, environment, clientIdManager) {
162
+ function createRelayEvent(type, payload, config, environment, clientIdManager) {
163
163
  return {
164
164
  ...payload,
165
- meta: createMeta(type, options, environment, clientIdManager),
165
+ meta: createMeta(type, config, environment, clientIdManager),
166
166
  };
167
167
  }
168
168
 
@@ -172,21 +172,108 @@ async function validate(params) {
172
172
  return { valid, errors: errors ?? [], responseType: "validation" };
173
173
  }
174
174
 
175
- function createRelay(options) {
175
+ const ANY_EVENT_TYPE = "*";
176
+ function createListenerManager() {
177
+ const listeners = [];
178
+ function getListenerIndex({ type, callback }) {
179
+ return listeners.findIndex((listener) => listener.type === type && listener.callback === callback);
180
+ }
181
+ function isMatchesType(listener, type) {
182
+ return listener.type === "*" || type === listener.type;
183
+ }
184
+ function add(listener) {
185
+ if (getListenerIndex(listener) < 0) {
186
+ listeners.push(listener);
187
+ }
188
+ return () => remove(listener.type, listener.callback);
189
+ }
190
+ function call(event) {
191
+ listeners.forEach((listener) => {
192
+ if (isMatchesType(listener, event.meta.type)) {
193
+ try {
194
+ listener.callback(event);
195
+ }
196
+ catch (e) {
197
+ console.error(e);
198
+ }
199
+ }
200
+ });
201
+ }
202
+ function removeMultiple(type) {
203
+ if (type === ANY_EVENT_TYPE) {
204
+ listeners.length = 0;
205
+ }
206
+ else {
207
+ for (let i = listeners.length - 1; i >= 0; i--) {
208
+ if (listeners[i].type === type) {
209
+ listeners.splice(i, 1);
210
+ }
211
+ }
212
+ }
213
+ }
214
+ function removeOne(listener) {
215
+ const index = getListenerIndex(listener);
216
+ if (index >= 0) {
217
+ listeners.splice(index, 1);
218
+ }
219
+ }
220
+ function remove(type, callback) {
221
+ !!callback ? removeOne({ type, callback }) : removeMultiple(type);
222
+ }
223
+ return {
224
+ add,
225
+ call,
226
+ remove,
227
+ };
228
+ }
229
+
230
+ function pick({ host, organizationId, token, trackingId, ...rest }) {
231
+ return Object.freeze({
232
+ host,
233
+ organizationId,
234
+ token,
235
+ trackingId,
236
+ ...(!!rest.mode && { mode: rest.mode }),
237
+ });
238
+ }
239
+ function createConfigManager(initialConfig) {
240
+ let _config = pick(initialConfig);
241
+ return {
242
+ get: () => _config,
243
+ update: (updatedConfig) => {
244
+ _config = pick({ ..._config, ...updatedConfig });
245
+ },
246
+ };
247
+ }
248
+
249
+ function createRelay(initialConfig) {
176
250
  const environment = currentEnvironment();
177
251
  const clientIdManager = createClientIdManager(environment);
252
+ const configManager = createConfigManager(initialConfig);
253
+ const { add, call, remove } = createListenerManager();
178
254
  return {
179
- validate: (type, payload) => validate({
180
- options,
181
- environment,
182
- event: createRelayEvent(type, payload, options, environment, clientIdManager),
183
- }),
184
- emit: (type, payload) => emit({
185
- options,
186
- environment,
187
- event: createRelayEvent(type, payload, options, environment, clientIdManager),
188
- }),
189
- getMeta: (type) => createMeta(type, options, environment, clientIdManager),
255
+ validate: (type, payload) => {
256
+ const event = createRelayEvent(type, payload, configManager.get(), environment, clientIdManager);
257
+ call(event);
258
+ return validate({
259
+ config: configManager.get(),
260
+ environment,
261
+ event,
262
+ });
263
+ },
264
+ emit: (type, payload) => {
265
+ const event = createRelayEvent(type, payload, configManager.get(), environment, clientIdManager);
266
+ call(event);
267
+ return emit({
268
+ config: configManager.get(),
269
+ environment,
270
+ event,
271
+ });
272
+ },
273
+ getMeta: (type) => createMeta(type, configManager.get(), environment, clientIdManager),
274
+ on: (type, callback) => add({ type, callback }),
275
+ off: (type, callback) => remove(type, callback),
276
+ updateConfig: (config) => configManager.update(config),
190
277
  version,
191
278
  };
192
279
  }
package/lib/relay.js CHANGED
@@ -1,10 +1,10 @@
1
- async function callEventApi({ event, options, environment, }) {
2
- const { token, host, organizationId } = options;
1
+ async function callEventApi({ event, config, environment, }) {
2
+ const { token, host, organizationId } = config;
3
3
  const headers = {
4
4
  "Content-Type": "application/json",
5
5
  Authorization: `Bearer ${token}`,
6
6
  };
7
- const response = await environment.fetch(`${host}/rest/organizations/${organizationId}/events/v1${options.mode == "validate" ? "/validate" : ""}`, {
7
+ const response = await environment.fetch(`${host}/rest/organizations/${organizationId}/events/v1${config.mode == "validate" ? "/validate" : ""}`, {
8
8
  method: "POST",
9
9
  body: JSON.stringify([event]),
10
10
  headers,
@@ -138,35 +138,35 @@ function isBrowser() {
138
138
  }
139
139
  }
140
140
 
141
- const version = "0.3.0" ;
141
+ const version = "0.3.2" ;
142
142
 
143
- function getConfig(options) {
144
- const { trackingId } = options;
143
+ function getEventConfig(config) {
144
+ const { trackingId } = config;
145
145
  return { trackingId };
146
146
  }
147
147
  function getSource() {
148
148
  return `relay@${version}`;
149
149
  }
150
- function createMeta(type, options, environment, clientIdManager) {
150
+ function createMeta(type, config, environment, clientIdManager) {
151
151
  const { getReferrerUrl, getUrl, getUserAgent } = environment;
152
- const config = getConfig(options);
152
+ const eventConfig = getEventConfig(config);
153
153
  const { clientId } = clientIdManager;
154
- return {
154
+ return Object.freeze({
155
155
  type,
156
- config,
156
+ config: eventConfig,
157
157
  ts: Date.now(),
158
158
  source: getSource(),
159
159
  clientId,
160
160
  userAgent: getUserAgent(),
161
161
  referrerUrl: getReferrerUrl(),
162
162
  url: getUrl(),
163
- };
163
+ });
164
164
  }
165
165
 
166
- function createRelayEvent(type, payload, options, environment, clientIdManager) {
166
+ function createRelayEvent(type, payload, config, environment, clientIdManager) {
167
167
  return {
168
168
  ...payload,
169
- meta: createMeta(type, options, environment, clientIdManager),
169
+ meta: createMeta(type, config, environment, clientIdManager),
170
170
  };
171
171
  }
172
172
 
@@ -176,21 +176,108 @@ async function validate(params) {
176
176
  return { valid, errors: errors ?? [], responseType: "validation" };
177
177
  }
178
178
 
179
- function createRelay(options) {
179
+ const ANY_EVENT_TYPE = "*";
180
+ function createListenerManager() {
181
+ const listeners = [];
182
+ function getListenerIndex({ type, callback }) {
183
+ return listeners.findIndex((listener) => listener.type === type && listener.callback === callback);
184
+ }
185
+ function isMatchesType(listener, type) {
186
+ return listener.type === "*" || type === listener.type;
187
+ }
188
+ function add(listener) {
189
+ if (getListenerIndex(listener) < 0) {
190
+ listeners.push(listener);
191
+ }
192
+ return () => remove(listener.type, listener.callback);
193
+ }
194
+ function call(event) {
195
+ listeners.forEach((listener) => {
196
+ if (isMatchesType(listener, event.meta.type)) {
197
+ try {
198
+ listener.callback(event);
199
+ }
200
+ catch (e) {
201
+ console.error(e);
202
+ }
203
+ }
204
+ });
205
+ }
206
+ function removeMultiple(type) {
207
+ if (type === ANY_EVENT_TYPE) {
208
+ listeners.length = 0;
209
+ }
210
+ else {
211
+ for (let i = listeners.length - 1; i >= 0; i--) {
212
+ if (listeners[i].type === type) {
213
+ listeners.splice(i, 1);
214
+ }
215
+ }
216
+ }
217
+ }
218
+ function removeOne(listener) {
219
+ const index = getListenerIndex(listener);
220
+ if (index >= 0) {
221
+ listeners.splice(index, 1);
222
+ }
223
+ }
224
+ function remove(type, callback) {
225
+ !!callback ? removeOne({ type, callback }) : removeMultiple(type);
226
+ }
227
+ return {
228
+ add,
229
+ call,
230
+ remove,
231
+ };
232
+ }
233
+
234
+ function pick({ host, organizationId, token, trackingId, ...rest }) {
235
+ return Object.freeze({
236
+ host,
237
+ organizationId,
238
+ token,
239
+ trackingId,
240
+ ...(!!rest.mode && { mode: rest.mode }),
241
+ });
242
+ }
243
+ function createConfigManager(initialConfig) {
244
+ let _config = pick(initialConfig);
245
+ return {
246
+ get: () => _config,
247
+ update: (updatedConfig) => {
248
+ _config = pick({ ..._config, ...updatedConfig });
249
+ },
250
+ };
251
+ }
252
+
253
+ function createRelay(initialConfig) {
180
254
  const environment = currentEnvironment();
181
255
  const clientIdManager = createClientIdManager(environment);
256
+ const configManager = createConfigManager(initialConfig);
257
+ const { add, call, remove } = createListenerManager();
182
258
  return {
183
- validate: (type, payload) => validate({
184
- options,
185
- environment,
186
- event: createRelayEvent(type, payload, options, environment, clientIdManager),
187
- }),
188
- emit: (type, payload) => emit({
189
- options,
190
- environment,
191
- event: createRelayEvent(type, payload, options, environment, clientIdManager),
192
- }),
193
- getMeta: (type) => createMeta(type, options, environment, clientIdManager),
259
+ validate: (type, payload) => {
260
+ const event = createRelayEvent(type, payload, configManager.get(), environment, clientIdManager);
261
+ call(event);
262
+ return validate({
263
+ config: configManager.get(),
264
+ environment,
265
+ event,
266
+ });
267
+ },
268
+ emit: (type, payload) => {
269
+ const event = createRelayEvent(type, payload, configManager.get(), environment, clientIdManager);
270
+ call(event);
271
+ return emit({
272
+ config: configManager.get(),
273
+ environment,
274
+ event,
275
+ });
276
+ },
277
+ getMeta: (type) => createMeta(type, configManager.get(), environment, clientIdManager),
278
+ on: (type, callback) => add({ type, callback }),
279
+ off: (type, callback) => remove(type, callback),
280
+ updateConfig: (config) => configManager.update(config),
194
281
  version,
195
282
  };
196
283
  }
package/lib/relay.mjs CHANGED
@@ -1,12 +1,12 @@
1
1
  import crypto from 'crypto';
2
2
 
3
- async function callEventApi({ event, options, environment, }) {
4
- const { token, host, organizationId } = options;
3
+ async function callEventApi({ event, config, environment, }) {
4
+ const { token, host, organizationId } = config;
5
5
  const headers = {
6
6
  "Content-Type": "application/json",
7
7
  Authorization: `Bearer ${token}`,
8
8
  };
9
- const response = await environment.fetch(`${host}/rest/organizations/${organizationId}/events/v1${options.mode == "validate" ? "/validate" : ""}`, {
9
+ const response = await environment.fetch(`${host}/rest/organizations/${organizationId}/events/v1${config.mode == "validate" ? "/validate" : ""}`, {
10
10
  method: "POST",
11
11
  body: JSON.stringify([event]),
12
12
  headers,
@@ -132,35 +132,35 @@ function isBrowser() {
132
132
  }
133
133
  }
134
134
 
135
- const version = "0.3.0" ;
135
+ const version = "0.3.2" ;
136
136
 
137
- function getConfig(options) {
138
- const { trackingId } = options;
137
+ function getEventConfig(config) {
138
+ const { trackingId } = config;
139
139
  return { trackingId };
140
140
  }
141
141
  function getSource() {
142
142
  return `relay@${version}`;
143
143
  }
144
- function createMeta(type, options, environment, clientIdManager) {
144
+ function createMeta(type, config, environment, clientIdManager) {
145
145
  const { getReferrerUrl, getUrl, getUserAgent } = environment;
146
- const config = getConfig(options);
146
+ const eventConfig = getEventConfig(config);
147
147
  const { clientId } = clientIdManager;
148
- return {
148
+ return Object.freeze({
149
149
  type,
150
- config,
150
+ config: eventConfig,
151
151
  ts: Date.now(),
152
152
  source: getSource(),
153
153
  clientId,
154
154
  userAgent: getUserAgent(),
155
155
  referrerUrl: getReferrerUrl(),
156
156
  url: getUrl(),
157
- };
157
+ });
158
158
  }
159
159
 
160
- function createRelayEvent(type, payload, options, environment, clientIdManager) {
160
+ function createRelayEvent(type, payload, config, environment, clientIdManager) {
161
161
  return {
162
162
  ...payload,
163
- meta: createMeta(type, options, environment, clientIdManager),
163
+ meta: createMeta(type, config, environment, clientIdManager),
164
164
  };
165
165
  }
166
166
 
@@ -170,21 +170,108 @@ async function validate(params) {
170
170
  return { valid, errors: errors ?? [], responseType: "validation" };
171
171
  }
172
172
 
173
- function createRelay(options) {
173
+ const ANY_EVENT_TYPE = "*";
174
+ function createListenerManager() {
175
+ const listeners = [];
176
+ function getListenerIndex({ type, callback }) {
177
+ return listeners.findIndex((listener) => listener.type === type && listener.callback === callback);
178
+ }
179
+ function isMatchesType(listener, type) {
180
+ return listener.type === "*" || type === listener.type;
181
+ }
182
+ function add(listener) {
183
+ if (getListenerIndex(listener) < 0) {
184
+ listeners.push(listener);
185
+ }
186
+ return () => remove(listener.type, listener.callback);
187
+ }
188
+ function call(event) {
189
+ listeners.forEach((listener) => {
190
+ if (isMatchesType(listener, event.meta.type)) {
191
+ try {
192
+ listener.callback(event);
193
+ }
194
+ catch (e) {
195
+ console.error(e);
196
+ }
197
+ }
198
+ });
199
+ }
200
+ function removeMultiple(type) {
201
+ if (type === ANY_EVENT_TYPE) {
202
+ listeners.length = 0;
203
+ }
204
+ else {
205
+ for (let i = listeners.length - 1; i >= 0; i--) {
206
+ if (listeners[i].type === type) {
207
+ listeners.splice(i, 1);
208
+ }
209
+ }
210
+ }
211
+ }
212
+ function removeOne(listener) {
213
+ const index = getListenerIndex(listener);
214
+ if (index >= 0) {
215
+ listeners.splice(index, 1);
216
+ }
217
+ }
218
+ function remove(type, callback) {
219
+ !!callback ? removeOne({ type, callback }) : removeMultiple(type);
220
+ }
221
+ return {
222
+ add,
223
+ call,
224
+ remove,
225
+ };
226
+ }
227
+
228
+ function pick({ host, organizationId, token, trackingId, ...rest }) {
229
+ return Object.freeze({
230
+ host,
231
+ organizationId,
232
+ token,
233
+ trackingId,
234
+ ...(!!rest.mode && { mode: rest.mode }),
235
+ });
236
+ }
237
+ function createConfigManager(initialConfig) {
238
+ let _config = pick(initialConfig);
239
+ return {
240
+ get: () => _config,
241
+ update: (updatedConfig) => {
242
+ _config = pick({ ..._config, ...updatedConfig });
243
+ },
244
+ };
245
+ }
246
+
247
+ function createRelay(initialConfig) {
174
248
  const environment = currentEnvironment();
175
249
  const clientIdManager = createClientIdManager(environment);
250
+ const configManager = createConfigManager(initialConfig);
251
+ const { add, call, remove } = createListenerManager();
176
252
  return {
177
- validate: (type, payload) => validate({
178
- options,
179
- environment,
180
- event: createRelayEvent(type, payload, options, environment, clientIdManager),
181
- }),
182
- emit: (type, payload) => emit({
183
- options,
184
- environment,
185
- event: createRelayEvent(type, payload, options, environment, clientIdManager),
186
- }),
187
- getMeta: (type) => createMeta(type, options, environment, clientIdManager),
253
+ validate: (type, payload) => {
254
+ const event = createRelayEvent(type, payload, configManager.get(), environment, clientIdManager);
255
+ call(event);
256
+ return validate({
257
+ config: configManager.get(),
258
+ environment,
259
+ event,
260
+ });
261
+ },
262
+ emit: (type, payload) => {
263
+ const event = createRelayEvent(type, payload, configManager.get(), environment, clientIdManager);
264
+ call(event);
265
+ return emit({
266
+ config: configManager.get(),
267
+ environment,
268
+ event,
269
+ });
270
+ },
271
+ getMeta: (type) => createMeta(type, configManager.get(), environment, clientIdManager),
272
+ on: (type, callback) => add({ type, callback }),
273
+ off: (type, callback) => remove(type, callback),
274
+ updateConfig: (config) => configManager.update(config),
188
275
  version,
189
276
  };
190
277
  }
@@ -0,0 +1,14 @@
1
+ export type RelayMode = "emit" | "validate";
2
+ export interface RelayConfig {
3
+ host: string;
4
+ organizationId: string;
5
+ token: string;
6
+ trackingId: string;
7
+ mode?: RelayMode;
8
+ }
9
+ export interface ConfigManager {
10
+ get: () => Readonly<RelayConfig>;
11
+ update: (updatedConfig: Partial<RelayConfig>) => void;
12
+ }
13
+ export declare function createConfigManager(initialConfig: RelayConfig): Readonly<ConfigManager>;
14
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjC,MAAM,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CACvD;AAkBD,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,WAAW,GACzB,QAAQ,CAAC,aAAa,CAAC,CASzB"}
@@ -1,12 +1,12 @@
1
1
  import { ClientIdManager } from "../../client-id/client-id";
2
2
  import { Environment } from "../../environment/environment";
3
- import { RelayOptions } from "../../relay";
4
- interface Config {
3
+ import { RelayConfig } from "../../config/config";
4
+ interface EventConfig {
5
5
  trackingId: string;
6
6
  }
7
7
  export interface Meta {
8
8
  type: string;
9
- config: Config;
9
+ config: EventConfig;
10
10
  ts: number;
11
11
  source: string;
12
12
  clientId: string;
@@ -14,6 +14,6 @@ export interface Meta {
14
14
  referrerUrl: string | null;
15
15
  url: string | null;
16
16
  }
17
- export declare function createMeta(type: string, options: RelayOptions, environment: Environment, clientIdManager: ClientIdManager): Readonly<Meta>;
17
+ export declare function createMeta(type: string, config: RelayConfig, environment: Environment, clientIdManager: ClientIdManager): Readonly<Meta>;
18
18
  export {};
19
19
  //# sourceMappingURL=meta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../../src/event/meta/meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,UAAU,MAAM;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAWD,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,GAC/B,QAAQ,CAAC,IAAI,CAAC,CAehB"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../../src/event/meta/meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAWD,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,GAC/B,QAAQ,CAAC,IAAI,CAAC,CAehB"}
@@ -1,9 +1,9 @@
1
1
  import { ClientIdManager } from "../client-id/client-id";
2
2
  import { Environment } from "../environment/environment";
3
- import { RelayOptions, RelayPayload } from "../relay";
3
+ import { RelayConfig, RelayPayload } from "../relay";
4
4
  import { Meta } from "./meta/meta";
5
5
  export interface RelayEvent extends RelayPayload {
6
- meta: Meta;
6
+ meta: Readonly<Meta>;
7
7
  }
8
- export declare function createRelayEvent(type: string, payload: RelayPayload, options: RelayOptions, environment: Environment, clientIdManager: ClientIdManager): Readonly<RelayEvent>;
8
+ export declare function createRelayEvent(type: string, payload: RelayPayload, config: RelayConfig, environment: Environment, clientIdManager: ClientIdManager): Readonly<RelayEvent>;
9
9
  //# sourceMappingURL=relay-event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"relay-event.d.ts","sourceRoot":"","sources":["../../../src/event/relay-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAc,IAAI,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,GAC/B,QAAQ,CAAC,UAAU,CAAC,CAKtB"}
1
+ {"version":3,"file":"relay-event.d.ts","sourceRoot":"","sources":["../../../src/event/relay-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAc,IAAI,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;CACtB;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,GAC/B,QAAQ,CAAC,UAAU,CAAC,CAKtB"}
@@ -1,11 +1,10 @@
1
1
  import { Environment } from "../environment/environment";
2
- import { RelayOptions } from "../relay";
3
2
  import { RelayEvent } from "../event/relay-event";
3
+ import { RelayConfig } from "../config/config";
4
4
  export interface EventApiCallParams {
5
- event: Readonly<RelayEvent>;
6
- options: RelayOptions;
5
+ config: RelayConfig;
7
6
  environment: Environment;
7
+ event: Readonly<RelayEvent>;
8
8
  }
9
- export type RelayMode = "emit" | "validate";
10
- export declare function callEventApi({ event, options, environment, }: EventApiCallParams): Promise<any>;
9
+ export declare function callEventApi({ event, config, environment, }: EventApiCallParams): Promise<any>;
11
10
  //# sourceMappingURL=event-api-caller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-api-caller.d.ts","sourceRoot":"","sources":["../../../src/event-api-call/event-api-caller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAE5C,wBAAsB,YAAY,CAAC,EACjC,KAAK,EACL,OAAO,EACP,WAAW,GACZ,EAAE,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,CA2BnC"}
1
+ {"version":3,"file":"event-api-caller.d.ts","sourceRoot":"","sources":["../../../src/event-api-call/event-api-caller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CAC7B;AAED,wBAAsB,YAAY,CAAC,EACjC,KAAK,EACL,MAAM,EACN,WAAW,GACZ,EAAE,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,CA2BnC"}
@@ -0,0 +1,14 @@
1
+ import { RelayEvent } from "../event/relay-event";
2
+ export type EventCallback = (event: RelayEvent) => void;
3
+ interface Listener {
4
+ type: string;
5
+ callback: EventCallback;
6
+ }
7
+ interface ListenerManager {
8
+ add: (listener: Listener) => () => void;
9
+ call: (event: RelayEvent) => void;
10
+ remove: (type: string, callback?: EventCallback) => void;
11
+ }
12
+ export declare function createListenerManager(): ListenerManager;
13
+ export {};
14
+ //# sourceMappingURL=listener.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/listener/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIlD,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAExD,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,UAAU,eAAe;IACvB,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,IAAI,CAAC;IACxC,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;CAC1D;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CA4DvD"}
@@ -1,20 +1,18 @@
1
1
  import { ValidationError, ValidationResponse } from "./validate/validate";
2
- import { RelayMode } from "./event-api-call/event-api-caller";
3
2
  import { Meta } from "./event/meta/meta";
3
+ import { EventCallback } from "./listener/listener";
4
+ import { RelayConfig } from "./config/config";
4
5
  type RelayPayload = Record<string, unknown>;
5
- interface RelayOptions {
6
- host: string;
7
- organizationId: string;
8
- token: string;
9
- trackingId: string;
10
- mode?: RelayMode;
11
- }
6
+ type Off = () => void;
12
7
  interface Relay {
13
8
  validate: (type: string, payload: RelayPayload) => Promise<ValidationResponse>;
14
9
  emit: (type: string, payload: RelayPayload) => Promise<void>;
15
10
  getMeta: (type: string) => Meta;
11
+ on: (type: string, callback: EventCallback) => Off;
12
+ off: (type: string, callback?: EventCallback) => void;
13
+ updateConfig: (config: Partial<RelayConfig>) => void;
16
14
  version: string;
17
15
  }
18
- export declare function createRelay(options: RelayOptions): Relay;
19
- export type { RelayPayload, RelayOptions, ValidationError, ValidationResponse };
16
+ export declare function createRelay(initialConfig: RelayConfig): Relay;
17
+ export type { RelayPayload, RelayConfig, ValidationError, ValidationResponse };
20
18
  //# sourceMappingURL=relay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../src/relay.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,eAAe,EACf,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAc,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAErD,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5C,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,UAAU,KAAK;IACb,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,KAClB,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,KAAK,CAiCxD;AAED,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../src/relay.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,eAAe,EACf,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAc,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAyB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAuB,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnE,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,KAAK,GAAG,GAAG,MAAM,IAAI,CAAC;AAEtB,UAAU,KAAK;IACb,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,KAClB,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,KAAK,GAAG,CAAC;IACnD,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,aAAa,EAAE,WAAW,GAAG,KAAK,CAiD7D;AAED,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/validate/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EAEnB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAMvC"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/validate/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EACnB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAMvC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coveo/relay",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "A library for sending analytics events using Coveo's Event protocol.",
5
5
  "files": [
6
6
  "lib/**/*"