@benji-money/connect-sdk 1.0.10 → 1.1.0-beta.1

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.
@@ -110,7 +110,7 @@ var ConnectSDK = (() => {
110
110
  // src/utils/config.ts
111
111
  var buildContext = () => ({
112
112
  namespace: "benji-connect-sdk" ? "benji-connect-sdk" : "benji-connect-sdk",
113
- version: "1.0.10" ? String("1.0.10") : "0.0.0"
113
+ version: "1.1.0-beta.1" ? String("1.1.0-beta.1") : "0.0.0"
114
114
  });
115
115
  function isBenjiConnectEnvironment(environment) {
116
116
  return environment === "local" /* LOCAL */ || environment === "development" /* DEVELOPMENT */ || environment === "sandbox" /* SANDBOX */ || environment === "production" /* PRODUCTION */;
@@ -130,11 +130,31 @@ var ConnectSDK = (() => {
130
130
  return defaultEnvironment;
131
131
  }
132
132
 
133
+ // src/types/event.ts
134
+ var BenjiConnectEventType = /* @__PURE__ */ ((BenjiConnectEventType2) => {
135
+ BenjiConnectEventType2["AUTH_SUCCESS"] = "AUTH_SUCCESS";
136
+ BenjiConnectEventType2["FLOW_EXIT"] = "FLOW_EXIT";
137
+ BenjiConnectEventType2["FLOW_SUCCESS"] = "FLOW_SUCCESS";
138
+ BenjiConnectEventType2["EVENT"] = "EVENT";
139
+ BenjiConnectEventType2["ERROR"] = "ERROR";
140
+ return BenjiConnectEventType2;
141
+ })(BenjiConnectEventType || {});
142
+
133
143
  // src/utils/auth.ts
144
+ var CONNECT_MESSAGE_TYPES = new Set(Object.values(BenjiConnectEventType));
145
+ function isConnectMessageType(data2) {
146
+ if (!data2 || typeof data2 !== "object") return false;
147
+ const type = data2.type;
148
+ return typeof type === "string" && CONNECT_MESSAGE_TYPES.has(type);
149
+ }
134
150
  var extractAccessToken = (token) => {
135
151
  var _a;
136
152
  return typeof token === "string" ? token : (_a = token == null ? void 0 : token.access_token) != null ? _a : "";
137
153
  };
154
+ var extractExchangeToken = (token) => {
155
+ var _a;
156
+ return typeof token === "string" ? token : (_a = token == null ? void 0 : token.exchange_token) != null ? _a : "";
157
+ };
138
158
  var mapEventToConnectToken = (data2) => {
139
159
  var _a, _b, _c;
140
160
  return {
@@ -202,7 +222,7 @@ var ConnectSDK = (() => {
202
222
  };
203
223
  };
204
224
  var mapToOnSuccessData = (data2) => {
205
- const token = extractAccessToken(data2.token);
225
+ const token = data2.action === "login" /* Login */ ? extractExchangeToken(data2.token) : extractAccessToken(data2.token);
206
226
  let metadata = {
207
227
  context: buildContext(),
208
228
  action: data2.action,
@@ -249,6 +269,9 @@ var ConnectSDK = (() => {
249
269
  this.onEvent = config.onEvent;
250
270
  this.close = config.close;
251
271
  }
272
+ static setMode(mode) {
273
+ this.mode = mode;
274
+ }
252
275
  static addEventListeners() {
253
276
  if (this.configuredListeners) return;
254
277
  window.addEventListener("error", this.errorEventHandler);
@@ -261,6 +284,7 @@ var ConnectSDK = (() => {
261
284
  window.removeEventListener("unhandledrejection", this.errorEventHandler);
262
285
  window.removeEventListener("message", this.messageEventHandler);
263
286
  this.configuredListeners = false;
287
+ this.mode = 1 /* CONNECT */;
264
288
  }
265
289
  static handleErrorMessage(event) {
266
290
  switch (event.type) {
@@ -281,8 +305,8 @@ var ConnectSDK = (() => {
281
305
  }
282
306
  }
283
307
  static handleMessage(event) {
284
- var _a, _b, _c, _d, _e, _f;
285
- console.debug("[Benji Connect SDK] Received message", event);
308
+ var _a, _b, _c, _d, _e, _f, _g;
309
+ if (!isConnectMessageType(event.data)) return;
286
310
  const expectedOrigin = new URL(Endpoints.benji_connect_auth_url).origin;
287
311
  if (!event || event.origin !== expectedOrigin) {
288
312
  console.warn("[Benji Connect SDK] Skipped message, received event from unexpected origin", event.origin, expectedOrigin);
@@ -312,18 +336,21 @@ var ConnectSDK = (() => {
312
336
  const connectMessage = message;
313
337
  const callbackData = BenjiConnectCallbackMapperMap.FLOW_SUCCESS(connectMessage.data);
314
338
  (_d = this.onSuccess) == null ? void 0 : _d.call(this, callbackData.token, callbackData.metadata);
339
+ if (this.mode === 5 /* LOGIN */) {
340
+ (_e = this.close) == null ? void 0 : _e.call(this);
341
+ }
315
342
  break;
316
343
  }
317
344
  case "ERROR" /* ERROR */: {
318
345
  const connectMessage = message;
319
346
  const callbackData = BenjiConnectCallbackMapperMap.ERROR(connectMessage.data);
320
- (_e = this.onError) == null ? void 0 : _e.call(this, callbackData.error, callbackData.error_id, callbackData.metadata);
347
+ (_f = this.onError) == null ? void 0 : _f.call(this, callbackData.error, callbackData.error_id, callbackData.metadata);
321
348
  break;
322
349
  }
323
- default: {
324
- const m = message;
325
- const callbackData = mapToOnEventData(m, m.data);
326
- (_f = this.onEvent) == null ? void 0 : _f.call(this, callbackData.type, callbackData.metadata);
350
+ case "EVENT" /* EVENT */: {
351
+ const connectMessage = message;
352
+ const callbackData = mapToOnEventData(connectMessage, connectMessage.data);
353
+ (_g = this.onEvent) == null ? void 0 : _g.call(this, callbackData.type, callbackData.metadata);
327
354
  break;
328
355
  }
329
356
  }
@@ -332,6 +359,7 @@ var ConnectSDK = (() => {
332
359
  }
333
360
  };
334
361
  _MessageRouter.configuredListeners = false;
362
+ _MessageRouter.mode = 1 /* CONNECT */;
335
363
  _MessageRouter.errorEventHandler = (event) => {
336
364
  return _MessageRouter.handleErrorMessage(event);
337
365
  };
@@ -341,6 +369,14 @@ var ConnectSDK = (() => {
341
369
  var MessageRouter = _MessageRouter;
342
370
 
343
371
  // src/connect-sdk.ts
372
+ var IFRAME_STYLE = {
373
+ position: "relative",
374
+ width: "400px",
375
+ height: "645px",
376
+ border: "none",
377
+ borderRadius: "20px",
378
+ overflow: "hidden"
379
+ };
344
380
  var ConnectSDK = class {
345
381
  constructor(config) {
346
382
  this.iframe = null;
@@ -362,8 +398,10 @@ var ConnectSDK = (() => {
362
398
  });
363
399
  }
364
400
  async open() {
401
+ var _a;
365
402
  await this.initialize();
366
403
  this.openUI();
404
+ MessageRouter.setMode((_a = this.sdkConfig.mode) != null ? _a : 1 /* CONNECT */);
367
405
  MessageRouter.addEventListeners();
368
406
  }
369
407
  openUI() {
@@ -388,15 +426,11 @@ var ConnectSDK = (() => {
388
426
  const connectToken = this.sdkConfig.token;
389
427
  url.searchParams.set("connect_token", connectToken);
390
428
  url.searchParams.set("t", String(Date.now()));
429
+ if (this.sdkConfig.mode != null) {
430
+ url.searchParams.set("mode", String(this.sdkConfig.mode));
431
+ }
391
432
  this.iframe = document.createElement("iframe");
392
- Object.assign(this.iframe.style, {
393
- position: "relative",
394
- width: "400px",
395
- height: "645px",
396
- border: "none",
397
- borderRadius: "20px",
398
- overflow: "hidden"
399
- });
433
+ Object.assign(this.iframe.style, IFRAME_STYLE);
400
434
  this.iframe.src = url.toString();
401
435
  this.container.appendChild(this.iframe);
402
436
  document.body.appendChild(this.container);
@@ -412,8 +446,11 @@ var ConnectSDK = (() => {
412
446
  });
413
447
  }
414
448
  close() {
449
+ var _a;
415
450
  if (!this.iframe) return;
416
- document.body.removeChild(this.container);
451
+ if ((_a = this.container) == null ? void 0 : _a.parentNode) {
452
+ this.container.parentNode.removeChild(this.container);
453
+ }
417
454
  MessageRouter.removeEventListeners();
418
455
  this.iframe = null;
419
456
  this.container = null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config/production.ts","../src/config/sandbox.ts","../src/config/development.ts","../src/config/local.defaults.ts","../src/utils/environment.ts","../src/config/index.ts","../src/utils/config.ts","../src/utils/auth.ts","../src/utils/user.ts","../src/utils/transaction.ts","../src/types/router.ts","../src/router/message.ts","../src/connect-sdk.ts","../src/global.ts"],"sourcesContent":["export const project_environment: string = 'production';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url':'https://verifyapp.withbenji.com',\n 'benji_connect_auth_service_url' : 'https://authservice.withbenji.com'\n}","export const project_environment: string = 'sandbox';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url':'https://verifyapp-staging.withbenji.com',\n 'benji_connect_auth_service_url' : 'https://authservice-staging.withbenji.com'\n}","export const project_environment: string = 'development';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url': 'https://verifyapp-dev.withbenji.com',\n 'benji_connect_auth_service_url': 'https://authservice-dev.withbenji.com',\n};","/**\n * Build-time fallback when gitignored `local.ts` is absent (CI, fresh clones).\n * Same endpoints as development — not machine-specific localhost overrides.\n * Copy to `local.ts` locally for localhost URLs; see RELEASE.md.\n */\nexport const project_environment: string = 'local';\n\nexport const endpoints: Record<string, string> = {\n benji_connect_auth_url: 'https://verifyapp-dev.withbenji.com',\n benji_connect_auth_service_url: 'https://authservice-dev.withbenji.com',\n};\n","/** Hostnames that browsers use for loopback when typed literally in the URL bar. */\nexport const LOCAL_HOSTNAMES = ['localhost', '127.0.0.1', '::1', '[::1]'] as const;\n\nconst LOCAL_HOSTNAME_SET: ReadonlySet<string> = new Set(LOCAL_HOSTNAMES);\n\nexport function isLocalHost(\n hostname: string = typeof window !== 'undefined' ? window.location.hostname : ''\n): boolean {\n if (LOCAL_HOSTNAME_SET.has(hostname)) {\n return true;\n }\n // IPv4 loopback block 127.0.0.0/8 — covers 127.0.0.1 without listing every address\n if (hostname.startsWith('127.')) {\n return true;\n }\n return false;\n}\n","import * as productionConfig from './production';\nimport * as sandboxConfig from './sandbox';\nimport * as developmentConfig from './development';\nimport * as localConfig from './local';\nimport { BenjiConnectEnvironment } from '../types/config';\nimport { isLocalHost } from '../utils/environment';\n\nexport type EnvironmentConfigModule = {\n project_environment: string;\n endpoints: Record<string, string>;\n};\n\nconst env = typeof process !== 'undefined' ? process.env : {};\nlet data: EnvironmentConfigModule = developmentConfig;\ntype EndpointConfig = typeof developmentConfig.endpoints;\nexport let Endpoints: EndpointConfig = getEndpoints();\nexport let Environment = BenjiConnectEnvironment.DEVELOPMENT;\n\nexport function configureConfig(environment: BenjiConnectEnvironment) {\n if (environment == 'production') {\n console.log('[Connect SDK] configuring with environment production');\n data = productionConfig;\n } else if (environment == 'sandbox') {\n console.log('[Connect SDK] configuring with environment sandbox');\n data = sandboxConfig;\n } else if (environment == 'development') {\n console.log('[Connect SDK] configuring with environment development');\n data = developmentConfig;\n } else if (environment == 'local') {\n if (isLocalHost()) {\n console.log('[Connect SDK] configuring with environment local');\n data = localConfig;\n } else {\n console.log(\n '[Connect SDK] local environment requested on non-local host; using development'\n );\n data = developmentConfig;\n }\n }\n Endpoints = getEndpoints();\n Environment = getEnvironment();\n}\n\nfunction getEndpoints(): EndpointConfig {\n const entries = Object.entries(data.endpoints).map(([key, value]) => {\n const override = env?.[key] || value;\n return [key, override] as const;\n });\n return Object.fromEntries(entries) as EndpointConfig;\n}\n\nfunction getEnvironment(): BenjiConnectEnvironment {\n return data['project_environment'] as BenjiConnectEnvironment;\n}\n\nexport const Namespace = __NAMESPACE__;\nexport const Version = __VERSION__;\n","import { BenjiConnectEnvironment } from \"../types/config\";\nimport { isLocalHost } from \"./environment\";\n\nexport const buildContext = () => ({\n namespace: typeof __NAMESPACE__ !== 'undefined' && __NAMESPACE__ ? __NAMESPACE__ : 'benji-connect-sdk',\n version: typeof __VERSION__ !== 'undefined' && __VERSION__ ? String(__VERSION__) : '0.0.0',\n});\n\nexport function isBenjiConnectEnvironment(\n environment: unknown\n): environment is BenjiConnectEnvironment {\n return (\n environment === BenjiConnectEnvironment.LOCAL ||\n environment === BenjiConnectEnvironment.DEVELOPMENT ||\n environment === BenjiConnectEnvironment.SANDBOX ||\n environment === BenjiConnectEnvironment.PRODUCTION\n );\n}\n\nexport function mapToConnectEnvironment(\n environment: BenjiConnectEnvironment | string\n): BenjiConnectEnvironment {\n\n if (isBenjiConnectEnvironment(environment)) return environment;\n\n const environments: Record<string, BenjiConnectEnvironment> = {\n local: BenjiConnectEnvironment.LOCAL,\n development: BenjiConnectEnvironment.DEVELOPMENT,\n sandbox: BenjiConnectEnvironment.SANDBOX,\n production: BenjiConnectEnvironment.PRODUCTION,\n };\n const mapped = environments[environment];\n if (mapped) return mapped;\n\n const defaultEnvironment = isLocalHost()\n ? BenjiConnectEnvironment.LOCAL\n : BenjiConnectEnvironment.DEVELOPMENT;\n console.warn(`[Benji Connect SDK] ${environment} not valid environment defaulting to ${defaultEnvironment}`);\n\n return defaultEnvironment;\n}","import { BenjiConnectAuthToken } from \"../types/auth\";\nimport { BenjiConnectEventToken } from \"../types/event\";\n\nexport const extractAccessToken = (token?: BenjiConnectEventToken | string): string =>\n typeof token === 'string' ? token : (token?.access_token ?? '');\n\nexport const mapEventToConnectToken = (data?: BenjiConnectEventToken): BenjiConnectAuthToken => ({\n access_token: data?.access_token ?? '',\n refresh_token: data?.refresh_token ?? '',\n expires_at: data?.expires_at ?? ''\n});","import { BenjiConnectEventUserData } from \"../types/event\";\nimport { BenjiConnectUserData } from \"../types/user\";\n\nexport function isConnectUserData (\n input: BenjiConnectUserData | Record<string, any>\n): boolean {\n if (!input) return false;\n const data = mapEventToConnectUserData(input);\n if (data.user.id != 0) return true;\n return false;\n}\n\nexport const mapEventToConnectUserData = (\n data?: BenjiConnectEventUserData | Record<string, any>\n): BenjiConnectUserData => ({\n user: {\n id: data?.user?.id ?? 0,\n first_name: data?.user?.first_name ?? '',\n last_name: data?.user?.last_name ?? '',\n uuid: data?.user?.uuid \n },\n status: {\n status_id: data?.status?.status_id ?? '',\n num_of_rewards: data?.status?.num_of_rewards ?? 0,\n reward_status: data?.status?.reward_status ?? '',\n partner_status_tier_id: data?.status?.partner_status_tier_id\n },\n extra_data: {\n total_rewards_earned: data?.extra_data?.total_rewards_earned,\n total_rewards_redeemed: data?.extra_data?.total_rewards_redeemed,\n created_date: data?.extra_data?.created_date\n }\n});\n","import { BenjiConnectEventTransactionData } from \"../types/event\";\nimport { BenjiConnectTransactionData } from \"../types/transaction\";\n\nexport const mapEventToConnectTransactionData = (data?: BenjiConnectEventTransactionData): BenjiConnectTransactionData | null => {\n if (!data) return null;\n return {\n action: data.action,\n amount: data.amount,\n trigger_event_id: data.trigger_event_id,\n trigger_name: data.trigger_name\n };\n}","import { \n BenjiConnectMetadata, \n BenjiConnectOnErrorData, \n BenjiConnectOnEventData, \n BenjiConnectOnExitData, \n BenjiConnectOnExitMetadata, \n BenjiConnectOnSuccessData, \n BenjiConnectOnSuccessMetadata \n} from './config';\n\nimport { \n extractAccessToken, \n mapEventToConnectToken \n} from '../utils/auth';\n\nimport { buildContext } from '../utils/config';\nimport { mapEventToConnectUserData } from '../utils/user';\n\nimport { \n BenjiConnectAuthSuccessEventData,\n BenjiConnectErrorEventData, \n BenjiConnectEventDataMap, \n BenjiConnectEventMessage, \n BenjiConnectEventType, \n BenjiConnectFlowExitEventData\n} from './event';\nimport { mapEventToConnectTransactionData } from '../utils/transaction';\n\nexport type MessageRouterConfig = {\n onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n close?: () => void;\n};\n\nexport const mapToAuthSuccessData = (\n message: BenjiConnectEventMessage<BenjiConnectEventType.AUTH_SUCCESS>,\n data: BenjiConnectAuthSuccessEventData\n): BenjiConnectOnEventData => {\n return {\n type: message.type,\n metadata: {\n context: buildContext(),\n action: data.action,\n token: mapEventToConnectToken(data.token),\n transactionData: mapEventToConnectTransactionData(data.transaction),\n userData: mapEventToConnectUserData(data.metadata)\n }\n };\n};\n\nexport const mapToOnExitData = (data: BenjiConnectFlowExitEventData): BenjiConnectOnExitData => {\n return {\n metadata: {\n context: buildContext(),\n step: data.step,\n trigger: data.trigger\n }\n };\n};\n\nexport const mapToOnSuccessData = (data: BenjiConnectAuthSuccessEventData): BenjiConnectOnSuccessData => {\n \n const token = extractAccessToken(data.token);\n\n let metadata: BenjiConnectOnSuccessMetadata = {\n context: buildContext(),\n action: data.action,\n user_data: data.metadata\n };\n\n if (data.transaction) {\n metadata.transaction_data = data.transaction;\n }\n \n return { token, metadata };\n};\n\nexport const mapToOnErrorData = (data: BenjiConnectErrorEventData): BenjiConnectOnErrorData => {\n return {\n error: data.error,\n error_id: '500', // Placeholder\n metadata: {\n context: buildContext()\n }\n };\n};\n\nexport const mapToOnEventData = <K extends BenjiConnectEventType>(\n message: BenjiConnectEventMessage<K>,\n data: BenjiConnectEventDataMap[K]\n): BenjiConnectOnEventData => {\n return {\n type: message.type,\n metadata: {\n context: buildContext(),\n ...data\n }\n };\n};\n\nexport type BenjiConnectCallbackDataMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: BenjiConnectOnEventData;\n [BenjiConnectEventType.FLOW_EXIT]: BenjiConnectOnExitData;\n [BenjiConnectEventType.FLOW_SUCCESS]: BenjiConnectOnSuccessData;\n [BenjiConnectEventType.ERROR]: BenjiConnectOnErrorData;\n [BenjiConnectEventType.EVENT]: BenjiConnectOnEventData;\n '*': BenjiConnectOnEventData;\n};\n\nexport const BenjiConnectCallbackMapperMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: mapToAuthSuccessData,\n [BenjiConnectEventType.FLOW_EXIT]: mapToOnExitData,\n [BenjiConnectEventType.FLOW_SUCCESS]: mapToOnSuccessData,\n [BenjiConnectEventType.ERROR]: mapToOnErrorData,\n [BenjiConnectEventType.EVENT]: mapToOnEventData,\n} as const;\n\n","import { \n Endpoints\n} from '../config';\n\nimport {\n BenjiConnectEventType,\n type BenjiConnectEventData,\n type BenjiConnectEventMessage\n} from '../types/event';\n\nimport type {\n BenjiConnectOnSuccessData,\n BenjiConnectOnExitData,\n BenjiConnectMetadata,\n BenjiConnectOnSuccessMetadata,\n BenjiConnectOnExitMetadata\n} from '../types/config';\n\nimport {\n BenjiConnectCallbackMapperMap,\n MessageRouterConfig,\n mapToOnEventData\n} from '../types/router';\n\nexport class MessageRouter {\n\n static configuredListeners = false;\n static onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n static onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n static onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n static onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n static close?: () => void;\n\n static configureMessageRouter(config: MessageRouterConfig) {\n this.onSuccess = config.onSuccess;\n this.onError = config.onError;\n this.onExit = config.onExit;\n this.onEvent = config.onEvent;\n this.close = config.close;\n }\n\n static errorEventHandler = (event: Event) => { \n return MessageRouter.handleErrorMessage(event) \n };\n\n static messageEventHandler = (event: MessageEvent<unknown>) => { \n return MessageRouter.handleMessage(event) \n };\n\n static addEventListeners() {\n if (this.configuredListeners) return;\n window.addEventListener('error', this.errorEventHandler);\n window.addEventListener('unhandledrejection', this.errorEventHandler);\n window.addEventListener('message', this.messageEventHandler);\n this.configuredListeners = true;\n\n // Test uncaught error handling\n // Promise.reject(new Error('[Benji Connect SDK] MessageRouter Test rejection'));\n // throw new Error('[Benji Connect SDK] MessageRouter Test error');\n }\n\n static removeEventListeners() {\n window.removeEventListener('error', this.errorEventHandler);\n window.removeEventListener('unhandledrejection', this.errorEventHandler);\n window.removeEventListener('message', this.messageEventHandler);\n this.configuredListeners = false;\n }\n\n static handleErrorMessage(event: Event) { \n switch(event.type) {\n case 'error': {\n const errorEvent = event as ErrorEvent;\n const error = errorEvent.error || new Error(errorEvent.message);\n // TODO: Track error\n break;\n }\n case 'unhandledrejection': {\n const rejectionEvent = event as PromiseRejectionEvent;\n const reason = rejectionEvent.reason instanceof Error\n ? rejectionEvent.reason\n : new Error(String(rejectionEvent.reason));\n // TODO: Track error (reason)\n break;\n }\n default: {\n console.error('[Benji Connect SDK] Received Unknown error message', event);\n break;\n }\n }\n }\n\n static handleMessage(event: MessageEvent<unknown>) {\n\n console.debug('[Benji Connect SDK] Received message', event);\n \n // Basic origin check\n const expectedOrigin: string = new URL(Endpoints.benji_connect_auth_url).origin;\n if (!event || event.origin !== expectedOrigin) {\n console.warn('[Benji Connect SDK] Skipped message, received event from unexpected origin', event.origin, expectedOrigin);\n return;\n }\n\n const raw = event.data;\n if (!raw || typeof raw !== 'object') return;\n\n const partial = raw as Partial<BenjiConnectEventMessage>;\n if (typeof partial.type !== 'string') return;\n \n const message = partial as BenjiConnectEventMessage;\n\n // TODO: Proper Constraint checks\n // if (Namespace && message.namespace && message.namespace !== Namespace) return;\n // if (Version != null && message.version != null && String(message.version) !== String(Version)) return;\n\n // TODO: Track message received either here or below but not both\n \n try {\n // Type events and route to callbacks\n switch (message.type) {\n\n case BenjiConnectEventType.AUTH_SUCCESS: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.AUTH_SUCCESS>;\n const callbackData = BenjiConnectCallbackMapperMap.AUTH_SUCCESS(connectMessage, connectMessage.data);\n // TODO: Track message received?\n this.onEvent?.(callbackData.type, callbackData.metadata); \n break;\n }\n\n case BenjiConnectEventType.FLOW_EXIT: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.FLOW_EXIT>;\n const callbackData = BenjiConnectCallbackMapperMap.FLOW_EXIT(connectMessage.data) as BenjiConnectOnExitData;\n // TODO: Track message received?\n this.onExit?.(callbackData.metadata);\n this.close?.();\n break;\n }\n\n case BenjiConnectEventType.FLOW_SUCCESS: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.FLOW_SUCCESS>;\n // TODO: Track message received?\n // Forward onSuccess when flow completes for connect, redeem and transfer \n const callbackData = BenjiConnectCallbackMapperMap.FLOW_SUCCESS(connectMessage.data) as BenjiConnectOnSuccessData;\n this.onSuccess?.(callbackData.token, callbackData.metadata); \n break;\n }\n\n case BenjiConnectEventType.ERROR: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.ERROR>;\n // TODO: Track message received?\n const callbackData = BenjiConnectCallbackMapperMap.ERROR(connectMessage.data);\n this.onError?.(callbackData.error, callbackData.error_id, callbackData.metadata);\n break;\n }\n\n default: {\n // Unknown event type (forward generically)\n const m = message as BenjiConnectEventMessage<any>;\n // TODO: Track message received?\n const callbackData = mapToOnEventData(m, m.data as BenjiConnectEventData);\n this.onEvent?.(callbackData.type, callbackData.metadata);\n break;\n }\n }\n } finally {\n // TODO: Any cleanup logic \n }\n }\n\n}","/// <reference path=\"./global.d.ts\" />\n\nimport { \n configureConfig, \n Endpoints\n} from './config';\n\nimport { \n type BenjiConnectConfig, \n BenjiConnectEnvironment\n} from './types/config';\n\nimport { \n buildContext, \n mapToConnectEnvironment \n} from './utils/config';\n\nimport { MessageRouter } from './router/message';\nimport { BenjiConnectExitTrigger } from './types/event';\n\nclass ConnectSDK {\n\n private sdkConfig: BenjiConnectConfig;\n private iframe: HTMLIFrameElement | null = null;\n private container: HTMLDivElement | null = null;\n\n constructor(config: BenjiConnectConfig) {\n\n this.sdkConfig = config;\n\n // Validations\n if (!this.sdkConfig.environment) throw new Error('Environment is required');\n if (!this.sdkConfig.token) throw new Error('Connect token is required');\n\n // Set internal config for environment based on consumer input at runtime\n const environment: BenjiConnectEnvironment = mapToConnectEnvironment(this.sdkConfig.environment);\n this.sdkConfig.environment = environment;\n configureConfig(environment);\n }\n\n async initialize() {\n \n // Configure message router for all postMessage from connect modal and error messages\n MessageRouter.configureMessageRouter({\n onSuccess: this.sdkConfig.onSuccess,\n onError: this.sdkConfig.onError,\n onExit: this.sdkConfig.onExit,\n onEvent: this.sdkConfig.onEvent,\n close: () => this.close()\n });\n\n // TODO: Tracker.configureWithOptions(sdkOptions);\n // TODO: Tracker.trackSDKInitialized();\n }\n\n async open() {\n await this.initialize();\n this.openUI();\n MessageRouter.addEventListeners();\n // TODO: Track SDK Opened Tracker.trackSDKOpened();\n }\n\n openUI() {\n if (this.iframe) return;\n\n // container\n this.container = document.createElement('div');\n Object.assign(this.container.style, {\n position: 'fixed', \n top: '0', \n left: '0', \n width: '100%', \n height: '100%',\n backgroundColor: 'rgba(0,0,0,0.5)', \n zIndex: '9999', \n display: 'flex',\n alignItems: 'center', \n justifyContent: 'center', \n overflow: 'auto'\n } as CSSStyleDeclaration);\n\n // iframe\n console.debug('[Connect SDK] endpoints', Endpoints);\n console.log('[Connect SDK] opeining URL', Endpoints.benji_connect_auth_url);\n const url = new URL(Endpoints.benji_connect_auth_url);\n const connectToken = this.sdkConfig.token;\n url.searchParams.set('connect_token', connectToken);\n url.searchParams.set('t', String(Date.now()));\n\n this.iframe = document.createElement('iframe');\n Object.assign(this.iframe.style, {\n position: 'relative', \n width: '400px', \n height: '645px',\n border: 'none', \n borderRadius: '20px', \n overflow: 'hidden'\n } as CSSStyleDeclaration);\n this.iframe.src = url.toString();\n\n this.container.appendChild(this.iframe);\n document.body.appendChild(this.container);\n\n this.container.addEventListener('click', (e) => {\n if (e.target === this.container) {\n // Trigger exit when user taps outside modal bounds\n this.sdkConfig.onExit?.({\n context: buildContext(),\n trigger: BenjiConnectExitTrigger.TAPPED_OUT_OF_BOUNDS\n });\n this.close();\n }\n });\n }\n\n close() {\n if (!this.iframe) return;\n document.body.removeChild(this.container!);\n MessageRouter.removeEventListeners();\n // TODO: Track SDK Closed Tracker.trackSDKClosed();\n this.iframe = null;\n this.container = null;\n }\n\n cleanup() {\n if (this.iframe) this.close();\n }\n\n ping() { return 'pong'; }\n}\n\nexport default ConnectSDK;","/// <reference path=\"./global.d.ts\" />\nimport ConnectSDK from './connect-sdk';\n(globalThis as any).ConnectSDK = ConnectSDK;"],"mappings":";;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,sBAA8B;AAEpC,MAAM,YAAoC;AAAA,IAC/C,0BAAyB;AAAA,IACzB,kCAAmC;AAAA,EACrC;;;ACLA;AAAA;AAAA,qBAAAA;AAAA,IAAA,2BAAAC;AAAA;AAAO,MAAMA,uBAA8B;AAEpC,MAAMD,aAAoC;AAAA,IAC/C,0BAAyB;AAAA,IACzB,kCAAmC;AAAA,EACrC;;;ACLA;AAAA;AAAA,qBAAAE;AAAA,IAAA,2BAAAC;AAAA;AAAO,MAAMA,uBAA8B;AAEpC,MAAMD,aAAoC;AAAA,IAC/C,0BAA0B;AAAA,IAC1B,kCAAkC;AAAA,EACpC;;;ACLA;AAAA;AAAA,qBAAAE;AAAA,IAAA,2BAAAC;AAAA;AAKO,MAAMA,uBAA8B;AAEpC,MAAMD,aAAoC;AAAA,IAC/C,wBAAwB;AAAA,IACxB,gCAAgC;AAAA,EAClC;;;ACTO,MAAM,kBAAkB,CAAC,aAAa,aAAa,OAAO,OAAO;AAExE,MAAM,qBAA0C,IAAI,IAAI,eAAe;AAEhE,WAAS,YACd,WAAmB,OAAO,WAAW,cAAc,OAAO,SAAS,WAAW,IACrE;AACT,QAAI,mBAAmB,IAAI,QAAQ,GAAG;AACpC,aAAO;AAAA,IACT;AAEA,QAAI,SAAS,WAAW,MAAM,GAAG;AAC/B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;;;ACJA,MAAM,MAAM,OAAO,YAAY,cAAc,QAAQ,MAAM,CAAC;AAC5D,MAAI,OAAgC;AAE7B,MAAI,YAA4B,aAAa;AAC7C,MAAI;AAEJ,WAAS,gBAAgB,aAAsC;AACpE,QAAI,eAAe,cAAc;AAC/B,cAAQ,IAAI,uDAAuD;AACnE,aAAO;AAAA,IACT,WAAW,eAAe,WAAW;AACnC,cAAQ,IAAI,oDAAoD;AAChE,aAAO;AAAA,IACT,WAAW,eAAe,eAAe;AACvC,cAAQ,IAAI,wDAAwD;AACpE,aAAO;AAAA,IACT,WAAW,eAAe,SAAS;AACjC,UAAI,YAAY,GAAG;AACjB,gBAAQ,IAAI,kDAAkD;AAC9D,eAAO;AAAA,MACT,OAAO;AACL,gBAAQ;AAAA,UACN;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,gBAAY,aAAa;AACzB,kBAAc,eAAe;AAAA,EAC/B;AAEA,WAAS,eAA+B;AACtC,UAAM,UAAU,OAAO,QAAQ,KAAK,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACnE,YAAM,YAAW,2BAAM,SAAQ;AAC/B,aAAO,CAAC,KAAK,QAAQ;AAAA,IACvB,CAAC;AACD,WAAO,OAAO,YAAY,OAAO;AAAA,EACnC;AAEA,WAAS,iBAA0C;AACjD,WAAO,KAAK,qBAAqB;AAAA,EACnC;;;AClDO,MAAM,eAAe,OAAO;AAAA,IACjC,WAAmD,sBAAgB,sBAAgB;AAAA,IACnF,SAA+C,WAAc,OAAO,QAAW,IAAI;AAAA,EACrF;AAEO,WAAS,0BACd,aACwC;AACxC,WACE,uCACA,mDACA,2CACA;AAAA,EAEJ;AAEO,WAAS,wBACd,aACyB;AAEzB,QAAI,0BAA0B,WAAW,EAAG,QAAO;AAEnD,UAAM,eAAwD;AAAA,MAC5D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,aAAa,WAAW;AACvC,QAAI,OAAQ,QAAO;AAEnB,UAAM,qBAAqB,YAAY;AAGvC,YAAQ,KAAK,uBAAuB,WAAW,wCAAwC,kBAAkB,EAAE;AAE3G,WAAO;AAAA,EACT;;;ACrCO,MAAM,qBAAqB,CAAC,UAAiD;AAHpF;AAIE,kBAAO,UAAU,WAAW,SAAS,oCAAO,iBAAP,YAAuB;AAAA;AAEvD,MAAM,yBAAyB,CAACE,UAAsD;AAN7F;AAMiG;AAAA,MAC/F,eAAc,KAAAA,SAAA,gBAAAA,MAAM,iBAAN,YAAsB;AAAA,MACpC,gBAAe,KAAAA,SAAA,gBAAAA,MAAM,kBAAN,YAAuB;AAAA,MACtC,aAAY,KAAAA,SAAA,gBAAAA,MAAM,eAAN,YAAoB;AAAA,IAClC;AAAA;;;ACEO,MAAM,4BAA4B,CACvCC,UACsB;AAdxB;AAc4B;AAAA,MAC1B,MAAM;AAAA,QACJ,KAAI,WAAAA,SAAA,gBAAAA,MAAM,SAAN,mBAAY,OAAZ,YAAkB;AAAA,QACtB,aAAY,WAAAA,SAAA,gBAAAA,MAAM,SAAN,mBAAY,eAAZ,YAA0B;AAAA,QACtC,YAAW,WAAAA,SAAA,gBAAAA,MAAM,SAAN,mBAAY,cAAZ,YAAyB;AAAA,QACpC,OAAM,KAAAA,SAAA,gBAAAA,MAAM,SAAN,mBAAY;AAAA,MACpB;AAAA,MACA,QAAQ;AAAA,QACN,YAAW,WAAAA,SAAA,gBAAAA,MAAM,WAAN,mBAAc,cAAd,YAA2B;AAAA,QACtC,iBAAgB,WAAAA,SAAA,gBAAAA,MAAM,WAAN,mBAAc,mBAAd,YAAgC;AAAA,QAChD,gBAAe,WAAAA,SAAA,gBAAAA,MAAM,WAAN,mBAAc,kBAAd,YAA+B;AAAA,QAC9C,yBAAwB,KAAAA,SAAA,gBAAAA,MAAM,WAAN,mBAAc;AAAA,MACxC;AAAA,MACA,YAAY;AAAA,QACV,uBAAsB,KAAAA,SAAA,gBAAAA,MAAM,eAAN,mBAAkB;AAAA,QACxC,yBAAwB,KAAAA,SAAA,gBAAAA,MAAM,eAAN,mBAAkB;AAAA,QAC1C,eAAc,KAAAA,SAAA,gBAAAA,MAAM,eAAN,mBAAkB;AAAA,MAClC;AAAA,IACF;AAAA;;;AC7BO,MAAM,mCAAmC,CAACC,UAAgF;AAC7H,QAAI,CAACA,MAAM,QAAO;AAClB,WAAO;AAAA,MACH,QAAQA,MAAK;AAAA,MACb,QAAQA,MAAK;AAAA,MACb,kBAAkBA,MAAK;AAAA,MACvB,cAAcA,MAAK;AAAA,IACvB;AAAA,EACJ;;;ACqCO,MAAM,uBAAuB,CAClC,SACAC,UAC4B;AAC5B,WAAO;AAAA,MACL,MAAM,QAAQ;AAAA,MACd,UAAU;AAAA,QACR,SAAS,aAAa;AAAA,QACtB,QAAQA,MAAK;AAAA,QACb,OAAO,uBAAuBA,MAAK,KAAK;AAAA,QACxC,iBAAiB,iCAAiCA,MAAK,WAAW;AAAA,QAClE,UAAU,0BAA0BA,MAAK,QAAQ;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAEO,MAAM,kBAAkB,CAACA,UAAgE;AAC9F,WAAO;AAAA,MACJ,UAAU;AAAA,QACT,SAAS,aAAa;AAAA,QACtB,MAAMA,MAAK;AAAA,QACX,SAASA,MAAK;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAEO,MAAM,qBAAqB,CAACA,UAAsE;AAEvG,UAAM,QAAQ,mBAAmBA,MAAK,KAAK;AAE3C,QAAI,WAA0C;AAAA,MAC5C,SAAS,aAAa;AAAA,MACtB,QAAQA,MAAK;AAAA,MACb,WAAWA,MAAK;AAAA,IAClB;AAEA,QAAIA,MAAK,aAAa;AACpB,eAAS,mBAAmBA,MAAK;AAAA,IACnC;AAEA,WAAO,EAAE,OAAO,SAAS;AAAA,EAC3B;AAEO,MAAM,mBAAmB,CAACA,UAA8D;AAC7F,WAAO;AAAA,MACL,OAAOA,MAAK;AAAA,MACZ,UAAU;AAAA;AAAA,MACV,UAAU;AAAA,QACR,SAAS,aAAa;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAEO,MAAM,mBAAmB,CAC9B,SACAA,UAC4B;AAC5B,WAAO;AAAA,MACL,MAAM,QAAQ;AAAA,MACd,UAAU;AAAA,QACR,SAAS,aAAa;AAAA,QACtB,GAAGA;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAWO,MAAM,gCAAgC;AAAA,IAC3C,kCAAmC,GAAG;AAAA,IACtC,4BAAgC,GAAG;AAAA,IACnC,kCAAmC,GAAG;AAAA,IACtC,oBAA4B,GAAG;AAAA,IAC/B,oBAA4B,GAAG;AAAA,EACjC;;;ACzGO,MAAM,iBAAN,MAAM,eAAc;AAAA,IAqBzB,OAAO,uBAAuB,QAA6B;AACzD,WAAK,YAAY,OAAO;AACxB,WAAK,UAAU,OAAO;AACtB,WAAK,SAAS,OAAO;AACrB,WAAK,UAAU,OAAO;AACtB,WAAK,QAAQ,OAAO;AAAA,IACtB;AAAA,IAUA,OAAO,oBAAoB;AACzB,UAAI,KAAK,oBAAqB;AAC9B,aAAO,iBAAiB,SAAS,KAAK,iBAAiB;AACvD,aAAO,iBAAiB,sBAAsB,KAAK,iBAAiB;AACpE,aAAO,iBAAiB,WAAW,KAAK,mBAAmB;AAC3D,WAAK,sBAAsB;AAAA,IAK7B;AAAA,IAEA,OAAO,uBAAuB;AAC5B,aAAO,oBAAoB,SAAS,KAAK,iBAAiB;AAC1D,aAAO,oBAAoB,sBAAsB,KAAK,iBAAiB;AACvE,aAAO,oBAAoB,WAAW,KAAK,mBAAmB;AAC9D,WAAK,sBAAsB;AAAA,IAC7B;AAAA,IAEA,OAAO,mBAAmB,OAAc;AACtC,cAAO,MAAM,MAAM;AAAA,QACjB,KAAK,SAAS;AACZ,gBAAM,aAAa;AACnB,gBAAM,QAAQ,WAAW,SAAS,IAAI,MAAM,WAAW,OAAO;AAE9D;AAAA,QACF;AAAA,QACA,KAAK,sBAAsB;AACzB,gBAAM,iBAAiB;AACvB,gBAAM,SAAS,eAAe,kBAAkB,QAC5C,eAAe,SACf,IAAI,MAAM,OAAO,eAAe,MAAM,CAAC;AAE3C;AAAA,QACF;AAAA,QACA,SAAS;AACP,kBAAQ,MAAM,sDAAsD,KAAK;AACzE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO,cAAc,OAA8B;AAvGrD;AAyGI,cAAQ,MAAM,wCAAwC,KAAK;AAG3D,YAAM,iBAAyB,IAAI,IAAI,UAAU,sBAAsB,EAAE;AACzE,UAAI,CAAC,SAAS,MAAM,WAAW,gBAAgB;AAC7C,gBAAQ,KAAK,8EAA8E,MAAM,QAAQ,cAAc;AACvH;AAAA,MACF;AAEA,YAAM,MAAM,MAAM;AAClB,UAAI,CAAC,OAAO,OAAO,QAAQ,SAAU;AAErC,YAAM,UAAU;AAChB,UAAI,OAAO,QAAQ,SAAS,SAAU;AAEtC,YAAM,UAAU;AAQhB,UAAI;AAEF,gBAAQ,QAAQ,MAAM;AAAA,UAEpB,wCAAyC;AACvC,kBAAM,iBAAiB;AACvB,kBAAM,eAAe,8BAA8B,aAAa,gBAAgB,eAAe,IAAI;AAEnG,uBAAK,YAAL,8BAAe,aAAa,MAAM,aAAa;AAC/C;AAAA,UACF;AAAA,UAEA,kCAAsC;AACpC,kBAAM,iBAAiB;AACvB,kBAAM,eAAe,8BAA8B,UAAU,eAAe,IAAI;AAEhF,uBAAK,WAAL,8BAAc,aAAa;AAC3B,uBAAK,UAAL;AACA;AAAA,UACF;AAAA,UAEA,wCAAyC;AACvC,kBAAM,iBAAiB;AAGvB,kBAAM,eAAe,8BAA8B,aAAa,eAAe,IAAI;AACnF,uBAAK,cAAL,8BAAiB,aAAa,OAAO,aAAa;AAClD;AAAA,UACF;AAAA,UAEA,0BAAkC;AAChC,kBAAM,iBAAiB;AAEvB,kBAAM,eAAe,8BAA8B,MAAM,eAAe,IAAI;AAC5E,uBAAK,YAAL,8BAAe,aAAa,OAAO,aAAa,UAAU,aAAa;AACvE;AAAA,UACF;AAAA,UAEA,SAAS;AAEP,kBAAM,IAAI;AAEV,kBAAM,eAAe,iBAAiB,GAAG,EAAE,IAA6B;AACxE,uBAAK,YAAL,8BAAe,aAAa,MAAM,aAAa;AAC/C;AAAA,UACF;AAAA,QACF;AAAA,MACF,UAAE;AAAA,MAEF;AAAA,IACF;AAAA,EAEF;AA1JE,EAFW,eAEJ,sBAAsB;AA2B7B,EA7BW,eA6BJ,oBAAoB,CAAC,UAAiB;AAC3C,WAAO,eAAc,mBAAmB,KAAK;AAAA,EAC/C;AAEA,EAjCW,eAiCJ,sBAAsB,CAAC,UAAiC;AAC7D,WAAO,eAAc,cAAc,KAAK;AAAA,EAC1C;AAnCK,MAAM,gBAAN;;;ACJP,MAAM,aAAN,MAAiB;AAAA,IAMf,YAAY,QAA4B;AAHxC,WAAQ,SAAmC;AAC3C,WAAQ,YAAmC;AAIzC,WAAK,YAAY;AAGjB,UAAI,CAAC,KAAK,UAAU,YAAa,OAAM,IAAI,MAAM,yBAAyB;AAC1E,UAAI,CAAC,KAAK,UAAU,MAAO,OAAM,IAAI,MAAM,2BAA2B;AAGtE,YAAM,cAAuC,wBAAwB,KAAK,UAAU,WAAW;AAC/F,WAAK,UAAU,cAAc;AAC7B,sBAAgB,WAAW;AAAA,IAC7B;AAAA,IAEA,MAAM,aAAa;AAGjB,oBAAc,uBAAuB;AAAA,QACnC,WAAW,KAAK,UAAU;AAAA,QAC1B,SAAS,KAAK,UAAU;AAAA,QACxB,QAAQ,KAAK,UAAU;AAAA,QACvB,SAAS,KAAK,UAAU;AAAA,QACxB,OAAO,MAAM,KAAK,MAAM;AAAA,MAC1B,CAAC;AAAA,IAIH;AAAA,IAEA,MAAM,OAAO;AACX,YAAM,KAAK,WAAW;AACtB,WAAK,OAAO;AACZ,oBAAc,kBAAkB;AAAA,IAElC;AAAA,IAEA,SAAS;AACP,UAAI,KAAK,OAAQ;AAGjB,WAAK,YAAY,SAAS,cAAc,KAAK;AAC7C,aAAO,OAAO,KAAK,UAAU,OAAO;AAAA,QAClC,UAAU;AAAA,QACV,KAAK;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,UAAU;AAAA,MACZ,CAAwB;AAGxB,cAAQ,MAAM,2BAA2B,SAAS;AAClD,cAAQ,IAAI,8BAA8B,UAAU,sBAAsB;AAC1E,YAAM,MAAM,IAAI,IAAI,UAAU,sBAAsB;AACpD,YAAM,eAAe,KAAK,UAAU;AACpC,UAAI,aAAa,IAAI,iBAAiB,YAAY;AAClD,UAAI,aAAa,IAAI,KAAK,OAAO,KAAK,IAAI,CAAC,CAAC;AAE5C,WAAK,SAAS,SAAS,cAAc,QAAQ;AAC7C,aAAO,OAAO,KAAK,OAAO,OAAO;AAAA,QAC/B,UAAU;AAAA,QACV,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,UAAU;AAAA,MACZ,CAAwB;AACxB,WAAK,OAAO,MAAM,IAAI,SAAS;AAE/B,WAAK,UAAU,YAAY,KAAK,MAAM;AACtC,eAAS,KAAK,YAAY,KAAK,SAAS;AAExC,WAAK,UAAU,iBAAiB,SAAS,CAAC,MAAM;AAvGpD;AAwGM,YAAI,EAAE,WAAW,KAAK,WAAW;AAE/B,2BAAK,WAAU,WAAf,4BAAwB;AAAA,YACtB,SAAS,aAAa;AAAA,YACtB;AAAA,UACF;AACA,eAAK,MAAM;AAAA,QACb;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,QAAQ;AACN,UAAI,CAAC,KAAK,OAAQ;AAClB,eAAS,KAAK,YAAY,KAAK,SAAU;AACzC,oBAAc,qBAAqB;AAEnC,WAAK,SAAS;AACd,WAAK,YAAY;AAAA,IACnB;AAAA,IAEA,UAAU;AACR,UAAI,KAAK,OAAQ,MAAK,MAAM;AAAA,IAC9B;AAAA,IAEA,OAAO;AAAE,aAAO;AAAA,IAAQ;AAAA,EAC1B;AAEA,MAAO,sBAAQ;;;ACjIf,EAAC,WAAmB,aAAa;","names":["endpoints","project_environment","endpoints","project_environment","endpoints","project_environment","data","data","data","data"]}
1
+ {"version":3,"sources":["../src/config/production.ts","../src/config/sandbox.ts","../src/config/development.ts","../src/config/local.defaults.ts","../src/utils/environment.ts","../src/config/index.ts","../src/utils/config.ts","../src/types/event.ts","../src/utils/auth.ts","../src/utils/user.ts","../src/utils/transaction.ts","../src/types/router.ts","../src/router/message.ts","../src/connect-sdk.ts","../src/global.ts"],"sourcesContent":["export const project_environment: string = 'production';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url':'https://verifyapp.withbenji.com',\n 'benji_connect_auth_service_url' : 'https://authservice.withbenji.com'\n}","export const project_environment: string = 'sandbox';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url':'https://verifyapp-staging.withbenji.com',\n 'benji_connect_auth_service_url' : 'https://authservice-staging.withbenji.com'\n}","export const project_environment: string = 'development';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url': 'https://verifyapp-dev.withbenji.com',\n 'benji_connect_auth_service_url': 'https://authservice-dev.withbenji.com',\n};","/**\n * Build-time fallback when gitignored `local.ts` is absent (CI, fresh clones).\n * Same endpoints as development — not machine-specific localhost overrides.\n * Copy to `local.ts` locally for localhost URLs; see RELEASE.md.\n */\nexport const project_environment: string = 'local';\n\nexport const endpoints: Record<string, string> = {\n benji_connect_auth_url: 'https://verifyapp-dev.withbenji.com',\n benji_connect_auth_service_url: 'https://authservice-dev.withbenji.com',\n};\n","/** Hostnames that browsers use for loopback when typed literally in the URL bar. */\nexport const LOCAL_HOSTNAMES = ['localhost', '127.0.0.1', '::1', '[::1]'] as const;\n\nconst LOCAL_HOSTNAME_SET: ReadonlySet<string> = new Set(LOCAL_HOSTNAMES);\n\nexport function isLocalHost(\n hostname: string = typeof window !== 'undefined' ? window.location.hostname : ''\n): boolean {\n if (LOCAL_HOSTNAME_SET.has(hostname)) {\n return true;\n }\n // IPv4 loopback block 127.0.0.0/8 — covers 127.0.0.1 without listing every address\n if (hostname.startsWith('127.')) {\n return true;\n }\n return false;\n}\n","import * as productionConfig from './production';\nimport * as sandboxConfig from './sandbox';\nimport * as developmentConfig from './development';\nimport * as localConfig from './local';\nimport { BenjiConnectEnvironment } from '../types/config';\nimport { isLocalHost } from '../utils/environment';\n\nexport type EnvironmentConfigModule = {\n project_environment: string;\n endpoints: Record<string, string>;\n};\n\nconst env = typeof process !== 'undefined' ? process.env : {};\nlet data: EnvironmentConfigModule = developmentConfig;\ntype EndpointConfig = typeof developmentConfig.endpoints;\nexport let Endpoints: EndpointConfig = getEndpoints();\nexport let Environment = BenjiConnectEnvironment.DEVELOPMENT;\n\nexport function configureConfig(environment: BenjiConnectEnvironment) {\n if (environment == 'production') {\n console.log('[Connect SDK] configuring with environment production');\n data = productionConfig;\n } else if (environment == 'sandbox') {\n console.log('[Connect SDK] configuring with environment sandbox');\n data = sandboxConfig;\n } else if (environment == 'development') {\n console.log('[Connect SDK] configuring with environment development');\n data = developmentConfig;\n } else if (environment == 'local') {\n if (isLocalHost()) {\n console.log('[Connect SDK] configuring with environment local');\n data = localConfig;\n } else {\n console.log(\n '[Connect SDK] local environment requested on non-local host; using development'\n );\n data = developmentConfig;\n }\n }\n Endpoints = getEndpoints();\n Environment = getEnvironment();\n}\n\nfunction getEndpoints(): EndpointConfig {\n const entries = Object.entries(data.endpoints).map(([key, value]) => {\n const override = env?.[key] || value;\n return [key, override] as const;\n });\n return Object.fromEntries(entries) as EndpointConfig;\n}\n\nfunction getEnvironment(): BenjiConnectEnvironment {\n return data['project_environment'] as BenjiConnectEnvironment;\n}\n\nexport const Namespace = __NAMESPACE__;\nexport const Version = __VERSION__;\n","import { BenjiConnectEnvironment } from \"../types/config\";\nimport { isLocalHost } from \"./environment\";\n\nexport const buildContext = () => ({\n namespace: typeof __NAMESPACE__ !== 'undefined' && __NAMESPACE__ ? __NAMESPACE__ : 'benji-connect-sdk',\n version: typeof __VERSION__ !== 'undefined' && __VERSION__ ? String(__VERSION__) : '0.0.0',\n});\n\nexport function isBenjiConnectEnvironment(\n environment: unknown\n): environment is BenjiConnectEnvironment {\n return (\n environment === BenjiConnectEnvironment.LOCAL ||\n environment === BenjiConnectEnvironment.DEVELOPMENT ||\n environment === BenjiConnectEnvironment.SANDBOX ||\n environment === BenjiConnectEnvironment.PRODUCTION\n );\n}\n\nexport function mapToConnectEnvironment(\n environment: BenjiConnectEnvironment | string\n): BenjiConnectEnvironment {\n\n if (isBenjiConnectEnvironment(environment)) return environment;\n\n const environments: Record<string, BenjiConnectEnvironment> = {\n local: BenjiConnectEnvironment.LOCAL,\n development: BenjiConnectEnvironment.DEVELOPMENT,\n sandbox: BenjiConnectEnvironment.SANDBOX,\n production: BenjiConnectEnvironment.PRODUCTION,\n };\n const mapped = environments[environment];\n if (mapped) return mapped;\n\n const defaultEnvironment = isLocalHost()\n ? BenjiConnectEnvironment.LOCAL\n : BenjiConnectEnvironment.DEVELOPMENT;\n console.warn(`[Benji Connect SDK] ${environment} not valid environment defaulting to ${defaultEnvironment}`);\n\n return defaultEnvironment;\n}","import { BenjiConnectAuthAction } from \"./auth\";\n\n// Known event names coming from the SDK transport (postMessage)\nexport enum BenjiConnectEventType {\n AUTH_SUCCESS = 'AUTH_SUCCESS',\n FLOW_EXIT = 'FLOW_EXIT',\n FLOW_SUCCESS = 'FLOW_SUCCESS',\n EVENT = 'EVENT',\n ERROR = 'ERROR',\n}\n\n// Known exit trigger types coming from the SDK transport (postMessage)\nexport enum BenjiConnectExitTrigger {\n ACTION_BUTTON_CLICKED = 'ACTION_BUTTON_CLICKED',\n BACK_TO_MERCHANT_CLICKED = 'BACK_TO_MERCHANT_CLICKED', // deprecated\n CLOSE_BUTTON_CLICKED = 'CLOSE_BUTTON_CLICKED',\n TAPPED_OUT_OF_BOUNDS = 'TAPPED_OUT_OF_BOUNDS'\n}\n\nexport enum BenjiConnectErrorName {\n UNEXPECTED_ERROR = 'unexpected_error',\n PARTNER_CONNECT_ERROR = 'partner_connect_error'\n}\n\nexport type BenjiConnectErrorID = '400' | '500'; // Placeholders for now\n\n// Transport-layer token (raw, unprocessed from postMessage)\nexport interface BenjiConnectEventToken {\n access_token?: string;\n refresh_token?: string;\n expires_at?: string | number;\n exchange_token?: string;\n}\n\nexport interface BenjiConnectEventUserData {\n user: {\n id: number\n first_name: string\n last_name: string\n uuid?: string\n }\n status: BenjiConnectEventUserStatusData\n extra_data?: {\n total_rewards_earned?: number\n total_rewards_redeemed?: number\n created_date?: string\n }\n}\n\nexport interface BenjiConnectEventTransactionData {\n action: string;\n amount: number;\n trigger_event_id: string;\n trigger_name: string;\n}\n\nexport interface BenjiConnectEventUserStatusData {\n status_id: string\n num_of_rewards: number\n reward_status: string\n partner_status_tier_id?: number\n}\n\n// Basic structure for Benji Connect SDK typed events\nexport interface BenjiConnectEvent {\n type: BenjiConnectEventType;\n data?: BenjiConnectEventData;\n}\n\nexport interface BenjiConnectEventData {\n [k: string]: unknown;\n}\n\nexport interface BenjiConnectEventMessage<K extends BenjiConnectEventType = BenjiConnectEventType> {\n type: K; // discriminant\n data: BenjiConnectEventDataMap[K];\n}\n\nexport interface BenjiConnectAuthSuccessEventData {\n action: BenjiConnectAuthAction;\n metadata?: BenjiConnectEventUserData;\n token?: BenjiConnectEventToken,\n transaction?: BenjiConnectEventTransactionData;\n}\n\nexport interface BenjiConnectFlowExitEventData {\n step: string;\n trigger: BenjiConnectExitTrigger;\n}\n\nexport interface BenjiConnectErrorEventData {\n error: Error;\n}\n\n// Canonical event map \nexport type BenjiConnectEventDataMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: BenjiConnectAuthSuccessEventData;\n [BenjiConnectEventType.FLOW_EXIT]: BenjiConnectFlowExitEventData;\n [BenjiConnectEventType.FLOW_SUCCESS]: BenjiConnectAuthSuccessEventData;\n [BenjiConnectEventType.EVENT]: BenjiConnectEventData;\n [BenjiConnectEventType.ERROR]: BenjiConnectErrorEventData;\n\n // Optional catch-all fan-out\n '*': { type: BenjiConnectEventType; data: BenjiConnectEventDataMap[BenjiConnectEventType] };\n};","import { BenjiConnectAuthToken } from '../types/auth';\nimport { BenjiConnectEventToken, BenjiConnectEventType } from '../types/event';\n\nconst CONNECT_MESSAGE_TYPES = new Set<string>(Object.values(BenjiConnectEventType));\n\nexport function isConnectMessageType(data: unknown): boolean {\n if (!data || typeof data !== 'object') return false;\n const type = (data as { type?: string }).type;\n return typeof type === 'string' && CONNECT_MESSAGE_TYPES.has(type);\n}\n\nexport const extractAccessToken = (token?: BenjiConnectEventToken | string): string =>\n typeof token === 'string' ? token : (token?.access_token ?? '');\n\nexport const extractExchangeToken = (token?: BenjiConnectEventToken | string): string =>\n typeof token === 'string' ? token : (token?.exchange_token ?? '');\n\nexport const mapEventToConnectToken = (data?: BenjiConnectEventToken): BenjiConnectAuthToken => ({\n access_token: data?.access_token ?? '',\n refresh_token: data?.refresh_token ?? '',\n expires_at: data?.expires_at ?? ''\n});\n","import { BenjiConnectEventUserData } from \"../types/event\";\nimport { BenjiConnectUserData } from \"../types/user\";\n\nexport function isConnectUserData (\n input: BenjiConnectUserData | Record<string, any>\n): boolean {\n if (!input) return false;\n const data = mapEventToConnectUserData(input);\n if (data.user.id != 0) return true;\n return false;\n}\n\nexport const mapEventToConnectUserData = (\n data?: BenjiConnectEventUserData | Record<string, any>\n): BenjiConnectUserData => ({\n user: {\n id: data?.user?.id ?? 0,\n first_name: data?.user?.first_name ?? '',\n last_name: data?.user?.last_name ?? '',\n uuid: data?.user?.uuid \n },\n status: {\n status_id: data?.status?.status_id ?? '',\n num_of_rewards: data?.status?.num_of_rewards ?? 0,\n reward_status: data?.status?.reward_status ?? '',\n partner_status_tier_id: data?.status?.partner_status_tier_id\n },\n extra_data: {\n total_rewards_earned: data?.extra_data?.total_rewards_earned,\n total_rewards_redeemed: data?.extra_data?.total_rewards_redeemed,\n created_date: data?.extra_data?.created_date\n }\n});\n","import { BenjiConnectEventTransactionData } from \"../types/event\";\nimport { BenjiConnectTransactionData } from \"../types/transaction\";\n\nexport const mapEventToConnectTransactionData = (data?: BenjiConnectEventTransactionData): BenjiConnectTransactionData | null => {\n if (!data) return null;\n return {\n action: data.action,\n amount: data.amount,\n trigger_event_id: data.trigger_event_id,\n trigger_name: data.trigger_name\n };\n}","import { \n BenjiConnectMetadata, \n BenjiConnectOnErrorData, \n BenjiConnectOnEventData, \n BenjiConnectOnExitData, \n BenjiConnectOnExitMetadata, \n BenjiConnectOnSuccessData, \n BenjiConnectOnSuccessMetadata \n} from './config';\n\nimport { \n extractAccessToken,\n extractExchangeToken,\n mapEventToConnectToken \n} from '../utils/auth';\n\nimport { BenjiConnectAuthAction } from './auth';\n\nimport { buildContext } from '../utils/config';\nimport { mapEventToConnectUserData } from '../utils/user';\n\nimport { \n BenjiConnectAuthSuccessEventData,\n BenjiConnectErrorEventData, \n BenjiConnectEventDataMap, \n BenjiConnectEventMessage, \n BenjiConnectEventType, \n BenjiConnectFlowExitEventData\n} from './event';\nimport { mapEventToConnectTransactionData } from '../utils/transaction';\n\nexport type MessageRouterConfig = {\n onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n close?: () => void;\n};\n\nexport const mapToAuthSuccessData = (\n message: BenjiConnectEventMessage<BenjiConnectEventType.AUTH_SUCCESS>,\n data: BenjiConnectAuthSuccessEventData\n): BenjiConnectOnEventData => {\n return {\n type: message.type,\n metadata: {\n context: buildContext(),\n action: data.action,\n token: mapEventToConnectToken(data.token),\n transactionData: mapEventToConnectTransactionData(data.transaction),\n userData: mapEventToConnectUserData(data.metadata)\n }\n };\n};\n\nexport const mapToOnExitData = (data: BenjiConnectFlowExitEventData): BenjiConnectOnExitData => {\n return {\n metadata: {\n context: buildContext(),\n step: data.step,\n trigger: data.trigger\n }\n };\n};\n\nexport const mapToOnSuccessData = (data: BenjiConnectAuthSuccessEventData): BenjiConnectOnSuccessData => {\n \n const token = data.action === BenjiConnectAuthAction.Login\n ? extractExchangeToken(data.token)\n : extractAccessToken(data.token);\n\n let metadata: BenjiConnectOnSuccessMetadata = {\n context: buildContext(),\n action: data.action,\n user_data: data.metadata\n };\n\n if (data.transaction) {\n metadata.transaction_data = data.transaction;\n }\n \n return { token, metadata };\n};\n\nexport const mapToOnErrorData = (data: BenjiConnectErrorEventData): BenjiConnectOnErrorData => {\n return {\n error: data.error,\n error_id: '500', // Placeholder\n metadata: {\n context: buildContext()\n }\n };\n};\n\nexport const mapToOnEventData = <K extends BenjiConnectEventType>(\n message: BenjiConnectEventMessage<K>,\n data: BenjiConnectEventDataMap[K]\n): BenjiConnectOnEventData => {\n return {\n type: message.type,\n metadata: {\n context: buildContext(),\n ...data\n }\n };\n};\n\nexport type BenjiConnectCallbackDataMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: BenjiConnectOnEventData;\n [BenjiConnectEventType.FLOW_EXIT]: BenjiConnectOnExitData;\n [BenjiConnectEventType.FLOW_SUCCESS]: BenjiConnectOnSuccessData;\n [BenjiConnectEventType.ERROR]: BenjiConnectOnErrorData;\n [BenjiConnectEventType.EVENT]: BenjiConnectOnEventData;\n '*': BenjiConnectOnEventData;\n};\n\nexport const BenjiConnectCallbackMapperMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: mapToAuthSuccessData,\n [BenjiConnectEventType.FLOW_EXIT]: mapToOnExitData,\n [BenjiConnectEventType.FLOW_SUCCESS]: mapToOnSuccessData,\n [BenjiConnectEventType.ERROR]: mapToOnErrorData,\n [BenjiConnectEventType.EVENT]: mapToOnEventData,\n} as const;\n\n","import { \n Endpoints\n} from '../config';\n\nimport { BenjiConnectMode } from '../types/config';\nimport {\n BenjiConnectEventType,\n type BenjiConnectEventMessage,\n} from '../types/event';\n\nimport type {\n BenjiConnectOnSuccessData,\n BenjiConnectOnExitData,\n BenjiConnectMetadata,\n BenjiConnectOnSuccessMetadata,\n BenjiConnectOnExitMetadata\n} from '../types/config';\n\nimport {\n BenjiConnectCallbackMapperMap,\n MessageRouterConfig,\n mapToOnEventData,\n} from '../types/router';\nimport { isConnectMessageType } from '../utils/auth';\n\nexport class MessageRouter {\n\n static configuredListeners = false;\n static onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n static onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n static onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n static onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n static close?: () => void;\n\n static mode: BenjiConnectMode = BenjiConnectMode.CONNECT;\n\n static configureMessageRouter(config: MessageRouterConfig) {\n this.onSuccess = config.onSuccess;\n this.onError = config.onError;\n this.onExit = config.onExit;\n this.onEvent = config.onEvent;\n this.close = config.close;\n }\n\n static setMode(mode: BenjiConnectMode) {\n this.mode = mode;\n }\n\n static errorEventHandler = (event: Event) => { \n return MessageRouter.handleErrorMessage(event) \n };\n\n static messageEventHandler = (event: MessageEvent<unknown>) => { \n return MessageRouter.handleMessage(event) \n };\n\n static addEventListeners() {\n if (this.configuredListeners) return;\n window.addEventListener('error', this.errorEventHandler);\n window.addEventListener('unhandledrejection', this.errorEventHandler);\n window.addEventListener('message', this.messageEventHandler);\n this.configuredListeners = true;\n }\n\n static removeEventListeners() {\n window.removeEventListener('error', this.errorEventHandler);\n window.removeEventListener('unhandledrejection', this.errorEventHandler);\n window.removeEventListener('message', this.messageEventHandler);\n this.configuredListeners = false;\n this.mode = BenjiConnectMode.CONNECT;\n }\n\n static handleErrorMessage(event: Event) { \n switch(event.type) {\n case 'error': {\n const errorEvent = event as ErrorEvent;\n const error = errorEvent.error || new Error(errorEvent.message);\n // TODO: Track error\n break;\n }\n case 'unhandledrejection': {\n const rejectionEvent = event as PromiseRejectionEvent;\n const reason = rejectionEvent.reason instanceof Error\n ? rejectionEvent.reason\n : new Error(String(rejectionEvent.reason));\n // TODO: Track error (reason)\n break;\n }\n default: {\n console.error('[Benji Connect SDK] Received Unknown error message', event);\n break;\n }\n }\n }\n\n static handleMessage(event: MessageEvent<unknown>) {\n if (!isConnectMessageType(event.data)) return;\n\n const expectedOrigin: string = new URL(Endpoints.benji_connect_auth_url).origin;\n if (!event || event.origin !== expectedOrigin) {\n console.warn('[Benji Connect SDK] Skipped message, received event from unexpected origin', event.origin, expectedOrigin);\n return;\n }\n\n const raw = event.data;\n if (!raw || typeof raw !== 'object') return;\n\n const partial = raw as Partial<BenjiConnectEventMessage>;\n if (typeof partial.type !== 'string') return;\n \n const message = partial as BenjiConnectEventMessage;\n\n try {\n switch (message.type) {\n\n case BenjiConnectEventType.AUTH_SUCCESS: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.AUTH_SUCCESS>;\n const callbackData = BenjiConnectCallbackMapperMap.AUTH_SUCCESS(connectMessage, connectMessage.data);\n this.onEvent?.(callbackData.type, callbackData.metadata); \n break;\n }\n\n case BenjiConnectEventType.FLOW_EXIT: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.FLOW_EXIT>;\n const callbackData = BenjiConnectCallbackMapperMap.FLOW_EXIT(connectMessage.data) as BenjiConnectOnExitData;\n this.onExit?.(callbackData.metadata);\n this.close?.();\n break;\n }\n\n case BenjiConnectEventType.FLOW_SUCCESS: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.FLOW_SUCCESS>;\n const callbackData = BenjiConnectCallbackMapperMap.FLOW_SUCCESS(connectMessage.data) as BenjiConnectOnSuccessData;\n this.onSuccess?.(callbackData.token, callbackData.metadata);\n if (this.mode === BenjiConnectMode.LOGIN) {\n this.close?.();\n }\n break;\n }\n\n case BenjiConnectEventType.ERROR: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.ERROR>;\n const callbackData = BenjiConnectCallbackMapperMap.ERROR(connectMessage.data);\n this.onError?.(callbackData.error, callbackData.error_id, callbackData.metadata);\n break;\n }\n\n case BenjiConnectEventType.EVENT: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.EVENT>;\n const callbackData = mapToOnEventData(connectMessage, connectMessage.data);\n this.onEvent?.(callbackData.type, callbackData.metadata);\n break;\n }\n\n }\n } finally {\n // TODO: Any cleanup logic \n }\n }\n\n}\n","/// <reference path=\"./global.d.ts\" />\n\nimport { \n configureConfig, \n Endpoints\n} from './config';\n\nimport { \n type BenjiConnectConfig, \n BenjiConnectEnvironment,\n BenjiConnectMode,\n} from './types/config';\n\nimport { \n buildContext, \n mapToConnectEnvironment \n} from './utils/config';\n\nimport { MessageRouter } from './router/message';\nimport { BenjiConnectExitTrigger } from './types/event';\n\nconst IFRAME_STYLE: CSSStyleDeclaration = {\n position: 'relative',\n width: '400px',\n height: '645px',\n border: 'none',\n borderRadius: '20px',\n overflow: 'hidden',\n} as CSSStyleDeclaration;\n\nclass ConnectSDK {\n\n private sdkConfig: BenjiConnectConfig;\n private iframe: HTMLIFrameElement | null = null;\n private container: HTMLDivElement | null = null;\n\n constructor(config: BenjiConnectConfig) {\n\n this.sdkConfig = config;\n\n // Validations\n if (!this.sdkConfig.environment) throw new Error('Environment is required');\n if (!this.sdkConfig.token) throw new Error('Connect token is required');\n\n // Set internal config for environment based on consumer input at runtime\n const environment: BenjiConnectEnvironment = mapToConnectEnvironment(this.sdkConfig.environment);\n this.sdkConfig.environment = environment;\n configureConfig(environment);\n }\n\n async initialize() {\n \n // Configure message router for all postMessage from connect modal and error messages\n MessageRouter.configureMessageRouter({\n onSuccess: this.sdkConfig.onSuccess,\n onError: this.sdkConfig.onError,\n onExit: this.sdkConfig.onExit,\n onEvent: this.sdkConfig.onEvent,\n close: () => this.close(),\n });\n\n // TODO: Tracker.configureWithOptions(sdkOptions);\n // TODO: Tracker.trackSDKInitialized();\n }\n\n async open() {\n await this.initialize();\n this.openUI();\n\n MessageRouter.setMode(this.sdkConfig.mode ?? BenjiConnectMode.CONNECT);\n\n MessageRouter.addEventListeners();\n // TODO: Track SDK Opened Tracker.trackSDKOpened();\n }\n\n openUI() {\n if (this.iframe) return;\n\n // container\n this.container = document.createElement('div');\n Object.assign(this.container.style, {\n position: 'fixed', \n top: '0', \n left: '0', \n width: '100%', \n height: '100%',\n backgroundColor: 'rgba(0,0,0,0.5)',\n zIndex: '9999', \n display: 'flex',\n alignItems: 'center', \n justifyContent: 'center', \n overflow: 'auto',\n } as CSSStyleDeclaration);\n\n // iframe\n console.debug('[Connect SDK] endpoints', Endpoints);\n console.log('[Connect SDK] opeining URL', Endpoints.benji_connect_auth_url);\n const url = new URL(Endpoints.benji_connect_auth_url);\n const connectToken = this.sdkConfig.token;\n url.searchParams.set('connect_token', connectToken);\n url.searchParams.set('t', String(Date.now()));\n if (this.sdkConfig.mode != null) {\n url.searchParams.set('mode', String(this.sdkConfig.mode));\n }\n\n this.iframe = document.createElement('iframe');\n Object.assign(this.iframe.style, IFRAME_STYLE);\n this.iframe.src = url.toString();\n\n this.container.appendChild(this.iframe);\n document.body.appendChild(this.container);\n\n this.container.addEventListener('click', (e) => {\n if (e.target === this.container) {\n // Trigger exit when user taps outside modal bounds\n this.sdkConfig.onExit?.({\n context: buildContext(),\n trigger: BenjiConnectExitTrigger.TAPPED_OUT_OF_BOUNDS\n });\n this.close();\n }\n });\n }\n\n close() {\n if (!this.iframe) return;\n\n if (this.container?.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n MessageRouter.removeEventListeners();\n // TODO: Track SDK Closed Tracker.trackSDKClosed();\n this.iframe = null;\n this.container = null;\n }\n\n cleanup() {\n if (this.iframe) this.close();\n }\n\n ping() { return 'pong'; }\n}\n\nexport default ConnectSDK;\n","/// <reference path=\"./global.d.ts\" />\nimport ConnectSDK from './connect-sdk';\n(globalThis as any).ConnectSDK = ConnectSDK;"],"mappings":"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","names":["endpoints","project_environment","endpoints","project_environment","endpoints","project_environment","BenjiConnectEventType","data","data","data","data"]}
package/dist/index.cjs CHANGED
@@ -20,6 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
+ BenjiConnectAuthAction: () => BenjiConnectAuthAction,
23
24
  BenjiConnectEnvironment: () => BenjiConnectEnvironment,
24
25
  BenjiConnectErrorName: () => BenjiConnectErrorName,
25
26
  BenjiConnectEventType: () => BenjiConnectEventType,
@@ -79,17 +80,18 @@ var endpoints4 = {
79
80
  };
80
81
 
81
82
  // src/types/config.ts
82
- var BenjiConnectEnvironment = /* @__PURE__ */ ((BenjiConnectEnvironment2) => {
83
- BenjiConnectEnvironment2["LOCAL"] = "local";
84
- BenjiConnectEnvironment2["DEVELOPMENT"] = "development";
85
- BenjiConnectEnvironment2["SANDBOX"] = "sandbox";
86
- BenjiConnectEnvironment2["PRODUCTION"] = "production";
87
- return BenjiConnectEnvironment2;
83
+ var BenjiConnectEnvironment = /* @__PURE__ */ ((BenjiConnectEnvironment3) => {
84
+ BenjiConnectEnvironment3["LOCAL"] = "local";
85
+ BenjiConnectEnvironment3["DEVELOPMENT"] = "development";
86
+ BenjiConnectEnvironment3["SANDBOX"] = "sandbox";
87
+ BenjiConnectEnvironment3["PRODUCTION"] = "production";
88
+ return BenjiConnectEnvironment3;
88
89
  })(BenjiConnectEnvironment || {});
89
90
  var BenjiConnectMode = /* @__PURE__ */ ((BenjiConnectMode2) => {
90
91
  BenjiConnectMode2[BenjiConnectMode2["CONNECT"] = 1] = "CONNECT";
91
92
  BenjiConnectMode2[BenjiConnectMode2["TRANSFER"] = 3] = "TRANSFER";
92
93
  BenjiConnectMode2[BenjiConnectMode2["REDEEM"] = 4] = "REDEEM";
94
+ BenjiConnectMode2[BenjiConnectMode2["LOGIN"] = 5] = "LOGIN";
93
95
  return BenjiConnectMode2;
94
96
  })(BenjiConnectMode || {});
95
97
 
@@ -149,7 +151,7 @@ function getEnvironment() {
149
151
  // src/utils/config.ts
150
152
  var buildContext = () => ({
151
153
  namespace: "benji-connect-sdk" ? "benji-connect-sdk" : "benji-connect-sdk",
152
- version: "1.0.10" ? String("1.0.10") : "0.0.0"
154
+ version: "1.1.0-beta.1" ? String("1.1.0-beta.1") : "0.0.0"
153
155
  });
154
156
  function isBenjiConnectEnvironment(environment) {
155
157
  return environment === "local" /* LOCAL */ || environment === "development" /* DEVELOPMENT */ || environment === "sandbox" /* SANDBOX */ || environment === "production" /* PRODUCTION */;
@@ -192,10 +194,20 @@ var BenjiConnectErrorName = /* @__PURE__ */ ((BenjiConnectErrorName2) => {
192
194
  })(BenjiConnectErrorName || {});
193
195
 
194
196
  // src/utils/auth.ts
197
+ var CONNECT_MESSAGE_TYPES = new Set(Object.values(BenjiConnectEventType));
198
+ function isConnectMessageType(data2) {
199
+ if (!data2 || typeof data2 !== "object") return false;
200
+ const type = data2.type;
201
+ return typeof type === "string" && CONNECT_MESSAGE_TYPES.has(type);
202
+ }
195
203
  var extractAccessToken = (token) => {
196
204
  var _a;
197
205
  return typeof token === "string" ? token : (_a = token == null ? void 0 : token.access_token) != null ? _a : "";
198
206
  };
207
+ var extractExchangeToken = (token) => {
208
+ var _a;
209
+ return typeof token === "string" ? token : (_a = token == null ? void 0 : token.exchange_token) != null ? _a : "";
210
+ };
199
211
  var mapEventToConnectToken = (data2) => {
200
212
  var _a, _b, _c;
201
213
  return {
@@ -205,6 +217,15 @@ var mapEventToConnectToken = (data2) => {
205
217
  };
206
218
  };
207
219
 
220
+ // src/types/auth.ts
221
+ var BenjiConnectAuthAction = /* @__PURE__ */ ((BenjiConnectAuthAction2) => {
222
+ BenjiConnectAuthAction2["Connect"] = "connect";
223
+ BenjiConnectAuthAction2["Transfer"] = "transfer";
224
+ BenjiConnectAuthAction2["Redeem"] = "redeem";
225
+ BenjiConnectAuthAction2["Login"] = "login";
226
+ return BenjiConnectAuthAction2;
227
+ })(BenjiConnectAuthAction || {});
228
+
208
229
  // src/utils/user.ts
209
230
  var mapEventToConnectUserData = (data2) => {
210
231
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
@@ -263,7 +284,7 @@ var mapToOnExitData = (data2) => {
263
284
  };
264
285
  };
265
286
  var mapToOnSuccessData = (data2) => {
266
- const token = extractAccessToken(data2.token);
287
+ const token = data2.action === "login" /* Login */ ? extractExchangeToken(data2.token) : extractAccessToken(data2.token);
267
288
  let metadata = {
268
289
  context: buildContext(),
269
290
  action: data2.action,
@@ -310,6 +331,9 @@ var _MessageRouter = class _MessageRouter {
310
331
  this.onEvent = config.onEvent;
311
332
  this.close = config.close;
312
333
  }
334
+ static setMode(mode) {
335
+ this.mode = mode;
336
+ }
313
337
  static addEventListeners() {
314
338
  if (this.configuredListeners) return;
315
339
  window.addEventListener("error", this.errorEventHandler);
@@ -322,6 +346,7 @@ var _MessageRouter = class _MessageRouter {
322
346
  window.removeEventListener("unhandledrejection", this.errorEventHandler);
323
347
  window.removeEventListener("message", this.messageEventHandler);
324
348
  this.configuredListeners = false;
349
+ this.mode = 1 /* CONNECT */;
325
350
  }
326
351
  static handleErrorMessage(event) {
327
352
  switch (event.type) {
@@ -342,8 +367,8 @@ var _MessageRouter = class _MessageRouter {
342
367
  }
343
368
  }
344
369
  static handleMessage(event) {
345
- var _a, _b, _c, _d, _e, _f;
346
- console.debug("[Benji Connect SDK] Received message", event);
370
+ var _a, _b, _c, _d, _e, _f, _g;
371
+ if (!isConnectMessageType(event.data)) return;
347
372
  const expectedOrigin = new URL(Endpoints.benji_connect_auth_url).origin;
348
373
  if (!event || event.origin !== expectedOrigin) {
349
374
  console.warn("[Benji Connect SDK] Skipped message, received event from unexpected origin", event.origin, expectedOrigin);
@@ -373,18 +398,21 @@ var _MessageRouter = class _MessageRouter {
373
398
  const connectMessage = message;
374
399
  const callbackData = BenjiConnectCallbackMapperMap.FLOW_SUCCESS(connectMessage.data);
375
400
  (_d = this.onSuccess) == null ? void 0 : _d.call(this, callbackData.token, callbackData.metadata);
401
+ if (this.mode === 5 /* LOGIN */) {
402
+ (_e = this.close) == null ? void 0 : _e.call(this);
403
+ }
376
404
  break;
377
405
  }
378
406
  case "ERROR" /* ERROR */: {
379
407
  const connectMessage = message;
380
408
  const callbackData = BenjiConnectCallbackMapperMap.ERROR(connectMessage.data);
381
- (_e = this.onError) == null ? void 0 : _e.call(this, callbackData.error, callbackData.error_id, callbackData.metadata);
409
+ (_f = this.onError) == null ? void 0 : _f.call(this, callbackData.error, callbackData.error_id, callbackData.metadata);
382
410
  break;
383
411
  }
384
- default: {
385
- const m = message;
386
- const callbackData = mapToOnEventData(m, m.data);
387
- (_f = this.onEvent) == null ? void 0 : _f.call(this, callbackData.type, callbackData.metadata);
412
+ case "EVENT" /* EVENT */: {
413
+ const connectMessage = message;
414
+ const callbackData = mapToOnEventData(connectMessage, connectMessage.data);
415
+ (_g = this.onEvent) == null ? void 0 : _g.call(this, callbackData.type, callbackData.metadata);
388
416
  break;
389
417
  }
390
418
  }
@@ -393,6 +421,7 @@ var _MessageRouter = class _MessageRouter {
393
421
  }
394
422
  };
395
423
  _MessageRouter.configuredListeners = false;
424
+ _MessageRouter.mode = 1 /* CONNECT */;
396
425
  _MessageRouter.errorEventHandler = (event) => {
397
426
  return _MessageRouter.handleErrorMessage(event);
398
427
  };
@@ -402,6 +431,14 @@ _MessageRouter.messageEventHandler = (event) => {
402
431
  var MessageRouter = _MessageRouter;
403
432
 
404
433
  // src/connect-sdk.ts
434
+ var IFRAME_STYLE = {
435
+ position: "relative",
436
+ width: "400px",
437
+ height: "645px",
438
+ border: "none",
439
+ borderRadius: "20px",
440
+ overflow: "hidden"
441
+ };
405
442
  var ConnectSDK = class {
406
443
  constructor(config) {
407
444
  this.iframe = null;
@@ -423,8 +460,10 @@ var ConnectSDK = class {
423
460
  });
424
461
  }
425
462
  async open() {
463
+ var _a;
426
464
  await this.initialize();
427
465
  this.openUI();
466
+ MessageRouter.setMode((_a = this.sdkConfig.mode) != null ? _a : 1 /* CONNECT */);
428
467
  MessageRouter.addEventListeners();
429
468
  }
430
469
  openUI() {
@@ -449,15 +488,11 @@ var ConnectSDK = class {
449
488
  const connectToken = this.sdkConfig.token;
450
489
  url.searchParams.set("connect_token", connectToken);
451
490
  url.searchParams.set("t", String(Date.now()));
491
+ if (this.sdkConfig.mode != null) {
492
+ url.searchParams.set("mode", String(this.sdkConfig.mode));
493
+ }
452
494
  this.iframe = document.createElement("iframe");
453
- Object.assign(this.iframe.style, {
454
- position: "relative",
455
- width: "400px",
456
- height: "645px",
457
- border: "none",
458
- borderRadius: "20px",
459
- overflow: "hidden"
460
- });
495
+ Object.assign(this.iframe.style, IFRAME_STYLE);
461
496
  this.iframe.src = url.toString();
462
497
  this.container.appendChild(this.iframe);
463
498
  document.body.appendChild(this.container);
@@ -473,8 +508,11 @@ var ConnectSDK = class {
473
508
  });
474
509
  }
475
510
  close() {
511
+ var _a;
476
512
  if (!this.iframe) return;
477
- document.body.removeChild(this.container);
513
+ if ((_a = this.container) == null ? void 0 : _a.parentNode) {
514
+ this.container.parentNode.removeChild(this.container);
515
+ }
478
516
  MessageRouter.removeEventListeners();
479
517
  this.iframe = null;
480
518
  this.container = null;
@@ -492,6 +530,7 @@ var connect_sdk_default = ConnectSDK;
492
530
  var src_default = connect_sdk_default;
493
531
  // Annotate the CommonJS export names for ESM import in node:
494
532
  0 && (module.exports = {
533
+ BenjiConnectAuthAction,
495
534
  BenjiConnectEnvironment,
496
535
  BenjiConnectErrorName,
497
536
  BenjiConnectEventType,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/config/production.ts","../src/config/sandbox.ts","../src/config/development.ts","../src/config/local.defaults.ts","../src/types/config.ts","../src/utils/environment.ts","../src/config/index.ts","../src/utils/config.ts","../src/types/event.ts","../src/utils/auth.ts","../src/utils/user.ts","../src/utils/transaction.ts","../src/types/router.ts","../src/router/message.ts","../src/connect-sdk.ts"],"sourcesContent":["// Import the default export from connect-sdk.ts\nimport ConnectSDK from './connect-sdk';\nimport { BenjiConnectEventType } from './types/event';\n\n// Re-export both default and a named export so consumers can do either:\n// import ConnectSDK from '...'\n// import { ConnectSDK } from '...'\n// Also provide a default export (optional but helpful for JS users)\nexport default ConnectSDK;\nexport { ConnectSDK };\n\n// Expose Public types\nexport * from './types/config';\nexport { \n BenjiConnectErrorID,\n BenjiConnectErrorName,\n BenjiConnectEventType,\n BenjiConnectExitTrigger,\n} from './types/event';","export const project_environment: string = 'production';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url':'https://verifyapp.withbenji.com',\n 'benji_connect_auth_service_url' : 'https://authservice.withbenji.com'\n}","export const project_environment: string = 'sandbox';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url':'https://verifyapp-staging.withbenji.com',\n 'benji_connect_auth_service_url' : 'https://authservice-staging.withbenji.com'\n}","export const project_environment: string = 'development';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url': 'https://verifyapp-dev.withbenji.com',\n 'benji_connect_auth_service_url': 'https://authservice-dev.withbenji.com',\n};","/**\n * Build-time fallback when gitignored `local.ts` is absent (CI, fresh clones).\n * Same endpoints as development — not machine-specific localhost overrides.\n * Copy to `local.ts` locally for localhost URLs; see RELEASE.md.\n */\nexport const project_environment: string = 'local';\n\nexport const endpoints: Record<string, string> = {\n benji_connect_auth_url: 'https://verifyapp-dev.withbenji.com',\n benji_connect_auth_service_url: 'https://authservice-dev.withbenji.com',\n};\n","import { BenjiConnectAuthAction } from './auth';\nimport { BenjiConnectEventType } from './event';\nimport { BenjiConnectTransactionData } from './transaction';\nimport { BenjiConnectUserData } from './user';\n\nexport enum BenjiConnectEnvironment {\n LOCAL = 'local',\n DEVELOPMENT = 'development',\n SANDBOX = 'sandbox',\n PRODUCTION = 'production',\n}\n\nexport enum BenjiConnectMode {\n CONNECT = 1,\n TRANSFER = 3,\n REDEEM = 4\n}\n\nexport interface BenjiConnectConfig {\n environment: BenjiConnectEnvironment | string;\n token: string;\n onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n}\n\nexport interface BenjiConnectContext {\n namespace?: string; // e.g., 'benji-connect-sdk'\n version?: string | number; // e.g., '1.0.0'\n}\n\n/*\n * SDK config callback structures below\n */\n\nexport interface BenjiConnectOnSuccessData {\n token: string;\n metadata: BenjiConnectOnSuccessMetadata;\n}\n\nexport interface BenjiConnectOnErrorData {\n error: Error;\n error_id: string;\n metadata: BenjiConnectMetadata;\n}\n\nexport interface BenjiConnectOnExitData {\n metadata: BenjiConnectOnExitMetadata;\n}\n\nexport interface BenjiConnectOnEventData {\n type: BenjiConnectEventType;\n metadata: BenjiConnectMetadata;\n}\n\nexport interface BenjiConnectMetadata {\n context: { \n namespace: string; \n version: string \n };\n [k: string]: unknown;\n}\n\nexport interface BenjiConnectOnSuccessMetadata extends BenjiConnectMetadata {\n action?: BenjiConnectAuthAction;\n transaction_data?: BenjiConnectTransactionData | null;\n user_data?: BenjiConnectUserData;\n}\n\nexport interface BenjiConnectOnExitMetadata extends BenjiConnectMetadata {\n trigger?: string;\n step?: string;\n}","/** Hostnames that browsers use for loopback when typed literally in the URL bar. */\nexport const LOCAL_HOSTNAMES = ['localhost', '127.0.0.1', '::1', '[::1]'] as const;\n\nconst LOCAL_HOSTNAME_SET: ReadonlySet<string> = new Set(LOCAL_HOSTNAMES);\n\nexport function isLocalHost(\n hostname: string = typeof window !== 'undefined' ? window.location.hostname : ''\n): boolean {\n if (LOCAL_HOSTNAME_SET.has(hostname)) {\n return true;\n }\n // IPv4 loopback block 127.0.0.0/8 — covers 127.0.0.1 without listing every address\n if (hostname.startsWith('127.')) {\n return true;\n }\n return false;\n}\n","import * as productionConfig from './production';\nimport * as sandboxConfig from './sandbox';\nimport * as developmentConfig from './development';\nimport * as localConfig from './local';\nimport { BenjiConnectEnvironment } from '../types/config';\nimport { isLocalHost } from '../utils/environment';\n\nexport type EnvironmentConfigModule = {\n project_environment: string;\n endpoints: Record<string, string>;\n};\n\nconst env = typeof process !== 'undefined' ? process.env : {};\nlet data: EnvironmentConfigModule = developmentConfig;\ntype EndpointConfig = typeof developmentConfig.endpoints;\nexport let Endpoints: EndpointConfig = getEndpoints();\nexport let Environment = BenjiConnectEnvironment.DEVELOPMENT;\n\nexport function configureConfig(environment: BenjiConnectEnvironment) {\n if (environment == 'production') {\n console.log('[Connect SDK] configuring with environment production');\n data = productionConfig;\n } else if (environment == 'sandbox') {\n console.log('[Connect SDK] configuring with environment sandbox');\n data = sandboxConfig;\n } else if (environment == 'development') {\n console.log('[Connect SDK] configuring with environment development');\n data = developmentConfig;\n } else if (environment == 'local') {\n if (isLocalHost()) {\n console.log('[Connect SDK] configuring with environment local');\n data = localConfig;\n } else {\n console.log(\n '[Connect SDK] local environment requested on non-local host; using development'\n );\n data = developmentConfig;\n }\n }\n Endpoints = getEndpoints();\n Environment = getEnvironment();\n}\n\nfunction getEndpoints(): EndpointConfig {\n const entries = Object.entries(data.endpoints).map(([key, value]) => {\n const override = env?.[key] || value;\n return [key, override] as const;\n });\n return Object.fromEntries(entries) as EndpointConfig;\n}\n\nfunction getEnvironment(): BenjiConnectEnvironment {\n return data['project_environment'] as BenjiConnectEnvironment;\n}\n\nexport const Namespace = __NAMESPACE__;\nexport const Version = __VERSION__;\n","import { BenjiConnectEnvironment } from \"../types/config\";\nimport { isLocalHost } from \"./environment\";\n\nexport const buildContext = () => ({\n namespace: typeof __NAMESPACE__ !== 'undefined' && __NAMESPACE__ ? __NAMESPACE__ : 'benji-connect-sdk',\n version: typeof __VERSION__ !== 'undefined' && __VERSION__ ? String(__VERSION__) : '0.0.0',\n});\n\nexport function isBenjiConnectEnvironment(\n environment: unknown\n): environment is BenjiConnectEnvironment {\n return (\n environment === BenjiConnectEnvironment.LOCAL ||\n environment === BenjiConnectEnvironment.DEVELOPMENT ||\n environment === BenjiConnectEnvironment.SANDBOX ||\n environment === BenjiConnectEnvironment.PRODUCTION\n );\n}\n\nexport function mapToConnectEnvironment(\n environment: BenjiConnectEnvironment | string\n): BenjiConnectEnvironment {\n\n if (isBenjiConnectEnvironment(environment)) return environment;\n\n const environments: Record<string, BenjiConnectEnvironment> = {\n local: BenjiConnectEnvironment.LOCAL,\n development: BenjiConnectEnvironment.DEVELOPMENT,\n sandbox: BenjiConnectEnvironment.SANDBOX,\n production: BenjiConnectEnvironment.PRODUCTION,\n };\n const mapped = environments[environment];\n if (mapped) return mapped;\n\n const defaultEnvironment = isLocalHost()\n ? BenjiConnectEnvironment.LOCAL\n : BenjiConnectEnvironment.DEVELOPMENT;\n console.warn(`[Benji Connect SDK] ${environment} not valid environment defaulting to ${defaultEnvironment}`);\n\n return defaultEnvironment;\n}","import { BenjiConnectAuthAction } from \"./auth\";\n\n// Known event names coming from the SDK transport (postMessage)\nexport enum BenjiConnectEventType {\n AUTH_SUCCESS = 'AUTH_SUCCESS',\n FLOW_EXIT = 'FLOW_EXIT',\n FLOW_SUCCESS = 'FLOW_SUCCESS',\n EVENT = 'EVENT',\n ERROR = 'ERROR',\n}\n\n// Known exit trigger types coming from the SDK transport (postMessage)\nexport enum BenjiConnectExitTrigger {\n ACTION_BUTTON_CLICKED = 'ACTION_BUTTON_CLICKED',\n BACK_TO_MERCHANT_CLICKED = 'BACK_TO_MERCHANT_CLICKED', // deprecated\n CLOSE_BUTTON_CLICKED = 'CLOSE_BUTTON_CLICKED',\n TAPPED_OUT_OF_BOUNDS = 'TAPPED_OUT_OF_BOUNDS'\n}\n\nexport enum BenjiConnectErrorName {\n UNEXPECTED_ERROR = 'unexpected_error',\n PARTNER_CONNECT_ERROR = 'partner_connect_error'\n}\n\nexport type BenjiConnectErrorID = '400' | '500'; // Placeholders for now\n\n// Transport-layer token (raw, unprocessed from postMessage)\nexport interface BenjiConnectEventToken {\n access_token: string;\n refresh_token: string;\n expires_at?: string | number;\n}\n\nexport interface BenjiConnectEventUserData {\n user: {\n id: number\n first_name: string\n last_name: string\n uuid?: string\n }\n status: BenjiConnectEventUserStatusData\n extra_data?: {\n total_rewards_earned?: number\n total_rewards_redeemed?: number\n created_date?: string\n }\n}\n\nexport interface BenjiConnectEventTransactionData {\n action: string;\n amount: number;\n trigger_event_id: string;\n trigger_name: string;\n}\n\nexport interface BenjiConnectEventUserStatusData {\n status_id: string\n num_of_rewards: number\n reward_status: string\n partner_status_tier_id?: number\n}\n\n// Basic structure for Benji Connect SDK typed events\nexport interface BenjiConnectEvent {\n type: BenjiConnectEventType;\n data?: BenjiConnectEventData;\n}\n\nexport interface BenjiConnectEventData {\n [k: string]: unknown;\n}\n\nexport interface BenjiConnectEventMessage<K extends BenjiConnectEventType = BenjiConnectEventType> {\n type: K; // discriminant\n data: BenjiConnectEventDataMap[K];\n}\n\nexport interface BenjiConnectAuthSuccessEventData {\n action: BenjiConnectAuthAction;\n metadata?: BenjiConnectEventUserData;\n token?: BenjiConnectEventToken,\n transaction?: BenjiConnectEventTransactionData;\n}\n\nexport interface BenjiConnectFlowExitEventData {\n step: string;\n trigger: BenjiConnectExitTrigger;\n}\n\nexport interface BenjiConnectErrorEventData {\n error: Error;\n}\n\n// Canonical event map \nexport type BenjiConnectEventDataMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: BenjiConnectAuthSuccessEventData;\n [BenjiConnectEventType.FLOW_EXIT]: BenjiConnectFlowExitEventData;\n [BenjiConnectEventType.FLOW_SUCCESS]: BenjiConnectAuthSuccessEventData;\n [BenjiConnectEventType.EVENT]: BenjiConnectEventData;\n [BenjiConnectEventType.ERROR]: BenjiConnectErrorEventData;\n\n // Optional catch-all fan-out\n '*': { type: BenjiConnectEventType; data: BenjiConnectEventDataMap[BenjiConnectEventType] };\n};","import { BenjiConnectAuthToken } from \"../types/auth\";\nimport { BenjiConnectEventToken } from \"../types/event\";\n\nexport const extractAccessToken = (token?: BenjiConnectEventToken | string): string =>\n typeof token === 'string' ? token : (token?.access_token ?? '');\n\nexport const mapEventToConnectToken = (data?: BenjiConnectEventToken): BenjiConnectAuthToken => ({\n access_token: data?.access_token ?? '',\n refresh_token: data?.refresh_token ?? '',\n expires_at: data?.expires_at ?? ''\n});","import { BenjiConnectEventUserData } from \"../types/event\";\nimport { BenjiConnectUserData } from \"../types/user\";\n\nexport function isConnectUserData (\n input: BenjiConnectUserData | Record<string, any>\n): boolean {\n if (!input) return false;\n const data = mapEventToConnectUserData(input);\n if (data.user.id != 0) return true;\n return false;\n}\n\nexport const mapEventToConnectUserData = (\n data?: BenjiConnectEventUserData | Record<string, any>\n): BenjiConnectUserData => ({\n user: {\n id: data?.user?.id ?? 0,\n first_name: data?.user?.first_name ?? '',\n last_name: data?.user?.last_name ?? '',\n uuid: data?.user?.uuid \n },\n status: {\n status_id: data?.status?.status_id ?? '',\n num_of_rewards: data?.status?.num_of_rewards ?? 0,\n reward_status: data?.status?.reward_status ?? '',\n partner_status_tier_id: data?.status?.partner_status_tier_id\n },\n extra_data: {\n total_rewards_earned: data?.extra_data?.total_rewards_earned,\n total_rewards_redeemed: data?.extra_data?.total_rewards_redeemed,\n created_date: data?.extra_data?.created_date\n }\n});\n","import { BenjiConnectEventTransactionData } from \"../types/event\";\nimport { BenjiConnectTransactionData } from \"../types/transaction\";\n\nexport const mapEventToConnectTransactionData = (data?: BenjiConnectEventTransactionData): BenjiConnectTransactionData | null => {\n if (!data) return null;\n return {\n action: data.action,\n amount: data.amount,\n trigger_event_id: data.trigger_event_id,\n trigger_name: data.trigger_name\n };\n}","import { \n BenjiConnectMetadata, \n BenjiConnectOnErrorData, \n BenjiConnectOnEventData, \n BenjiConnectOnExitData, \n BenjiConnectOnExitMetadata, \n BenjiConnectOnSuccessData, \n BenjiConnectOnSuccessMetadata \n} from './config';\n\nimport { \n extractAccessToken, \n mapEventToConnectToken \n} from '../utils/auth';\n\nimport { buildContext } from '../utils/config';\nimport { mapEventToConnectUserData } from '../utils/user';\n\nimport { \n BenjiConnectAuthSuccessEventData,\n BenjiConnectErrorEventData, \n BenjiConnectEventDataMap, \n BenjiConnectEventMessage, \n BenjiConnectEventType, \n BenjiConnectFlowExitEventData\n} from './event';\nimport { mapEventToConnectTransactionData } from '../utils/transaction';\n\nexport type MessageRouterConfig = {\n onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n close?: () => void;\n};\n\nexport const mapToAuthSuccessData = (\n message: BenjiConnectEventMessage<BenjiConnectEventType.AUTH_SUCCESS>,\n data: BenjiConnectAuthSuccessEventData\n): BenjiConnectOnEventData => {\n return {\n type: message.type,\n metadata: {\n context: buildContext(),\n action: data.action,\n token: mapEventToConnectToken(data.token),\n transactionData: mapEventToConnectTransactionData(data.transaction),\n userData: mapEventToConnectUserData(data.metadata)\n }\n };\n};\n\nexport const mapToOnExitData = (data: BenjiConnectFlowExitEventData): BenjiConnectOnExitData => {\n return {\n metadata: {\n context: buildContext(),\n step: data.step,\n trigger: data.trigger\n }\n };\n};\n\nexport const mapToOnSuccessData = (data: BenjiConnectAuthSuccessEventData): BenjiConnectOnSuccessData => {\n \n const token = extractAccessToken(data.token);\n\n let metadata: BenjiConnectOnSuccessMetadata = {\n context: buildContext(),\n action: data.action,\n user_data: data.metadata\n };\n\n if (data.transaction) {\n metadata.transaction_data = data.transaction;\n }\n \n return { token, metadata };\n};\n\nexport const mapToOnErrorData = (data: BenjiConnectErrorEventData): BenjiConnectOnErrorData => {\n return {\n error: data.error,\n error_id: '500', // Placeholder\n metadata: {\n context: buildContext()\n }\n };\n};\n\nexport const mapToOnEventData = <K extends BenjiConnectEventType>(\n message: BenjiConnectEventMessage<K>,\n data: BenjiConnectEventDataMap[K]\n): BenjiConnectOnEventData => {\n return {\n type: message.type,\n metadata: {\n context: buildContext(),\n ...data\n }\n };\n};\n\nexport type BenjiConnectCallbackDataMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: BenjiConnectOnEventData;\n [BenjiConnectEventType.FLOW_EXIT]: BenjiConnectOnExitData;\n [BenjiConnectEventType.FLOW_SUCCESS]: BenjiConnectOnSuccessData;\n [BenjiConnectEventType.ERROR]: BenjiConnectOnErrorData;\n [BenjiConnectEventType.EVENT]: BenjiConnectOnEventData;\n '*': BenjiConnectOnEventData;\n};\n\nexport const BenjiConnectCallbackMapperMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: mapToAuthSuccessData,\n [BenjiConnectEventType.FLOW_EXIT]: mapToOnExitData,\n [BenjiConnectEventType.FLOW_SUCCESS]: mapToOnSuccessData,\n [BenjiConnectEventType.ERROR]: mapToOnErrorData,\n [BenjiConnectEventType.EVENT]: mapToOnEventData,\n} as const;\n\n","import { \n Endpoints\n} from '../config';\n\nimport {\n BenjiConnectEventType,\n type BenjiConnectEventData,\n type BenjiConnectEventMessage\n} from '../types/event';\n\nimport type {\n BenjiConnectOnSuccessData,\n BenjiConnectOnExitData,\n BenjiConnectMetadata,\n BenjiConnectOnSuccessMetadata,\n BenjiConnectOnExitMetadata\n} from '../types/config';\n\nimport {\n BenjiConnectCallbackMapperMap,\n MessageRouterConfig,\n mapToOnEventData\n} from '../types/router';\n\nexport class MessageRouter {\n\n static configuredListeners = false;\n static onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n static onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n static onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n static onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n static close?: () => void;\n\n static configureMessageRouter(config: MessageRouterConfig) {\n this.onSuccess = config.onSuccess;\n this.onError = config.onError;\n this.onExit = config.onExit;\n this.onEvent = config.onEvent;\n this.close = config.close;\n }\n\n static errorEventHandler = (event: Event) => { \n return MessageRouter.handleErrorMessage(event) \n };\n\n static messageEventHandler = (event: MessageEvent<unknown>) => { \n return MessageRouter.handleMessage(event) \n };\n\n static addEventListeners() {\n if (this.configuredListeners) return;\n window.addEventListener('error', this.errorEventHandler);\n window.addEventListener('unhandledrejection', this.errorEventHandler);\n window.addEventListener('message', this.messageEventHandler);\n this.configuredListeners = true;\n\n // Test uncaught error handling\n // Promise.reject(new Error('[Benji Connect SDK] MessageRouter Test rejection'));\n // throw new Error('[Benji Connect SDK] MessageRouter Test error');\n }\n\n static removeEventListeners() {\n window.removeEventListener('error', this.errorEventHandler);\n window.removeEventListener('unhandledrejection', this.errorEventHandler);\n window.removeEventListener('message', this.messageEventHandler);\n this.configuredListeners = false;\n }\n\n static handleErrorMessage(event: Event) { \n switch(event.type) {\n case 'error': {\n const errorEvent = event as ErrorEvent;\n const error = errorEvent.error || new Error(errorEvent.message);\n // TODO: Track error\n break;\n }\n case 'unhandledrejection': {\n const rejectionEvent = event as PromiseRejectionEvent;\n const reason = rejectionEvent.reason instanceof Error\n ? rejectionEvent.reason\n : new Error(String(rejectionEvent.reason));\n // TODO: Track error (reason)\n break;\n }\n default: {\n console.error('[Benji Connect SDK] Received Unknown error message', event);\n break;\n }\n }\n }\n\n static handleMessage(event: MessageEvent<unknown>) {\n\n console.debug('[Benji Connect SDK] Received message', event);\n \n // Basic origin check\n const expectedOrigin: string = new URL(Endpoints.benji_connect_auth_url).origin;\n if (!event || event.origin !== expectedOrigin) {\n console.warn('[Benji Connect SDK] Skipped message, received event from unexpected origin', event.origin, expectedOrigin);\n return;\n }\n\n const raw = event.data;\n if (!raw || typeof raw !== 'object') return;\n\n const partial = raw as Partial<BenjiConnectEventMessage>;\n if (typeof partial.type !== 'string') return;\n \n const message = partial as BenjiConnectEventMessage;\n\n // TODO: Proper Constraint checks\n // if (Namespace && message.namespace && message.namespace !== Namespace) return;\n // if (Version != null && message.version != null && String(message.version) !== String(Version)) return;\n\n // TODO: Track message received either here or below but not both\n \n try {\n // Type events and route to callbacks\n switch (message.type) {\n\n case BenjiConnectEventType.AUTH_SUCCESS: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.AUTH_SUCCESS>;\n const callbackData = BenjiConnectCallbackMapperMap.AUTH_SUCCESS(connectMessage, connectMessage.data);\n // TODO: Track message received?\n this.onEvent?.(callbackData.type, callbackData.metadata); \n break;\n }\n\n case BenjiConnectEventType.FLOW_EXIT: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.FLOW_EXIT>;\n const callbackData = BenjiConnectCallbackMapperMap.FLOW_EXIT(connectMessage.data) as BenjiConnectOnExitData;\n // TODO: Track message received?\n this.onExit?.(callbackData.metadata);\n this.close?.();\n break;\n }\n\n case BenjiConnectEventType.FLOW_SUCCESS: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.FLOW_SUCCESS>;\n // TODO: Track message received?\n // Forward onSuccess when flow completes for connect, redeem and transfer \n const callbackData = BenjiConnectCallbackMapperMap.FLOW_SUCCESS(connectMessage.data) as BenjiConnectOnSuccessData;\n this.onSuccess?.(callbackData.token, callbackData.metadata); \n break;\n }\n\n case BenjiConnectEventType.ERROR: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.ERROR>;\n // TODO: Track message received?\n const callbackData = BenjiConnectCallbackMapperMap.ERROR(connectMessage.data);\n this.onError?.(callbackData.error, callbackData.error_id, callbackData.metadata);\n break;\n }\n\n default: {\n // Unknown event type (forward generically)\n const m = message as BenjiConnectEventMessage<any>;\n // TODO: Track message received?\n const callbackData = mapToOnEventData(m, m.data as BenjiConnectEventData);\n this.onEvent?.(callbackData.type, callbackData.metadata);\n break;\n }\n }\n } finally {\n // TODO: Any cleanup logic \n }\n }\n\n}","/// <reference path=\"./global.d.ts\" />\n\nimport { \n configureConfig, \n Endpoints\n} from './config';\n\nimport { \n type BenjiConnectConfig, \n BenjiConnectEnvironment\n} from './types/config';\n\nimport { \n buildContext, \n mapToConnectEnvironment \n} from './utils/config';\n\nimport { MessageRouter } from './router/message';\nimport { BenjiConnectExitTrigger } from './types/event';\n\nclass ConnectSDK {\n\n private sdkConfig: BenjiConnectConfig;\n private iframe: HTMLIFrameElement | null = null;\n private container: HTMLDivElement | null = null;\n\n constructor(config: BenjiConnectConfig) {\n\n this.sdkConfig = config;\n\n // Validations\n if (!this.sdkConfig.environment) throw new Error('Environment is required');\n if (!this.sdkConfig.token) throw new Error('Connect token is required');\n\n // Set internal config for environment based on consumer input at runtime\n const environment: BenjiConnectEnvironment = mapToConnectEnvironment(this.sdkConfig.environment);\n this.sdkConfig.environment = environment;\n configureConfig(environment);\n }\n\n async initialize() {\n \n // Configure message router for all postMessage from connect modal and error messages\n MessageRouter.configureMessageRouter({\n onSuccess: this.sdkConfig.onSuccess,\n onError: this.sdkConfig.onError,\n onExit: this.sdkConfig.onExit,\n onEvent: this.sdkConfig.onEvent,\n close: () => this.close()\n });\n\n // TODO: Tracker.configureWithOptions(sdkOptions);\n // TODO: Tracker.trackSDKInitialized();\n }\n\n async open() {\n await this.initialize();\n this.openUI();\n MessageRouter.addEventListeners();\n // TODO: Track SDK Opened Tracker.trackSDKOpened();\n }\n\n openUI() {\n if (this.iframe) return;\n\n // container\n this.container = document.createElement('div');\n Object.assign(this.container.style, {\n position: 'fixed', \n top: '0', \n left: '0', \n width: '100%', \n height: '100%',\n backgroundColor: 'rgba(0,0,0,0.5)', \n zIndex: '9999', \n display: 'flex',\n alignItems: 'center', \n justifyContent: 'center', \n overflow: 'auto'\n } as CSSStyleDeclaration);\n\n // iframe\n console.debug('[Connect SDK] endpoints', Endpoints);\n console.log('[Connect SDK] opeining URL', Endpoints.benji_connect_auth_url);\n const url = new URL(Endpoints.benji_connect_auth_url);\n const connectToken = this.sdkConfig.token;\n url.searchParams.set('connect_token', connectToken);\n url.searchParams.set('t', String(Date.now()));\n\n this.iframe = document.createElement('iframe');\n Object.assign(this.iframe.style, {\n position: 'relative', \n width: '400px', \n height: '645px',\n border: 'none', \n borderRadius: '20px', \n overflow: 'hidden'\n } as CSSStyleDeclaration);\n this.iframe.src = url.toString();\n\n this.container.appendChild(this.iframe);\n document.body.appendChild(this.container);\n\n this.container.addEventListener('click', (e) => {\n if (e.target === this.container) {\n // Trigger exit when user taps outside modal bounds\n this.sdkConfig.onExit?.({\n context: buildContext(),\n trigger: BenjiConnectExitTrigger.TAPPED_OUT_OF_BOUNDS\n });\n this.close();\n }\n });\n }\n\n close() {\n if (!this.iframe) return;\n document.body.removeChild(this.container!);\n MessageRouter.removeEventListeners();\n // TODO: Track SDK Closed Tracker.trackSDKClosed();\n this.iframe = null;\n this.container = null;\n }\n\n cleanup() {\n if (this.iframe) this.close();\n }\n\n ping() { return 'pong'; }\n}\n\nexport default ConnectSDK;"],"mappings":"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","names":["endpoints","project_environment","endpoints","project_environment","endpoints","project_environment","BenjiConnectEnvironment","BenjiConnectMode","BenjiConnectEventType","BenjiConnectExitTrigger","BenjiConnectErrorName","data","data","data","data"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/config/production.ts","../src/config/sandbox.ts","../src/config/development.ts","../src/config/local.defaults.ts","../src/types/config.ts","../src/utils/environment.ts","../src/config/index.ts","../src/utils/config.ts","../src/types/event.ts","../src/utils/auth.ts","../src/types/auth.ts","../src/utils/user.ts","../src/utils/transaction.ts","../src/types/router.ts","../src/router/message.ts","../src/connect-sdk.ts"],"sourcesContent":["// Import the default export from connect-sdk.ts\nimport ConnectSDK from './connect-sdk';\nimport { BenjiConnectEventType } from './types/event';\n\n// Re-export both default and a named export so consumers can do either:\n// import ConnectSDK from '...'\n// import { ConnectSDK } from '...'\n// Also provide a default export (optional but helpful for JS users)\nexport default ConnectSDK;\nexport { ConnectSDK };\n\n// Expose Public types\nexport * from './types/config';\nexport { BenjiConnectAuthAction } from './types/auth';\nexport { \n BenjiConnectErrorID,\n BenjiConnectErrorName,\n BenjiConnectEventType,\n BenjiConnectExitTrigger,\n} from './types/event';","export const project_environment: string = 'production';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url':'https://verifyapp.withbenji.com',\n 'benji_connect_auth_service_url' : 'https://authservice.withbenji.com'\n}","export const project_environment: string = 'sandbox';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url':'https://verifyapp-staging.withbenji.com',\n 'benji_connect_auth_service_url' : 'https://authservice-staging.withbenji.com'\n}","export const project_environment: string = 'development';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url': 'https://verifyapp-dev.withbenji.com',\n 'benji_connect_auth_service_url': 'https://authservice-dev.withbenji.com',\n};","/**\n * Build-time fallback when gitignored `local.ts` is absent (CI, fresh clones).\n * Same endpoints as development — not machine-specific localhost overrides.\n * Copy to `local.ts` locally for localhost URLs; see RELEASE.md.\n */\nexport const project_environment: string = 'local';\n\nexport const endpoints: Record<string, string> = {\n benji_connect_auth_url: 'https://verifyapp-dev.withbenji.com',\n benji_connect_auth_service_url: 'https://authservice-dev.withbenji.com',\n};\n","import { BenjiConnectAuthAction } from './auth';\nimport { BenjiConnectEventType } from './event';\nimport { BenjiConnectTransactionData } from './transaction';\nimport { BenjiConnectUserData } from './user';\n\nexport enum BenjiConnectEnvironment {\n LOCAL = 'local',\n DEVELOPMENT = 'development',\n SANDBOX = 'sandbox',\n PRODUCTION = 'production',\n}\n\nexport enum BenjiConnectMode {\n CONNECT = 1,\n TRANSFER = 3,\n REDEEM = 4,\n LOGIN = 5,\n}\n\nexport interface BenjiConnectConfig {\n environment: BenjiConnectEnvironment | string;\n token: string;\n mode?: BenjiConnectMode;\n onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n}\n\nexport interface BenjiConnectContext {\n namespace?: string; // e.g., 'benji-connect-sdk'\n version?: string | number; // e.g., '1.0.0'\n}\n\n/*\n * SDK config callback structures below\n */\n\nexport interface BenjiConnectOnSuccessData {\n token: string;\n metadata: BenjiConnectOnSuccessMetadata;\n}\n\nexport interface BenjiConnectOnErrorData {\n error: Error;\n error_id: string;\n metadata: BenjiConnectMetadata;\n}\n\nexport interface BenjiConnectOnExitData {\n metadata: BenjiConnectOnExitMetadata;\n}\n\nexport interface BenjiConnectOnEventData {\n type: BenjiConnectEventType;\n metadata: BenjiConnectMetadata;\n}\n\nexport interface BenjiConnectMetadata {\n context: { \n namespace: string; \n version: string \n };\n [k: string]: unknown;\n}\n\nexport interface BenjiConnectOnSuccessMetadata extends BenjiConnectMetadata {\n action?: BenjiConnectAuthAction;\n transaction_data?: BenjiConnectTransactionData | null;\n user_data?: BenjiConnectUserData;\n}\n\nexport interface BenjiConnectOnExitMetadata extends BenjiConnectMetadata {\n trigger?: string;\n step?: string;\n}","/** Hostnames that browsers use for loopback when typed literally in the URL bar. */\nexport const LOCAL_HOSTNAMES = ['localhost', '127.0.0.1', '::1', '[::1]'] as const;\n\nconst LOCAL_HOSTNAME_SET: ReadonlySet<string> = new Set(LOCAL_HOSTNAMES);\n\nexport function isLocalHost(\n hostname: string = typeof window !== 'undefined' ? window.location.hostname : ''\n): boolean {\n if (LOCAL_HOSTNAME_SET.has(hostname)) {\n return true;\n }\n // IPv4 loopback block 127.0.0.0/8 — covers 127.0.0.1 without listing every address\n if (hostname.startsWith('127.')) {\n return true;\n }\n return false;\n}\n","import * as productionConfig from './production';\nimport * as sandboxConfig from './sandbox';\nimport * as developmentConfig from './development';\nimport * as localConfig from './local';\nimport { BenjiConnectEnvironment } from '../types/config';\nimport { isLocalHost } from '../utils/environment';\n\nexport type EnvironmentConfigModule = {\n project_environment: string;\n endpoints: Record<string, string>;\n};\n\nconst env = typeof process !== 'undefined' ? process.env : {};\nlet data: EnvironmentConfigModule = developmentConfig;\ntype EndpointConfig = typeof developmentConfig.endpoints;\nexport let Endpoints: EndpointConfig = getEndpoints();\nexport let Environment = BenjiConnectEnvironment.DEVELOPMENT;\n\nexport function configureConfig(environment: BenjiConnectEnvironment) {\n if (environment == 'production') {\n console.log('[Connect SDK] configuring with environment production');\n data = productionConfig;\n } else if (environment == 'sandbox') {\n console.log('[Connect SDK] configuring with environment sandbox');\n data = sandboxConfig;\n } else if (environment == 'development') {\n console.log('[Connect SDK] configuring with environment development');\n data = developmentConfig;\n } else if (environment == 'local') {\n if (isLocalHost()) {\n console.log('[Connect SDK] configuring with environment local');\n data = localConfig;\n } else {\n console.log(\n '[Connect SDK] local environment requested on non-local host; using development'\n );\n data = developmentConfig;\n }\n }\n Endpoints = getEndpoints();\n Environment = getEnvironment();\n}\n\nfunction getEndpoints(): EndpointConfig {\n const entries = Object.entries(data.endpoints).map(([key, value]) => {\n const override = env?.[key] || value;\n return [key, override] as const;\n });\n return Object.fromEntries(entries) as EndpointConfig;\n}\n\nfunction getEnvironment(): BenjiConnectEnvironment {\n return data['project_environment'] as BenjiConnectEnvironment;\n}\n\nexport const Namespace = __NAMESPACE__;\nexport const Version = __VERSION__;\n","import { BenjiConnectEnvironment } from \"../types/config\";\nimport { isLocalHost } from \"./environment\";\n\nexport const buildContext = () => ({\n namespace: typeof __NAMESPACE__ !== 'undefined' && __NAMESPACE__ ? __NAMESPACE__ : 'benji-connect-sdk',\n version: typeof __VERSION__ !== 'undefined' && __VERSION__ ? String(__VERSION__) : '0.0.0',\n});\n\nexport function isBenjiConnectEnvironment(\n environment: unknown\n): environment is BenjiConnectEnvironment {\n return (\n environment === BenjiConnectEnvironment.LOCAL ||\n environment === BenjiConnectEnvironment.DEVELOPMENT ||\n environment === BenjiConnectEnvironment.SANDBOX ||\n environment === BenjiConnectEnvironment.PRODUCTION\n );\n}\n\nexport function mapToConnectEnvironment(\n environment: BenjiConnectEnvironment | string\n): BenjiConnectEnvironment {\n\n if (isBenjiConnectEnvironment(environment)) return environment;\n\n const environments: Record<string, BenjiConnectEnvironment> = {\n local: BenjiConnectEnvironment.LOCAL,\n development: BenjiConnectEnvironment.DEVELOPMENT,\n sandbox: BenjiConnectEnvironment.SANDBOX,\n production: BenjiConnectEnvironment.PRODUCTION,\n };\n const mapped = environments[environment];\n if (mapped) return mapped;\n\n const defaultEnvironment = isLocalHost()\n ? BenjiConnectEnvironment.LOCAL\n : BenjiConnectEnvironment.DEVELOPMENT;\n console.warn(`[Benji Connect SDK] ${environment} not valid environment defaulting to ${defaultEnvironment}`);\n\n return defaultEnvironment;\n}","import { BenjiConnectAuthAction } from \"./auth\";\n\n// Known event names coming from the SDK transport (postMessage)\nexport enum BenjiConnectEventType {\n AUTH_SUCCESS = 'AUTH_SUCCESS',\n FLOW_EXIT = 'FLOW_EXIT',\n FLOW_SUCCESS = 'FLOW_SUCCESS',\n EVENT = 'EVENT',\n ERROR = 'ERROR',\n}\n\n// Known exit trigger types coming from the SDK transport (postMessage)\nexport enum BenjiConnectExitTrigger {\n ACTION_BUTTON_CLICKED = 'ACTION_BUTTON_CLICKED',\n BACK_TO_MERCHANT_CLICKED = 'BACK_TO_MERCHANT_CLICKED', // deprecated\n CLOSE_BUTTON_CLICKED = 'CLOSE_BUTTON_CLICKED',\n TAPPED_OUT_OF_BOUNDS = 'TAPPED_OUT_OF_BOUNDS'\n}\n\nexport enum BenjiConnectErrorName {\n UNEXPECTED_ERROR = 'unexpected_error',\n PARTNER_CONNECT_ERROR = 'partner_connect_error'\n}\n\nexport type BenjiConnectErrorID = '400' | '500'; // Placeholders for now\n\n// Transport-layer token (raw, unprocessed from postMessage)\nexport interface BenjiConnectEventToken {\n access_token?: string;\n refresh_token?: string;\n expires_at?: string | number;\n exchange_token?: string;\n}\n\nexport interface BenjiConnectEventUserData {\n user: {\n id: number\n first_name: string\n last_name: string\n uuid?: string\n }\n status: BenjiConnectEventUserStatusData\n extra_data?: {\n total_rewards_earned?: number\n total_rewards_redeemed?: number\n created_date?: string\n }\n}\n\nexport interface BenjiConnectEventTransactionData {\n action: string;\n amount: number;\n trigger_event_id: string;\n trigger_name: string;\n}\n\nexport interface BenjiConnectEventUserStatusData {\n status_id: string\n num_of_rewards: number\n reward_status: string\n partner_status_tier_id?: number\n}\n\n// Basic structure for Benji Connect SDK typed events\nexport interface BenjiConnectEvent {\n type: BenjiConnectEventType;\n data?: BenjiConnectEventData;\n}\n\nexport interface BenjiConnectEventData {\n [k: string]: unknown;\n}\n\nexport interface BenjiConnectEventMessage<K extends BenjiConnectEventType = BenjiConnectEventType> {\n type: K; // discriminant\n data: BenjiConnectEventDataMap[K];\n}\n\nexport interface BenjiConnectAuthSuccessEventData {\n action: BenjiConnectAuthAction;\n metadata?: BenjiConnectEventUserData;\n token?: BenjiConnectEventToken,\n transaction?: BenjiConnectEventTransactionData;\n}\n\nexport interface BenjiConnectFlowExitEventData {\n step: string;\n trigger: BenjiConnectExitTrigger;\n}\n\nexport interface BenjiConnectErrorEventData {\n error: Error;\n}\n\n// Canonical event map \nexport type BenjiConnectEventDataMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: BenjiConnectAuthSuccessEventData;\n [BenjiConnectEventType.FLOW_EXIT]: BenjiConnectFlowExitEventData;\n [BenjiConnectEventType.FLOW_SUCCESS]: BenjiConnectAuthSuccessEventData;\n [BenjiConnectEventType.EVENT]: BenjiConnectEventData;\n [BenjiConnectEventType.ERROR]: BenjiConnectErrorEventData;\n\n // Optional catch-all fan-out\n '*': { type: BenjiConnectEventType; data: BenjiConnectEventDataMap[BenjiConnectEventType] };\n};","import { BenjiConnectAuthToken } from '../types/auth';\nimport { BenjiConnectEventToken, BenjiConnectEventType } from '../types/event';\n\nconst CONNECT_MESSAGE_TYPES = new Set<string>(Object.values(BenjiConnectEventType));\n\nexport function isConnectMessageType(data: unknown): boolean {\n if (!data || typeof data !== 'object') return false;\n const type = (data as { type?: string }).type;\n return typeof type === 'string' && CONNECT_MESSAGE_TYPES.has(type);\n}\n\nexport const extractAccessToken = (token?: BenjiConnectEventToken | string): string =>\n typeof token === 'string' ? token : (token?.access_token ?? '');\n\nexport const extractExchangeToken = (token?: BenjiConnectEventToken | string): string =>\n typeof token === 'string' ? token : (token?.exchange_token ?? '');\n\nexport const mapEventToConnectToken = (data?: BenjiConnectEventToken): BenjiConnectAuthToken => ({\n access_token: data?.access_token ?? '',\n refresh_token: data?.refresh_token ?? '',\n expires_at: data?.expires_at ?? ''\n});\n","export enum BenjiConnectAuthAction {\n Connect = 'connect',\n Transfer = 'transfer',\n Redeem = 'redeem',\n Login = 'login',\n}\n\nexport interface BenjiConnectAuthToken {\n access_token: string;\n refresh_token: string;\n expires_at?: string | number;\n}\n\nexport interface BenjiConnectAuth {\n accessToken: string;\n configToken: string;\n}","import { BenjiConnectEventUserData } from \"../types/event\";\nimport { BenjiConnectUserData } from \"../types/user\";\n\nexport function isConnectUserData (\n input: BenjiConnectUserData | Record<string, any>\n): boolean {\n if (!input) return false;\n const data = mapEventToConnectUserData(input);\n if (data.user.id != 0) return true;\n return false;\n}\n\nexport const mapEventToConnectUserData = (\n data?: BenjiConnectEventUserData | Record<string, any>\n): BenjiConnectUserData => ({\n user: {\n id: data?.user?.id ?? 0,\n first_name: data?.user?.first_name ?? '',\n last_name: data?.user?.last_name ?? '',\n uuid: data?.user?.uuid \n },\n status: {\n status_id: data?.status?.status_id ?? '',\n num_of_rewards: data?.status?.num_of_rewards ?? 0,\n reward_status: data?.status?.reward_status ?? '',\n partner_status_tier_id: data?.status?.partner_status_tier_id\n },\n extra_data: {\n total_rewards_earned: data?.extra_data?.total_rewards_earned,\n total_rewards_redeemed: data?.extra_data?.total_rewards_redeemed,\n created_date: data?.extra_data?.created_date\n }\n});\n","import { BenjiConnectEventTransactionData } from \"../types/event\";\nimport { BenjiConnectTransactionData } from \"../types/transaction\";\n\nexport const mapEventToConnectTransactionData = (data?: BenjiConnectEventTransactionData): BenjiConnectTransactionData | null => {\n if (!data) return null;\n return {\n action: data.action,\n amount: data.amount,\n trigger_event_id: data.trigger_event_id,\n trigger_name: data.trigger_name\n };\n}","import { \n BenjiConnectMetadata, \n BenjiConnectOnErrorData, \n BenjiConnectOnEventData, \n BenjiConnectOnExitData, \n BenjiConnectOnExitMetadata, \n BenjiConnectOnSuccessData, \n BenjiConnectOnSuccessMetadata \n} from './config';\n\nimport { \n extractAccessToken,\n extractExchangeToken,\n mapEventToConnectToken \n} from '../utils/auth';\n\nimport { BenjiConnectAuthAction } from './auth';\n\nimport { buildContext } from '../utils/config';\nimport { mapEventToConnectUserData } from '../utils/user';\n\nimport { \n BenjiConnectAuthSuccessEventData,\n BenjiConnectErrorEventData, \n BenjiConnectEventDataMap, \n BenjiConnectEventMessage, \n BenjiConnectEventType, \n BenjiConnectFlowExitEventData\n} from './event';\nimport { mapEventToConnectTransactionData } from '../utils/transaction';\n\nexport type MessageRouterConfig = {\n onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n close?: () => void;\n};\n\nexport const mapToAuthSuccessData = (\n message: BenjiConnectEventMessage<BenjiConnectEventType.AUTH_SUCCESS>,\n data: BenjiConnectAuthSuccessEventData\n): BenjiConnectOnEventData => {\n return {\n type: message.type,\n metadata: {\n context: buildContext(),\n action: data.action,\n token: mapEventToConnectToken(data.token),\n transactionData: mapEventToConnectTransactionData(data.transaction),\n userData: mapEventToConnectUserData(data.metadata)\n }\n };\n};\n\nexport const mapToOnExitData = (data: BenjiConnectFlowExitEventData): BenjiConnectOnExitData => {\n return {\n metadata: {\n context: buildContext(),\n step: data.step,\n trigger: data.trigger\n }\n };\n};\n\nexport const mapToOnSuccessData = (data: BenjiConnectAuthSuccessEventData): BenjiConnectOnSuccessData => {\n \n const token = data.action === BenjiConnectAuthAction.Login\n ? extractExchangeToken(data.token)\n : extractAccessToken(data.token);\n\n let metadata: BenjiConnectOnSuccessMetadata = {\n context: buildContext(),\n action: data.action,\n user_data: data.metadata\n };\n\n if (data.transaction) {\n metadata.transaction_data = data.transaction;\n }\n \n return { token, metadata };\n};\n\nexport const mapToOnErrorData = (data: BenjiConnectErrorEventData): BenjiConnectOnErrorData => {\n return {\n error: data.error,\n error_id: '500', // Placeholder\n metadata: {\n context: buildContext()\n }\n };\n};\n\nexport const mapToOnEventData = <K extends BenjiConnectEventType>(\n message: BenjiConnectEventMessage<K>,\n data: BenjiConnectEventDataMap[K]\n): BenjiConnectOnEventData => {\n return {\n type: message.type,\n metadata: {\n context: buildContext(),\n ...data\n }\n };\n};\n\nexport type BenjiConnectCallbackDataMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: BenjiConnectOnEventData;\n [BenjiConnectEventType.FLOW_EXIT]: BenjiConnectOnExitData;\n [BenjiConnectEventType.FLOW_SUCCESS]: BenjiConnectOnSuccessData;\n [BenjiConnectEventType.ERROR]: BenjiConnectOnErrorData;\n [BenjiConnectEventType.EVENT]: BenjiConnectOnEventData;\n '*': BenjiConnectOnEventData;\n};\n\nexport const BenjiConnectCallbackMapperMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: mapToAuthSuccessData,\n [BenjiConnectEventType.FLOW_EXIT]: mapToOnExitData,\n [BenjiConnectEventType.FLOW_SUCCESS]: mapToOnSuccessData,\n [BenjiConnectEventType.ERROR]: mapToOnErrorData,\n [BenjiConnectEventType.EVENT]: mapToOnEventData,\n} as const;\n\n","import { \n Endpoints\n} from '../config';\n\nimport { BenjiConnectMode } from '../types/config';\nimport {\n BenjiConnectEventType,\n type BenjiConnectEventMessage,\n} from '../types/event';\n\nimport type {\n BenjiConnectOnSuccessData,\n BenjiConnectOnExitData,\n BenjiConnectMetadata,\n BenjiConnectOnSuccessMetadata,\n BenjiConnectOnExitMetadata\n} from '../types/config';\n\nimport {\n BenjiConnectCallbackMapperMap,\n MessageRouterConfig,\n mapToOnEventData,\n} from '../types/router';\nimport { isConnectMessageType } from '../utils/auth';\n\nexport class MessageRouter {\n\n static configuredListeners = false;\n static onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n static onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n static onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n static onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n static close?: () => void;\n\n static mode: BenjiConnectMode = BenjiConnectMode.CONNECT;\n\n static configureMessageRouter(config: MessageRouterConfig) {\n this.onSuccess = config.onSuccess;\n this.onError = config.onError;\n this.onExit = config.onExit;\n this.onEvent = config.onEvent;\n this.close = config.close;\n }\n\n static setMode(mode: BenjiConnectMode) {\n this.mode = mode;\n }\n\n static errorEventHandler = (event: Event) => { \n return MessageRouter.handleErrorMessage(event) \n };\n\n static messageEventHandler = (event: MessageEvent<unknown>) => { \n return MessageRouter.handleMessage(event) \n };\n\n static addEventListeners() {\n if (this.configuredListeners) return;\n window.addEventListener('error', this.errorEventHandler);\n window.addEventListener('unhandledrejection', this.errorEventHandler);\n window.addEventListener('message', this.messageEventHandler);\n this.configuredListeners = true;\n }\n\n static removeEventListeners() {\n window.removeEventListener('error', this.errorEventHandler);\n window.removeEventListener('unhandledrejection', this.errorEventHandler);\n window.removeEventListener('message', this.messageEventHandler);\n this.configuredListeners = false;\n this.mode = BenjiConnectMode.CONNECT;\n }\n\n static handleErrorMessage(event: Event) { \n switch(event.type) {\n case 'error': {\n const errorEvent = event as ErrorEvent;\n const error = errorEvent.error || new Error(errorEvent.message);\n // TODO: Track error\n break;\n }\n case 'unhandledrejection': {\n const rejectionEvent = event as PromiseRejectionEvent;\n const reason = rejectionEvent.reason instanceof Error\n ? rejectionEvent.reason\n : new Error(String(rejectionEvent.reason));\n // TODO: Track error (reason)\n break;\n }\n default: {\n console.error('[Benji Connect SDK] Received Unknown error message', event);\n break;\n }\n }\n }\n\n static handleMessage(event: MessageEvent<unknown>) {\n if (!isConnectMessageType(event.data)) return;\n\n const expectedOrigin: string = new URL(Endpoints.benji_connect_auth_url).origin;\n if (!event || event.origin !== expectedOrigin) {\n console.warn('[Benji Connect SDK] Skipped message, received event from unexpected origin', event.origin, expectedOrigin);\n return;\n }\n\n const raw = event.data;\n if (!raw || typeof raw !== 'object') return;\n\n const partial = raw as Partial<BenjiConnectEventMessage>;\n if (typeof partial.type !== 'string') return;\n \n const message = partial as BenjiConnectEventMessage;\n\n try {\n switch (message.type) {\n\n case BenjiConnectEventType.AUTH_SUCCESS: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.AUTH_SUCCESS>;\n const callbackData = BenjiConnectCallbackMapperMap.AUTH_SUCCESS(connectMessage, connectMessage.data);\n this.onEvent?.(callbackData.type, callbackData.metadata); \n break;\n }\n\n case BenjiConnectEventType.FLOW_EXIT: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.FLOW_EXIT>;\n const callbackData = BenjiConnectCallbackMapperMap.FLOW_EXIT(connectMessage.data) as BenjiConnectOnExitData;\n this.onExit?.(callbackData.metadata);\n this.close?.();\n break;\n }\n\n case BenjiConnectEventType.FLOW_SUCCESS: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.FLOW_SUCCESS>;\n const callbackData = BenjiConnectCallbackMapperMap.FLOW_SUCCESS(connectMessage.data) as BenjiConnectOnSuccessData;\n this.onSuccess?.(callbackData.token, callbackData.metadata);\n if (this.mode === BenjiConnectMode.LOGIN) {\n this.close?.();\n }\n break;\n }\n\n case BenjiConnectEventType.ERROR: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.ERROR>;\n const callbackData = BenjiConnectCallbackMapperMap.ERROR(connectMessage.data);\n this.onError?.(callbackData.error, callbackData.error_id, callbackData.metadata);\n break;\n }\n\n case BenjiConnectEventType.EVENT: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.EVENT>;\n const callbackData = mapToOnEventData(connectMessage, connectMessage.data);\n this.onEvent?.(callbackData.type, callbackData.metadata);\n break;\n }\n\n }\n } finally {\n // TODO: Any cleanup logic \n }\n }\n\n}\n","/// <reference path=\"./global.d.ts\" />\n\nimport { \n configureConfig, \n Endpoints\n} from './config';\n\nimport { \n type BenjiConnectConfig, \n BenjiConnectEnvironment,\n BenjiConnectMode,\n} from './types/config';\n\nimport { \n buildContext, \n mapToConnectEnvironment \n} from './utils/config';\n\nimport { MessageRouter } from './router/message';\nimport { BenjiConnectExitTrigger } from './types/event';\n\nconst IFRAME_STYLE: CSSStyleDeclaration = {\n position: 'relative',\n width: '400px',\n height: '645px',\n border: 'none',\n borderRadius: '20px',\n overflow: 'hidden',\n} as CSSStyleDeclaration;\n\nclass ConnectSDK {\n\n private sdkConfig: BenjiConnectConfig;\n private iframe: HTMLIFrameElement | null = null;\n private container: HTMLDivElement | null = null;\n\n constructor(config: BenjiConnectConfig) {\n\n this.sdkConfig = config;\n\n // Validations\n if (!this.sdkConfig.environment) throw new Error('Environment is required');\n if (!this.sdkConfig.token) throw new Error('Connect token is required');\n\n // Set internal config for environment based on consumer input at runtime\n const environment: BenjiConnectEnvironment = mapToConnectEnvironment(this.sdkConfig.environment);\n this.sdkConfig.environment = environment;\n configureConfig(environment);\n }\n\n async initialize() {\n \n // Configure message router for all postMessage from connect modal and error messages\n MessageRouter.configureMessageRouter({\n onSuccess: this.sdkConfig.onSuccess,\n onError: this.sdkConfig.onError,\n onExit: this.sdkConfig.onExit,\n onEvent: this.sdkConfig.onEvent,\n close: () => this.close(),\n });\n\n // TODO: Tracker.configureWithOptions(sdkOptions);\n // TODO: Tracker.trackSDKInitialized();\n }\n\n async open() {\n await this.initialize();\n this.openUI();\n\n MessageRouter.setMode(this.sdkConfig.mode ?? BenjiConnectMode.CONNECT);\n\n MessageRouter.addEventListeners();\n // TODO: Track SDK Opened Tracker.trackSDKOpened();\n }\n\n openUI() {\n if (this.iframe) return;\n\n // container\n this.container = document.createElement('div');\n Object.assign(this.container.style, {\n position: 'fixed', \n top: '0', \n left: '0', \n width: '100%', \n height: '100%',\n backgroundColor: 'rgba(0,0,0,0.5)',\n zIndex: '9999', \n display: 'flex',\n alignItems: 'center', \n justifyContent: 'center', \n overflow: 'auto',\n } as CSSStyleDeclaration);\n\n // iframe\n console.debug('[Connect SDK] endpoints', Endpoints);\n console.log('[Connect SDK] opeining URL', Endpoints.benji_connect_auth_url);\n const url = new URL(Endpoints.benji_connect_auth_url);\n const connectToken = this.sdkConfig.token;\n url.searchParams.set('connect_token', connectToken);\n url.searchParams.set('t', String(Date.now()));\n if (this.sdkConfig.mode != null) {\n url.searchParams.set('mode', String(this.sdkConfig.mode));\n }\n\n this.iframe = document.createElement('iframe');\n Object.assign(this.iframe.style, IFRAME_STYLE);\n this.iframe.src = url.toString();\n\n this.container.appendChild(this.iframe);\n document.body.appendChild(this.container);\n\n this.container.addEventListener('click', (e) => {\n if (e.target === this.container) {\n // Trigger exit when user taps outside modal bounds\n this.sdkConfig.onExit?.({\n context: buildContext(),\n trigger: BenjiConnectExitTrigger.TAPPED_OUT_OF_BOUNDS\n });\n this.close();\n }\n });\n }\n\n close() {\n if (!this.iframe) return;\n\n if (this.container?.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n MessageRouter.removeEventListeners();\n // TODO: Track SDK Closed Tracker.trackSDKClosed();\n this.iframe = null;\n this.container = null;\n }\n\n cleanup() {\n if (this.iframe) this.close();\n }\n\n ping() { return 'pong'; }\n}\n\nexport default ConnectSDK;\n"],"mappings":"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","names":["endpoints","project_environment","endpoints","project_environment","endpoints","project_environment","BenjiConnectEnvironment","BenjiConnectMode","BenjiConnectEventType","BenjiConnectExitTrigger","BenjiConnectErrorName","data","BenjiConnectAuthAction","data","data","data"]}
package/dist/index.d.cts CHANGED
@@ -1,7 +1,8 @@
1
1
  declare enum BenjiConnectAuthAction {
2
2
  Connect = "connect",
3
3
  Transfer = "transfer",
4
- Redeem = "redeem"
4
+ Redeem = "redeem",
5
+ Login = "login"
5
6
  }
6
7
 
7
8
  declare enum BenjiConnectEventType {
@@ -60,11 +61,13 @@ declare enum BenjiConnectEnvironment {
60
61
  declare enum BenjiConnectMode {
61
62
  CONNECT = 1,
62
63
  TRANSFER = 3,
63
- REDEEM = 4
64
+ REDEEM = 4,
65
+ LOGIN = 5
64
66
  }
65
67
  interface BenjiConnectConfig {
66
68
  environment: BenjiConnectEnvironment | string;
67
69
  token: string;
70
+ mode?: BenjiConnectMode;
68
71
  onSuccess?: (token: string, metadata: BenjiConnectOnSuccessMetadata) => void;
69
72
  onError?: (error: Error, error_id: string, metadata: BenjiConnectMetadata) => void;
70
73
  onExit?: (metadata: BenjiConnectOnExitMetadata) => void;
@@ -120,4 +123,4 @@ declare class ConnectSDK {
120
123
  ping(): string;
121
124
  }
122
125
 
123
- export { type BenjiConnectConfig, type BenjiConnectContext, BenjiConnectEnvironment, type BenjiConnectErrorID, BenjiConnectErrorName, BenjiConnectEventType, BenjiConnectExitTrigger, type BenjiConnectMetadata, BenjiConnectMode, type BenjiConnectOnErrorData, type BenjiConnectOnEventData, type BenjiConnectOnExitData, type BenjiConnectOnExitMetadata, type BenjiConnectOnSuccessData, type BenjiConnectOnSuccessMetadata, ConnectSDK, ConnectSDK as default };
126
+ export { BenjiConnectAuthAction, type BenjiConnectConfig, type BenjiConnectContext, BenjiConnectEnvironment, type BenjiConnectErrorID, BenjiConnectErrorName, BenjiConnectEventType, BenjiConnectExitTrigger, type BenjiConnectMetadata, BenjiConnectMode, type BenjiConnectOnErrorData, type BenjiConnectOnEventData, type BenjiConnectOnExitData, type BenjiConnectOnExitMetadata, type BenjiConnectOnSuccessData, type BenjiConnectOnSuccessMetadata, ConnectSDK, ConnectSDK as default };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  declare enum BenjiConnectAuthAction {
2
2
  Connect = "connect",
3
3
  Transfer = "transfer",
4
- Redeem = "redeem"
4
+ Redeem = "redeem",
5
+ Login = "login"
5
6
  }
6
7
 
7
8
  declare enum BenjiConnectEventType {
@@ -60,11 +61,13 @@ declare enum BenjiConnectEnvironment {
60
61
  declare enum BenjiConnectMode {
61
62
  CONNECT = 1,
62
63
  TRANSFER = 3,
63
- REDEEM = 4
64
+ REDEEM = 4,
65
+ LOGIN = 5
64
66
  }
65
67
  interface BenjiConnectConfig {
66
68
  environment: BenjiConnectEnvironment | string;
67
69
  token: string;
70
+ mode?: BenjiConnectMode;
68
71
  onSuccess?: (token: string, metadata: BenjiConnectOnSuccessMetadata) => void;
69
72
  onError?: (error: Error, error_id: string, metadata: BenjiConnectMetadata) => void;
70
73
  onExit?: (metadata: BenjiConnectOnExitMetadata) => void;
@@ -120,4 +123,4 @@ declare class ConnectSDK {
120
123
  ping(): string;
121
124
  }
122
125
 
123
- export { type BenjiConnectConfig, type BenjiConnectContext, BenjiConnectEnvironment, type BenjiConnectErrorID, BenjiConnectErrorName, BenjiConnectEventType, BenjiConnectExitTrigger, type BenjiConnectMetadata, BenjiConnectMode, type BenjiConnectOnErrorData, type BenjiConnectOnEventData, type BenjiConnectOnExitData, type BenjiConnectOnExitMetadata, type BenjiConnectOnSuccessData, type BenjiConnectOnSuccessMetadata, ConnectSDK, ConnectSDK as default };
126
+ export { BenjiConnectAuthAction, type BenjiConnectConfig, type BenjiConnectContext, BenjiConnectEnvironment, type BenjiConnectErrorID, BenjiConnectErrorName, BenjiConnectEventType, BenjiConnectExitTrigger, type BenjiConnectMetadata, BenjiConnectMode, type BenjiConnectOnErrorData, type BenjiConnectOnEventData, type BenjiConnectOnExitData, type BenjiConnectOnExitMetadata, type BenjiConnectOnSuccessData, type BenjiConnectOnSuccessMetadata, ConnectSDK, ConnectSDK as default };
package/dist/index.js CHANGED
@@ -53,17 +53,18 @@ var endpoints4 = {
53
53
  };
54
54
 
55
55
  // src/types/config.ts
56
- var BenjiConnectEnvironment = /* @__PURE__ */ ((BenjiConnectEnvironment2) => {
57
- BenjiConnectEnvironment2["LOCAL"] = "local";
58
- BenjiConnectEnvironment2["DEVELOPMENT"] = "development";
59
- BenjiConnectEnvironment2["SANDBOX"] = "sandbox";
60
- BenjiConnectEnvironment2["PRODUCTION"] = "production";
61
- return BenjiConnectEnvironment2;
56
+ var BenjiConnectEnvironment = /* @__PURE__ */ ((BenjiConnectEnvironment3) => {
57
+ BenjiConnectEnvironment3["LOCAL"] = "local";
58
+ BenjiConnectEnvironment3["DEVELOPMENT"] = "development";
59
+ BenjiConnectEnvironment3["SANDBOX"] = "sandbox";
60
+ BenjiConnectEnvironment3["PRODUCTION"] = "production";
61
+ return BenjiConnectEnvironment3;
62
62
  })(BenjiConnectEnvironment || {});
63
63
  var BenjiConnectMode = /* @__PURE__ */ ((BenjiConnectMode2) => {
64
64
  BenjiConnectMode2[BenjiConnectMode2["CONNECT"] = 1] = "CONNECT";
65
65
  BenjiConnectMode2[BenjiConnectMode2["TRANSFER"] = 3] = "TRANSFER";
66
66
  BenjiConnectMode2[BenjiConnectMode2["REDEEM"] = 4] = "REDEEM";
67
+ BenjiConnectMode2[BenjiConnectMode2["LOGIN"] = 5] = "LOGIN";
67
68
  return BenjiConnectMode2;
68
69
  })(BenjiConnectMode || {});
69
70
 
@@ -123,7 +124,7 @@ function getEnvironment() {
123
124
  // src/utils/config.ts
124
125
  var buildContext = () => ({
125
126
  namespace: "benji-connect-sdk" ? "benji-connect-sdk" : "benji-connect-sdk",
126
- version: "1.0.10" ? String("1.0.10") : "0.0.0"
127
+ version: "1.1.0-beta.1" ? String("1.1.0-beta.1") : "0.0.0"
127
128
  });
128
129
  function isBenjiConnectEnvironment(environment) {
129
130
  return environment === "local" /* LOCAL */ || environment === "development" /* DEVELOPMENT */ || environment === "sandbox" /* SANDBOX */ || environment === "production" /* PRODUCTION */;
@@ -166,10 +167,20 @@ var BenjiConnectErrorName = /* @__PURE__ */ ((BenjiConnectErrorName2) => {
166
167
  })(BenjiConnectErrorName || {});
167
168
 
168
169
  // src/utils/auth.ts
170
+ var CONNECT_MESSAGE_TYPES = new Set(Object.values(BenjiConnectEventType));
171
+ function isConnectMessageType(data2) {
172
+ if (!data2 || typeof data2 !== "object") return false;
173
+ const type = data2.type;
174
+ return typeof type === "string" && CONNECT_MESSAGE_TYPES.has(type);
175
+ }
169
176
  var extractAccessToken = (token) => {
170
177
  var _a;
171
178
  return typeof token === "string" ? token : (_a = token == null ? void 0 : token.access_token) != null ? _a : "";
172
179
  };
180
+ var extractExchangeToken = (token) => {
181
+ var _a;
182
+ return typeof token === "string" ? token : (_a = token == null ? void 0 : token.exchange_token) != null ? _a : "";
183
+ };
173
184
  var mapEventToConnectToken = (data2) => {
174
185
  var _a, _b, _c;
175
186
  return {
@@ -179,6 +190,15 @@ var mapEventToConnectToken = (data2) => {
179
190
  };
180
191
  };
181
192
 
193
+ // src/types/auth.ts
194
+ var BenjiConnectAuthAction = /* @__PURE__ */ ((BenjiConnectAuthAction2) => {
195
+ BenjiConnectAuthAction2["Connect"] = "connect";
196
+ BenjiConnectAuthAction2["Transfer"] = "transfer";
197
+ BenjiConnectAuthAction2["Redeem"] = "redeem";
198
+ BenjiConnectAuthAction2["Login"] = "login";
199
+ return BenjiConnectAuthAction2;
200
+ })(BenjiConnectAuthAction || {});
201
+
182
202
  // src/utils/user.ts
183
203
  var mapEventToConnectUserData = (data2) => {
184
204
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
@@ -237,7 +257,7 @@ var mapToOnExitData = (data2) => {
237
257
  };
238
258
  };
239
259
  var mapToOnSuccessData = (data2) => {
240
- const token = extractAccessToken(data2.token);
260
+ const token = data2.action === "login" /* Login */ ? extractExchangeToken(data2.token) : extractAccessToken(data2.token);
241
261
  let metadata = {
242
262
  context: buildContext(),
243
263
  action: data2.action,
@@ -284,6 +304,9 @@ var _MessageRouter = class _MessageRouter {
284
304
  this.onEvent = config.onEvent;
285
305
  this.close = config.close;
286
306
  }
307
+ static setMode(mode) {
308
+ this.mode = mode;
309
+ }
287
310
  static addEventListeners() {
288
311
  if (this.configuredListeners) return;
289
312
  window.addEventListener("error", this.errorEventHandler);
@@ -296,6 +319,7 @@ var _MessageRouter = class _MessageRouter {
296
319
  window.removeEventListener("unhandledrejection", this.errorEventHandler);
297
320
  window.removeEventListener("message", this.messageEventHandler);
298
321
  this.configuredListeners = false;
322
+ this.mode = 1 /* CONNECT */;
299
323
  }
300
324
  static handleErrorMessage(event) {
301
325
  switch (event.type) {
@@ -316,8 +340,8 @@ var _MessageRouter = class _MessageRouter {
316
340
  }
317
341
  }
318
342
  static handleMessage(event) {
319
- var _a, _b, _c, _d, _e, _f;
320
- console.debug("[Benji Connect SDK] Received message", event);
343
+ var _a, _b, _c, _d, _e, _f, _g;
344
+ if (!isConnectMessageType(event.data)) return;
321
345
  const expectedOrigin = new URL(Endpoints.benji_connect_auth_url).origin;
322
346
  if (!event || event.origin !== expectedOrigin) {
323
347
  console.warn("[Benji Connect SDK] Skipped message, received event from unexpected origin", event.origin, expectedOrigin);
@@ -347,18 +371,21 @@ var _MessageRouter = class _MessageRouter {
347
371
  const connectMessage = message;
348
372
  const callbackData = BenjiConnectCallbackMapperMap.FLOW_SUCCESS(connectMessage.data);
349
373
  (_d = this.onSuccess) == null ? void 0 : _d.call(this, callbackData.token, callbackData.metadata);
374
+ if (this.mode === 5 /* LOGIN */) {
375
+ (_e = this.close) == null ? void 0 : _e.call(this);
376
+ }
350
377
  break;
351
378
  }
352
379
  case "ERROR" /* ERROR */: {
353
380
  const connectMessage = message;
354
381
  const callbackData = BenjiConnectCallbackMapperMap.ERROR(connectMessage.data);
355
- (_e = this.onError) == null ? void 0 : _e.call(this, callbackData.error, callbackData.error_id, callbackData.metadata);
382
+ (_f = this.onError) == null ? void 0 : _f.call(this, callbackData.error, callbackData.error_id, callbackData.metadata);
356
383
  break;
357
384
  }
358
- default: {
359
- const m = message;
360
- const callbackData = mapToOnEventData(m, m.data);
361
- (_f = this.onEvent) == null ? void 0 : _f.call(this, callbackData.type, callbackData.metadata);
385
+ case "EVENT" /* EVENT */: {
386
+ const connectMessage = message;
387
+ const callbackData = mapToOnEventData(connectMessage, connectMessage.data);
388
+ (_g = this.onEvent) == null ? void 0 : _g.call(this, callbackData.type, callbackData.metadata);
362
389
  break;
363
390
  }
364
391
  }
@@ -367,6 +394,7 @@ var _MessageRouter = class _MessageRouter {
367
394
  }
368
395
  };
369
396
  _MessageRouter.configuredListeners = false;
397
+ _MessageRouter.mode = 1 /* CONNECT */;
370
398
  _MessageRouter.errorEventHandler = (event) => {
371
399
  return _MessageRouter.handleErrorMessage(event);
372
400
  };
@@ -376,6 +404,14 @@ _MessageRouter.messageEventHandler = (event) => {
376
404
  var MessageRouter = _MessageRouter;
377
405
 
378
406
  // src/connect-sdk.ts
407
+ var IFRAME_STYLE = {
408
+ position: "relative",
409
+ width: "400px",
410
+ height: "645px",
411
+ border: "none",
412
+ borderRadius: "20px",
413
+ overflow: "hidden"
414
+ };
379
415
  var ConnectSDK = class {
380
416
  constructor(config) {
381
417
  this.iframe = null;
@@ -397,8 +433,10 @@ var ConnectSDK = class {
397
433
  });
398
434
  }
399
435
  async open() {
436
+ var _a;
400
437
  await this.initialize();
401
438
  this.openUI();
439
+ MessageRouter.setMode((_a = this.sdkConfig.mode) != null ? _a : 1 /* CONNECT */);
402
440
  MessageRouter.addEventListeners();
403
441
  }
404
442
  openUI() {
@@ -423,15 +461,11 @@ var ConnectSDK = class {
423
461
  const connectToken = this.sdkConfig.token;
424
462
  url.searchParams.set("connect_token", connectToken);
425
463
  url.searchParams.set("t", String(Date.now()));
464
+ if (this.sdkConfig.mode != null) {
465
+ url.searchParams.set("mode", String(this.sdkConfig.mode));
466
+ }
426
467
  this.iframe = document.createElement("iframe");
427
- Object.assign(this.iframe.style, {
428
- position: "relative",
429
- width: "400px",
430
- height: "645px",
431
- border: "none",
432
- borderRadius: "20px",
433
- overflow: "hidden"
434
- });
468
+ Object.assign(this.iframe.style, IFRAME_STYLE);
435
469
  this.iframe.src = url.toString();
436
470
  this.container.appendChild(this.iframe);
437
471
  document.body.appendChild(this.container);
@@ -447,8 +481,11 @@ var ConnectSDK = class {
447
481
  });
448
482
  }
449
483
  close() {
484
+ var _a;
450
485
  if (!this.iframe) return;
451
- document.body.removeChild(this.container);
486
+ if ((_a = this.container) == null ? void 0 : _a.parentNode) {
487
+ this.container.parentNode.removeChild(this.container);
488
+ }
452
489
  MessageRouter.removeEventListeners();
453
490
  this.iframe = null;
454
491
  this.container = null;
@@ -465,6 +502,7 @@ var connect_sdk_default = ConnectSDK;
465
502
  // src/index.ts
466
503
  var src_default = connect_sdk_default;
467
504
  export {
505
+ BenjiConnectAuthAction,
468
506
  BenjiConnectEnvironment,
469
507
  BenjiConnectErrorName,
470
508
  BenjiConnectEventType,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config/production.ts","../src/config/sandbox.ts","../src/config/development.ts","../src/config/local.defaults.ts","../src/types/config.ts","../src/utils/environment.ts","../src/config/index.ts","../src/utils/config.ts","../src/types/event.ts","../src/utils/auth.ts","../src/utils/user.ts","../src/utils/transaction.ts","../src/types/router.ts","../src/router/message.ts","../src/connect-sdk.ts","../src/index.ts"],"sourcesContent":["export const project_environment: string = 'production';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url':'https://verifyapp.withbenji.com',\n 'benji_connect_auth_service_url' : 'https://authservice.withbenji.com'\n}","export const project_environment: string = 'sandbox';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url':'https://verifyapp-staging.withbenji.com',\n 'benji_connect_auth_service_url' : 'https://authservice-staging.withbenji.com'\n}","export const project_environment: string = 'development';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url': 'https://verifyapp-dev.withbenji.com',\n 'benji_connect_auth_service_url': 'https://authservice-dev.withbenji.com',\n};","/**\n * Build-time fallback when gitignored `local.ts` is absent (CI, fresh clones).\n * Same endpoints as development — not machine-specific localhost overrides.\n * Copy to `local.ts` locally for localhost URLs; see RELEASE.md.\n */\nexport const project_environment: string = 'local';\n\nexport const endpoints: Record<string, string> = {\n benji_connect_auth_url: 'https://verifyapp-dev.withbenji.com',\n benji_connect_auth_service_url: 'https://authservice-dev.withbenji.com',\n};\n","import { BenjiConnectAuthAction } from './auth';\nimport { BenjiConnectEventType } from './event';\nimport { BenjiConnectTransactionData } from './transaction';\nimport { BenjiConnectUserData } from './user';\n\nexport enum BenjiConnectEnvironment {\n LOCAL = 'local',\n DEVELOPMENT = 'development',\n SANDBOX = 'sandbox',\n PRODUCTION = 'production',\n}\n\nexport enum BenjiConnectMode {\n CONNECT = 1,\n TRANSFER = 3,\n REDEEM = 4\n}\n\nexport interface BenjiConnectConfig {\n environment: BenjiConnectEnvironment | string;\n token: string;\n onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n}\n\nexport interface BenjiConnectContext {\n namespace?: string; // e.g., 'benji-connect-sdk'\n version?: string | number; // e.g., '1.0.0'\n}\n\n/*\n * SDK config callback structures below\n */\n\nexport interface BenjiConnectOnSuccessData {\n token: string;\n metadata: BenjiConnectOnSuccessMetadata;\n}\n\nexport interface BenjiConnectOnErrorData {\n error: Error;\n error_id: string;\n metadata: BenjiConnectMetadata;\n}\n\nexport interface BenjiConnectOnExitData {\n metadata: BenjiConnectOnExitMetadata;\n}\n\nexport interface BenjiConnectOnEventData {\n type: BenjiConnectEventType;\n metadata: BenjiConnectMetadata;\n}\n\nexport interface BenjiConnectMetadata {\n context: { \n namespace: string; \n version: string \n };\n [k: string]: unknown;\n}\n\nexport interface BenjiConnectOnSuccessMetadata extends BenjiConnectMetadata {\n action?: BenjiConnectAuthAction;\n transaction_data?: BenjiConnectTransactionData | null;\n user_data?: BenjiConnectUserData;\n}\n\nexport interface BenjiConnectOnExitMetadata extends BenjiConnectMetadata {\n trigger?: string;\n step?: string;\n}","/** Hostnames that browsers use for loopback when typed literally in the URL bar. */\nexport const LOCAL_HOSTNAMES = ['localhost', '127.0.0.1', '::1', '[::1]'] as const;\n\nconst LOCAL_HOSTNAME_SET: ReadonlySet<string> = new Set(LOCAL_HOSTNAMES);\n\nexport function isLocalHost(\n hostname: string = typeof window !== 'undefined' ? window.location.hostname : ''\n): boolean {\n if (LOCAL_HOSTNAME_SET.has(hostname)) {\n return true;\n }\n // IPv4 loopback block 127.0.0.0/8 — covers 127.0.0.1 without listing every address\n if (hostname.startsWith('127.')) {\n return true;\n }\n return false;\n}\n","import * as productionConfig from './production';\nimport * as sandboxConfig from './sandbox';\nimport * as developmentConfig from './development';\nimport * as localConfig from './local';\nimport { BenjiConnectEnvironment } from '../types/config';\nimport { isLocalHost } from '../utils/environment';\n\nexport type EnvironmentConfigModule = {\n project_environment: string;\n endpoints: Record<string, string>;\n};\n\nconst env = typeof process !== 'undefined' ? process.env : {};\nlet data: EnvironmentConfigModule = developmentConfig;\ntype EndpointConfig = typeof developmentConfig.endpoints;\nexport let Endpoints: EndpointConfig = getEndpoints();\nexport let Environment = BenjiConnectEnvironment.DEVELOPMENT;\n\nexport function configureConfig(environment: BenjiConnectEnvironment) {\n if (environment == 'production') {\n console.log('[Connect SDK] configuring with environment production');\n data = productionConfig;\n } else if (environment == 'sandbox') {\n console.log('[Connect SDK] configuring with environment sandbox');\n data = sandboxConfig;\n } else if (environment == 'development') {\n console.log('[Connect SDK] configuring with environment development');\n data = developmentConfig;\n } else if (environment == 'local') {\n if (isLocalHost()) {\n console.log('[Connect SDK] configuring with environment local');\n data = localConfig;\n } else {\n console.log(\n '[Connect SDK] local environment requested on non-local host; using development'\n );\n data = developmentConfig;\n }\n }\n Endpoints = getEndpoints();\n Environment = getEnvironment();\n}\n\nfunction getEndpoints(): EndpointConfig {\n const entries = Object.entries(data.endpoints).map(([key, value]) => {\n const override = env?.[key] || value;\n return [key, override] as const;\n });\n return Object.fromEntries(entries) as EndpointConfig;\n}\n\nfunction getEnvironment(): BenjiConnectEnvironment {\n return data['project_environment'] as BenjiConnectEnvironment;\n}\n\nexport const Namespace = __NAMESPACE__;\nexport const Version = __VERSION__;\n","import { BenjiConnectEnvironment } from \"../types/config\";\nimport { isLocalHost } from \"./environment\";\n\nexport const buildContext = () => ({\n namespace: typeof __NAMESPACE__ !== 'undefined' && __NAMESPACE__ ? __NAMESPACE__ : 'benji-connect-sdk',\n version: typeof __VERSION__ !== 'undefined' && __VERSION__ ? String(__VERSION__) : '0.0.0',\n});\n\nexport function isBenjiConnectEnvironment(\n environment: unknown\n): environment is BenjiConnectEnvironment {\n return (\n environment === BenjiConnectEnvironment.LOCAL ||\n environment === BenjiConnectEnvironment.DEVELOPMENT ||\n environment === BenjiConnectEnvironment.SANDBOX ||\n environment === BenjiConnectEnvironment.PRODUCTION\n );\n}\n\nexport function mapToConnectEnvironment(\n environment: BenjiConnectEnvironment | string\n): BenjiConnectEnvironment {\n\n if (isBenjiConnectEnvironment(environment)) return environment;\n\n const environments: Record<string, BenjiConnectEnvironment> = {\n local: BenjiConnectEnvironment.LOCAL,\n development: BenjiConnectEnvironment.DEVELOPMENT,\n sandbox: BenjiConnectEnvironment.SANDBOX,\n production: BenjiConnectEnvironment.PRODUCTION,\n };\n const mapped = environments[environment];\n if (mapped) return mapped;\n\n const defaultEnvironment = isLocalHost()\n ? BenjiConnectEnvironment.LOCAL\n : BenjiConnectEnvironment.DEVELOPMENT;\n console.warn(`[Benji Connect SDK] ${environment} not valid environment defaulting to ${defaultEnvironment}`);\n\n return defaultEnvironment;\n}","import { BenjiConnectAuthAction } from \"./auth\";\n\n// Known event names coming from the SDK transport (postMessage)\nexport enum BenjiConnectEventType {\n AUTH_SUCCESS = 'AUTH_SUCCESS',\n FLOW_EXIT = 'FLOW_EXIT',\n FLOW_SUCCESS = 'FLOW_SUCCESS',\n EVENT = 'EVENT',\n ERROR = 'ERROR',\n}\n\n// Known exit trigger types coming from the SDK transport (postMessage)\nexport enum BenjiConnectExitTrigger {\n ACTION_BUTTON_CLICKED = 'ACTION_BUTTON_CLICKED',\n BACK_TO_MERCHANT_CLICKED = 'BACK_TO_MERCHANT_CLICKED', // deprecated\n CLOSE_BUTTON_CLICKED = 'CLOSE_BUTTON_CLICKED',\n TAPPED_OUT_OF_BOUNDS = 'TAPPED_OUT_OF_BOUNDS'\n}\n\nexport enum BenjiConnectErrorName {\n UNEXPECTED_ERROR = 'unexpected_error',\n PARTNER_CONNECT_ERROR = 'partner_connect_error'\n}\n\nexport type BenjiConnectErrorID = '400' | '500'; // Placeholders for now\n\n// Transport-layer token (raw, unprocessed from postMessage)\nexport interface BenjiConnectEventToken {\n access_token: string;\n refresh_token: string;\n expires_at?: string | number;\n}\n\nexport interface BenjiConnectEventUserData {\n user: {\n id: number\n first_name: string\n last_name: string\n uuid?: string\n }\n status: BenjiConnectEventUserStatusData\n extra_data?: {\n total_rewards_earned?: number\n total_rewards_redeemed?: number\n created_date?: string\n }\n}\n\nexport interface BenjiConnectEventTransactionData {\n action: string;\n amount: number;\n trigger_event_id: string;\n trigger_name: string;\n}\n\nexport interface BenjiConnectEventUserStatusData {\n status_id: string\n num_of_rewards: number\n reward_status: string\n partner_status_tier_id?: number\n}\n\n// Basic structure for Benji Connect SDK typed events\nexport interface BenjiConnectEvent {\n type: BenjiConnectEventType;\n data?: BenjiConnectEventData;\n}\n\nexport interface BenjiConnectEventData {\n [k: string]: unknown;\n}\n\nexport interface BenjiConnectEventMessage<K extends BenjiConnectEventType = BenjiConnectEventType> {\n type: K; // discriminant\n data: BenjiConnectEventDataMap[K];\n}\n\nexport interface BenjiConnectAuthSuccessEventData {\n action: BenjiConnectAuthAction;\n metadata?: BenjiConnectEventUserData;\n token?: BenjiConnectEventToken,\n transaction?: BenjiConnectEventTransactionData;\n}\n\nexport interface BenjiConnectFlowExitEventData {\n step: string;\n trigger: BenjiConnectExitTrigger;\n}\n\nexport interface BenjiConnectErrorEventData {\n error: Error;\n}\n\n// Canonical event map \nexport type BenjiConnectEventDataMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: BenjiConnectAuthSuccessEventData;\n [BenjiConnectEventType.FLOW_EXIT]: BenjiConnectFlowExitEventData;\n [BenjiConnectEventType.FLOW_SUCCESS]: BenjiConnectAuthSuccessEventData;\n [BenjiConnectEventType.EVENT]: BenjiConnectEventData;\n [BenjiConnectEventType.ERROR]: BenjiConnectErrorEventData;\n\n // Optional catch-all fan-out\n '*': { type: BenjiConnectEventType; data: BenjiConnectEventDataMap[BenjiConnectEventType] };\n};","import { BenjiConnectAuthToken } from \"../types/auth\";\nimport { BenjiConnectEventToken } from \"../types/event\";\n\nexport const extractAccessToken = (token?: BenjiConnectEventToken | string): string =>\n typeof token === 'string' ? token : (token?.access_token ?? '');\n\nexport const mapEventToConnectToken = (data?: BenjiConnectEventToken): BenjiConnectAuthToken => ({\n access_token: data?.access_token ?? '',\n refresh_token: data?.refresh_token ?? '',\n expires_at: data?.expires_at ?? ''\n});","import { BenjiConnectEventUserData } from \"../types/event\";\nimport { BenjiConnectUserData } from \"../types/user\";\n\nexport function isConnectUserData (\n input: BenjiConnectUserData | Record<string, any>\n): boolean {\n if (!input) return false;\n const data = mapEventToConnectUserData(input);\n if (data.user.id != 0) return true;\n return false;\n}\n\nexport const mapEventToConnectUserData = (\n data?: BenjiConnectEventUserData | Record<string, any>\n): BenjiConnectUserData => ({\n user: {\n id: data?.user?.id ?? 0,\n first_name: data?.user?.first_name ?? '',\n last_name: data?.user?.last_name ?? '',\n uuid: data?.user?.uuid \n },\n status: {\n status_id: data?.status?.status_id ?? '',\n num_of_rewards: data?.status?.num_of_rewards ?? 0,\n reward_status: data?.status?.reward_status ?? '',\n partner_status_tier_id: data?.status?.partner_status_tier_id\n },\n extra_data: {\n total_rewards_earned: data?.extra_data?.total_rewards_earned,\n total_rewards_redeemed: data?.extra_data?.total_rewards_redeemed,\n created_date: data?.extra_data?.created_date\n }\n});\n","import { BenjiConnectEventTransactionData } from \"../types/event\";\nimport { BenjiConnectTransactionData } from \"../types/transaction\";\n\nexport const mapEventToConnectTransactionData = (data?: BenjiConnectEventTransactionData): BenjiConnectTransactionData | null => {\n if (!data) return null;\n return {\n action: data.action,\n amount: data.amount,\n trigger_event_id: data.trigger_event_id,\n trigger_name: data.trigger_name\n };\n}","import { \n BenjiConnectMetadata, \n BenjiConnectOnErrorData, \n BenjiConnectOnEventData, \n BenjiConnectOnExitData, \n BenjiConnectOnExitMetadata, \n BenjiConnectOnSuccessData, \n BenjiConnectOnSuccessMetadata \n} from './config';\n\nimport { \n extractAccessToken, \n mapEventToConnectToken \n} from '../utils/auth';\n\nimport { buildContext } from '../utils/config';\nimport { mapEventToConnectUserData } from '../utils/user';\n\nimport { \n BenjiConnectAuthSuccessEventData,\n BenjiConnectErrorEventData, \n BenjiConnectEventDataMap, \n BenjiConnectEventMessage, \n BenjiConnectEventType, \n BenjiConnectFlowExitEventData\n} from './event';\nimport { mapEventToConnectTransactionData } from '../utils/transaction';\n\nexport type MessageRouterConfig = {\n onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n close?: () => void;\n};\n\nexport const mapToAuthSuccessData = (\n message: BenjiConnectEventMessage<BenjiConnectEventType.AUTH_SUCCESS>,\n data: BenjiConnectAuthSuccessEventData\n): BenjiConnectOnEventData => {\n return {\n type: message.type,\n metadata: {\n context: buildContext(),\n action: data.action,\n token: mapEventToConnectToken(data.token),\n transactionData: mapEventToConnectTransactionData(data.transaction),\n userData: mapEventToConnectUserData(data.metadata)\n }\n };\n};\n\nexport const mapToOnExitData = (data: BenjiConnectFlowExitEventData): BenjiConnectOnExitData => {\n return {\n metadata: {\n context: buildContext(),\n step: data.step,\n trigger: data.trigger\n }\n };\n};\n\nexport const mapToOnSuccessData = (data: BenjiConnectAuthSuccessEventData): BenjiConnectOnSuccessData => {\n \n const token = extractAccessToken(data.token);\n\n let metadata: BenjiConnectOnSuccessMetadata = {\n context: buildContext(),\n action: data.action,\n user_data: data.metadata\n };\n\n if (data.transaction) {\n metadata.transaction_data = data.transaction;\n }\n \n return { token, metadata };\n};\n\nexport const mapToOnErrorData = (data: BenjiConnectErrorEventData): BenjiConnectOnErrorData => {\n return {\n error: data.error,\n error_id: '500', // Placeholder\n metadata: {\n context: buildContext()\n }\n };\n};\n\nexport const mapToOnEventData = <K extends BenjiConnectEventType>(\n message: BenjiConnectEventMessage<K>,\n data: BenjiConnectEventDataMap[K]\n): BenjiConnectOnEventData => {\n return {\n type: message.type,\n metadata: {\n context: buildContext(),\n ...data\n }\n };\n};\n\nexport type BenjiConnectCallbackDataMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: BenjiConnectOnEventData;\n [BenjiConnectEventType.FLOW_EXIT]: BenjiConnectOnExitData;\n [BenjiConnectEventType.FLOW_SUCCESS]: BenjiConnectOnSuccessData;\n [BenjiConnectEventType.ERROR]: BenjiConnectOnErrorData;\n [BenjiConnectEventType.EVENT]: BenjiConnectOnEventData;\n '*': BenjiConnectOnEventData;\n};\n\nexport const BenjiConnectCallbackMapperMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: mapToAuthSuccessData,\n [BenjiConnectEventType.FLOW_EXIT]: mapToOnExitData,\n [BenjiConnectEventType.FLOW_SUCCESS]: mapToOnSuccessData,\n [BenjiConnectEventType.ERROR]: mapToOnErrorData,\n [BenjiConnectEventType.EVENT]: mapToOnEventData,\n} as const;\n\n","import { \n Endpoints\n} from '../config';\n\nimport {\n BenjiConnectEventType,\n type BenjiConnectEventData,\n type BenjiConnectEventMessage\n} from '../types/event';\n\nimport type {\n BenjiConnectOnSuccessData,\n BenjiConnectOnExitData,\n BenjiConnectMetadata,\n BenjiConnectOnSuccessMetadata,\n BenjiConnectOnExitMetadata\n} from '../types/config';\n\nimport {\n BenjiConnectCallbackMapperMap,\n MessageRouterConfig,\n mapToOnEventData\n} from '../types/router';\n\nexport class MessageRouter {\n\n static configuredListeners = false;\n static onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n static onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n static onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n static onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n static close?: () => void;\n\n static configureMessageRouter(config: MessageRouterConfig) {\n this.onSuccess = config.onSuccess;\n this.onError = config.onError;\n this.onExit = config.onExit;\n this.onEvent = config.onEvent;\n this.close = config.close;\n }\n\n static errorEventHandler = (event: Event) => { \n return MessageRouter.handleErrorMessage(event) \n };\n\n static messageEventHandler = (event: MessageEvent<unknown>) => { \n return MessageRouter.handleMessage(event) \n };\n\n static addEventListeners() {\n if (this.configuredListeners) return;\n window.addEventListener('error', this.errorEventHandler);\n window.addEventListener('unhandledrejection', this.errorEventHandler);\n window.addEventListener('message', this.messageEventHandler);\n this.configuredListeners = true;\n\n // Test uncaught error handling\n // Promise.reject(new Error('[Benji Connect SDK] MessageRouter Test rejection'));\n // throw new Error('[Benji Connect SDK] MessageRouter Test error');\n }\n\n static removeEventListeners() {\n window.removeEventListener('error', this.errorEventHandler);\n window.removeEventListener('unhandledrejection', this.errorEventHandler);\n window.removeEventListener('message', this.messageEventHandler);\n this.configuredListeners = false;\n }\n\n static handleErrorMessage(event: Event) { \n switch(event.type) {\n case 'error': {\n const errorEvent = event as ErrorEvent;\n const error = errorEvent.error || new Error(errorEvent.message);\n // TODO: Track error\n break;\n }\n case 'unhandledrejection': {\n const rejectionEvent = event as PromiseRejectionEvent;\n const reason = rejectionEvent.reason instanceof Error\n ? rejectionEvent.reason\n : new Error(String(rejectionEvent.reason));\n // TODO: Track error (reason)\n break;\n }\n default: {\n console.error('[Benji Connect SDK] Received Unknown error message', event);\n break;\n }\n }\n }\n\n static handleMessage(event: MessageEvent<unknown>) {\n\n console.debug('[Benji Connect SDK] Received message', event);\n \n // Basic origin check\n const expectedOrigin: string = new URL(Endpoints.benji_connect_auth_url).origin;\n if (!event || event.origin !== expectedOrigin) {\n console.warn('[Benji Connect SDK] Skipped message, received event from unexpected origin', event.origin, expectedOrigin);\n return;\n }\n\n const raw = event.data;\n if (!raw || typeof raw !== 'object') return;\n\n const partial = raw as Partial<BenjiConnectEventMessage>;\n if (typeof partial.type !== 'string') return;\n \n const message = partial as BenjiConnectEventMessage;\n\n // TODO: Proper Constraint checks\n // if (Namespace && message.namespace && message.namespace !== Namespace) return;\n // if (Version != null && message.version != null && String(message.version) !== String(Version)) return;\n\n // TODO: Track message received either here or below but not both\n \n try {\n // Type events and route to callbacks\n switch (message.type) {\n\n case BenjiConnectEventType.AUTH_SUCCESS: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.AUTH_SUCCESS>;\n const callbackData = BenjiConnectCallbackMapperMap.AUTH_SUCCESS(connectMessage, connectMessage.data);\n // TODO: Track message received?\n this.onEvent?.(callbackData.type, callbackData.metadata); \n break;\n }\n\n case BenjiConnectEventType.FLOW_EXIT: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.FLOW_EXIT>;\n const callbackData = BenjiConnectCallbackMapperMap.FLOW_EXIT(connectMessage.data) as BenjiConnectOnExitData;\n // TODO: Track message received?\n this.onExit?.(callbackData.metadata);\n this.close?.();\n break;\n }\n\n case BenjiConnectEventType.FLOW_SUCCESS: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.FLOW_SUCCESS>;\n // TODO: Track message received?\n // Forward onSuccess when flow completes for connect, redeem and transfer \n const callbackData = BenjiConnectCallbackMapperMap.FLOW_SUCCESS(connectMessage.data) as BenjiConnectOnSuccessData;\n this.onSuccess?.(callbackData.token, callbackData.metadata); \n break;\n }\n\n case BenjiConnectEventType.ERROR: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.ERROR>;\n // TODO: Track message received?\n const callbackData = BenjiConnectCallbackMapperMap.ERROR(connectMessage.data);\n this.onError?.(callbackData.error, callbackData.error_id, callbackData.metadata);\n break;\n }\n\n default: {\n // Unknown event type (forward generically)\n const m = message as BenjiConnectEventMessage<any>;\n // TODO: Track message received?\n const callbackData = mapToOnEventData(m, m.data as BenjiConnectEventData);\n this.onEvent?.(callbackData.type, callbackData.metadata);\n break;\n }\n }\n } finally {\n // TODO: Any cleanup logic \n }\n }\n\n}","/// <reference path=\"./global.d.ts\" />\n\nimport { \n configureConfig, \n Endpoints\n} from './config';\n\nimport { \n type BenjiConnectConfig, \n BenjiConnectEnvironment\n} from './types/config';\n\nimport { \n buildContext, \n mapToConnectEnvironment \n} from './utils/config';\n\nimport { MessageRouter } from './router/message';\nimport { BenjiConnectExitTrigger } from './types/event';\n\nclass ConnectSDK {\n\n private sdkConfig: BenjiConnectConfig;\n private iframe: HTMLIFrameElement | null = null;\n private container: HTMLDivElement | null = null;\n\n constructor(config: BenjiConnectConfig) {\n\n this.sdkConfig = config;\n\n // Validations\n if (!this.sdkConfig.environment) throw new Error('Environment is required');\n if (!this.sdkConfig.token) throw new Error('Connect token is required');\n\n // Set internal config for environment based on consumer input at runtime\n const environment: BenjiConnectEnvironment = mapToConnectEnvironment(this.sdkConfig.environment);\n this.sdkConfig.environment = environment;\n configureConfig(environment);\n }\n\n async initialize() {\n \n // Configure message router for all postMessage from connect modal and error messages\n MessageRouter.configureMessageRouter({\n onSuccess: this.sdkConfig.onSuccess,\n onError: this.sdkConfig.onError,\n onExit: this.sdkConfig.onExit,\n onEvent: this.sdkConfig.onEvent,\n close: () => this.close()\n });\n\n // TODO: Tracker.configureWithOptions(sdkOptions);\n // TODO: Tracker.trackSDKInitialized();\n }\n\n async open() {\n await this.initialize();\n this.openUI();\n MessageRouter.addEventListeners();\n // TODO: Track SDK Opened Tracker.trackSDKOpened();\n }\n\n openUI() {\n if (this.iframe) return;\n\n // container\n this.container = document.createElement('div');\n Object.assign(this.container.style, {\n position: 'fixed', \n top: '0', \n left: '0', \n width: '100%', \n height: '100%',\n backgroundColor: 'rgba(0,0,0,0.5)', \n zIndex: '9999', \n display: 'flex',\n alignItems: 'center', \n justifyContent: 'center', \n overflow: 'auto'\n } as CSSStyleDeclaration);\n\n // iframe\n console.debug('[Connect SDK] endpoints', Endpoints);\n console.log('[Connect SDK] opeining URL', Endpoints.benji_connect_auth_url);\n const url = new URL(Endpoints.benji_connect_auth_url);\n const connectToken = this.sdkConfig.token;\n url.searchParams.set('connect_token', connectToken);\n url.searchParams.set('t', String(Date.now()));\n\n this.iframe = document.createElement('iframe');\n Object.assign(this.iframe.style, {\n position: 'relative', \n width: '400px', \n height: '645px',\n border: 'none', \n borderRadius: '20px', \n overflow: 'hidden'\n } as CSSStyleDeclaration);\n this.iframe.src = url.toString();\n\n this.container.appendChild(this.iframe);\n document.body.appendChild(this.container);\n\n this.container.addEventListener('click', (e) => {\n if (e.target === this.container) {\n // Trigger exit when user taps outside modal bounds\n this.sdkConfig.onExit?.({\n context: buildContext(),\n trigger: BenjiConnectExitTrigger.TAPPED_OUT_OF_BOUNDS\n });\n this.close();\n }\n });\n }\n\n close() {\n if (!this.iframe) return;\n document.body.removeChild(this.container!);\n MessageRouter.removeEventListeners();\n // TODO: Track SDK Closed Tracker.trackSDKClosed();\n this.iframe = null;\n this.container = null;\n }\n\n cleanup() {\n if (this.iframe) this.close();\n }\n\n ping() { return 'pong'; }\n}\n\nexport default ConnectSDK;","// Import the default export from connect-sdk.ts\nimport ConnectSDK from './connect-sdk';\nimport { BenjiConnectEventType } from './types/event';\n\n// Re-export both default and a named export so consumers can do either:\n// import ConnectSDK from '...'\n// import { ConnectSDK } from '...'\n// Also provide a default export (optional but helpful for JS users)\nexport default ConnectSDK;\nexport { ConnectSDK };\n\n// Expose Public types\nexport * from './types/config';\nexport { \n BenjiConnectErrorID,\n BenjiConnectErrorName,\n BenjiConnectEventType,\n BenjiConnectExitTrigger,\n} from './types/event';"],"mappings":"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","names":["endpoints","project_environment","endpoints","project_environment","endpoints","project_environment","BenjiConnectEnvironment","BenjiConnectMode","BenjiConnectEventType","BenjiConnectExitTrigger","BenjiConnectErrorName","data","data","data","data"]}
1
+ {"version":3,"sources":["../src/config/production.ts","../src/config/sandbox.ts","../src/config/development.ts","../src/config/local.defaults.ts","../src/types/config.ts","../src/utils/environment.ts","../src/config/index.ts","../src/utils/config.ts","../src/types/event.ts","../src/utils/auth.ts","../src/types/auth.ts","../src/utils/user.ts","../src/utils/transaction.ts","../src/types/router.ts","../src/router/message.ts","../src/connect-sdk.ts","../src/index.ts"],"sourcesContent":["export const project_environment: string = 'production';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url':'https://verifyapp.withbenji.com',\n 'benji_connect_auth_service_url' : 'https://authservice.withbenji.com'\n}","export const project_environment: string = 'sandbox';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url':'https://verifyapp-staging.withbenji.com',\n 'benji_connect_auth_service_url' : 'https://authservice-staging.withbenji.com'\n}","export const project_environment: string = 'development';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url': 'https://verifyapp-dev.withbenji.com',\n 'benji_connect_auth_service_url': 'https://authservice-dev.withbenji.com',\n};","/**\n * Build-time fallback when gitignored `local.ts` is absent (CI, fresh clones).\n * Same endpoints as development — not machine-specific localhost overrides.\n * Copy to `local.ts` locally for localhost URLs; see RELEASE.md.\n */\nexport const project_environment: string = 'local';\n\nexport const endpoints: Record<string, string> = {\n benji_connect_auth_url: 'https://verifyapp-dev.withbenji.com',\n benji_connect_auth_service_url: 'https://authservice-dev.withbenji.com',\n};\n","import { BenjiConnectAuthAction } from './auth';\nimport { BenjiConnectEventType } from './event';\nimport { BenjiConnectTransactionData } from './transaction';\nimport { BenjiConnectUserData } from './user';\n\nexport enum BenjiConnectEnvironment {\n LOCAL = 'local',\n DEVELOPMENT = 'development',\n SANDBOX = 'sandbox',\n PRODUCTION = 'production',\n}\n\nexport enum BenjiConnectMode {\n CONNECT = 1,\n TRANSFER = 3,\n REDEEM = 4,\n LOGIN = 5,\n}\n\nexport interface BenjiConnectConfig {\n environment: BenjiConnectEnvironment | string;\n token: string;\n mode?: BenjiConnectMode;\n onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n}\n\nexport interface BenjiConnectContext {\n namespace?: string; // e.g., 'benji-connect-sdk'\n version?: string | number; // e.g., '1.0.0'\n}\n\n/*\n * SDK config callback structures below\n */\n\nexport interface BenjiConnectOnSuccessData {\n token: string;\n metadata: BenjiConnectOnSuccessMetadata;\n}\n\nexport interface BenjiConnectOnErrorData {\n error: Error;\n error_id: string;\n metadata: BenjiConnectMetadata;\n}\n\nexport interface BenjiConnectOnExitData {\n metadata: BenjiConnectOnExitMetadata;\n}\n\nexport interface BenjiConnectOnEventData {\n type: BenjiConnectEventType;\n metadata: BenjiConnectMetadata;\n}\n\nexport interface BenjiConnectMetadata {\n context: { \n namespace: string; \n version: string \n };\n [k: string]: unknown;\n}\n\nexport interface BenjiConnectOnSuccessMetadata extends BenjiConnectMetadata {\n action?: BenjiConnectAuthAction;\n transaction_data?: BenjiConnectTransactionData | null;\n user_data?: BenjiConnectUserData;\n}\n\nexport interface BenjiConnectOnExitMetadata extends BenjiConnectMetadata {\n trigger?: string;\n step?: string;\n}","/** Hostnames that browsers use for loopback when typed literally in the URL bar. */\nexport const LOCAL_HOSTNAMES = ['localhost', '127.0.0.1', '::1', '[::1]'] as const;\n\nconst LOCAL_HOSTNAME_SET: ReadonlySet<string> = new Set(LOCAL_HOSTNAMES);\n\nexport function isLocalHost(\n hostname: string = typeof window !== 'undefined' ? window.location.hostname : ''\n): boolean {\n if (LOCAL_HOSTNAME_SET.has(hostname)) {\n return true;\n }\n // IPv4 loopback block 127.0.0.0/8 — covers 127.0.0.1 without listing every address\n if (hostname.startsWith('127.')) {\n return true;\n }\n return false;\n}\n","import * as productionConfig from './production';\nimport * as sandboxConfig from './sandbox';\nimport * as developmentConfig from './development';\nimport * as localConfig from './local';\nimport { BenjiConnectEnvironment } from '../types/config';\nimport { isLocalHost } from '../utils/environment';\n\nexport type EnvironmentConfigModule = {\n project_environment: string;\n endpoints: Record<string, string>;\n};\n\nconst env = typeof process !== 'undefined' ? process.env : {};\nlet data: EnvironmentConfigModule = developmentConfig;\ntype EndpointConfig = typeof developmentConfig.endpoints;\nexport let Endpoints: EndpointConfig = getEndpoints();\nexport let Environment = BenjiConnectEnvironment.DEVELOPMENT;\n\nexport function configureConfig(environment: BenjiConnectEnvironment) {\n if (environment == 'production') {\n console.log('[Connect SDK] configuring with environment production');\n data = productionConfig;\n } else if (environment == 'sandbox') {\n console.log('[Connect SDK] configuring with environment sandbox');\n data = sandboxConfig;\n } else if (environment == 'development') {\n console.log('[Connect SDK] configuring with environment development');\n data = developmentConfig;\n } else if (environment == 'local') {\n if (isLocalHost()) {\n console.log('[Connect SDK] configuring with environment local');\n data = localConfig;\n } else {\n console.log(\n '[Connect SDK] local environment requested on non-local host; using development'\n );\n data = developmentConfig;\n }\n }\n Endpoints = getEndpoints();\n Environment = getEnvironment();\n}\n\nfunction getEndpoints(): EndpointConfig {\n const entries = Object.entries(data.endpoints).map(([key, value]) => {\n const override = env?.[key] || value;\n return [key, override] as const;\n });\n return Object.fromEntries(entries) as EndpointConfig;\n}\n\nfunction getEnvironment(): BenjiConnectEnvironment {\n return data['project_environment'] as BenjiConnectEnvironment;\n}\n\nexport const Namespace = __NAMESPACE__;\nexport const Version = __VERSION__;\n","import { BenjiConnectEnvironment } from \"../types/config\";\nimport { isLocalHost } from \"./environment\";\n\nexport const buildContext = () => ({\n namespace: typeof __NAMESPACE__ !== 'undefined' && __NAMESPACE__ ? __NAMESPACE__ : 'benji-connect-sdk',\n version: typeof __VERSION__ !== 'undefined' && __VERSION__ ? String(__VERSION__) : '0.0.0',\n});\n\nexport function isBenjiConnectEnvironment(\n environment: unknown\n): environment is BenjiConnectEnvironment {\n return (\n environment === BenjiConnectEnvironment.LOCAL ||\n environment === BenjiConnectEnvironment.DEVELOPMENT ||\n environment === BenjiConnectEnvironment.SANDBOX ||\n environment === BenjiConnectEnvironment.PRODUCTION\n );\n}\n\nexport function mapToConnectEnvironment(\n environment: BenjiConnectEnvironment | string\n): BenjiConnectEnvironment {\n\n if (isBenjiConnectEnvironment(environment)) return environment;\n\n const environments: Record<string, BenjiConnectEnvironment> = {\n local: BenjiConnectEnvironment.LOCAL,\n development: BenjiConnectEnvironment.DEVELOPMENT,\n sandbox: BenjiConnectEnvironment.SANDBOX,\n production: BenjiConnectEnvironment.PRODUCTION,\n };\n const mapped = environments[environment];\n if (mapped) return mapped;\n\n const defaultEnvironment = isLocalHost()\n ? BenjiConnectEnvironment.LOCAL\n : BenjiConnectEnvironment.DEVELOPMENT;\n console.warn(`[Benji Connect SDK] ${environment} not valid environment defaulting to ${defaultEnvironment}`);\n\n return defaultEnvironment;\n}","import { BenjiConnectAuthAction } from \"./auth\";\n\n// Known event names coming from the SDK transport (postMessage)\nexport enum BenjiConnectEventType {\n AUTH_SUCCESS = 'AUTH_SUCCESS',\n FLOW_EXIT = 'FLOW_EXIT',\n FLOW_SUCCESS = 'FLOW_SUCCESS',\n EVENT = 'EVENT',\n ERROR = 'ERROR',\n}\n\n// Known exit trigger types coming from the SDK transport (postMessage)\nexport enum BenjiConnectExitTrigger {\n ACTION_BUTTON_CLICKED = 'ACTION_BUTTON_CLICKED',\n BACK_TO_MERCHANT_CLICKED = 'BACK_TO_MERCHANT_CLICKED', // deprecated\n CLOSE_BUTTON_CLICKED = 'CLOSE_BUTTON_CLICKED',\n TAPPED_OUT_OF_BOUNDS = 'TAPPED_OUT_OF_BOUNDS'\n}\n\nexport enum BenjiConnectErrorName {\n UNEXPECTED_ERROR = 'unexpected_error',\n PARTNER_CONNECT_ERROR = 'partner_connect_error'\n}\n\nexport type BenjiConnectErrorID = '400' | '500'; // Placeholders for now\n\n// Transport-layer token (raw, unprocessed from postMessage)\nexport interface BenjiConnectEventToken {\n access_token?: string;\n refresh_token?: string;\n expires_at?: string | number;\n exchange_token?: string;\n}\n\nexport interface BenjiConnectEventUserData {\n user: {\n id: number\n first_name: string\n last_name: string\n uuid?: string\n }\n status: BenjiConnectEventUserStatusData\n extra_data?: {\n total_rewards_earned?: number\n total_rewards_redeemed?: number\n created_date?: string\n }\n}\n\nexport interface BenjiConnectEventTransactionData {\n action: string;\n amount: number;\n trigger_event_id: string;\n trigger_name: string;\n}\n\nexport interface BenjiConnectEventUserStatusData {\n status_id: string\n num_of_rewards: number\n reward_status: string\n partner_status_tier_id?: number\n}\n\n// Basic structure for Benji Connect SDK typed events\nexport interface BenjiConnectEvent {\n type: BenjiConnectEventType;\n data?: BenjiConnectEventData;\n}\n\nexport interface BenjiConnectEventData {\n [k: string]: unknown;\n}\n\nexport interface BenjiConnectEventMessage<K extends BenjiConnectEventType = BenjiConnectEventType> {\n type: K; // discriminant\n data: BenjiConnectEventDataMap[K];\n}\n\nexport interface BenjiConnectAuthSuccessEventData {\n action: BenjiConnectAuthAction;\n metadata?: BenjiConnectEventUserData;\n token?: BenjiConnectEventToken,\n transaction?: BenjiConnectEventTransactionData;\n}\n\nexport interface BenjiConnectFlowExitEventData {\n step: string;\n trigger: BenjiConnectExitTrigger;\n}\n\nexport interface BenjiConnectErrorEventData {\n error: Error;\n}\n\n// Canonical event map \nexport type BenjiConnectEventDataMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: BenjiConnectAuthSuccessEventData;\n [BenjiConnectEventType.FLOW_EXIT]: BenjiConnectFlowExitEventData;\n [BenjiConnectEventType.FLOW_SUCCESS]: BenjiConnectAuthSuccessEventData;\n [BenjiConnectEventType.EVENT]: BenjiConnectEventData;\n [BenjiConnectEventType.ERROR]: BenjiConnectErrorEventData;\n\n // Optional catch-all fan-out\n '*': { type: BenjiConnectEventType; data: BenjiConnectEventDataMap[BenjiConnectEventType] };\n};","import { BenjiConnectAuthToken } from '../types/auth';\nimport { BenjiConnectEventToken, BenjiConnectEventType } from '../types/event';\n\nconst CONNECT_MESSAGE_TYPES = new Set<string>(Object.values(BenjiConnectEventType));\n\nexport function isConnectMessageType(data: unknown): boolean {\n if (!data || typeof data !== 'object') return false;\n const type = (data as { type?: string }).type;\n return typeof type === 'string' && CONNECT_MESSAGE_TYPES.has(type);\n}\n\nexport const extractAccessToken = (token?: BenjiConnectEventToken | string): string =>\n typeof token === 'string' ? token : (token?.access_token ?? '');\n\nexport const extractExchangeToken = (token?: BenjiConnectEventToken | string): string =>\n typeof token === 'string' ? token : (token?.exchange_token ?? '');\n\nexport const mapEventToConnectToken = (data?: BenjiConnectEventToken): BenjiConnectAuthToken => ({\n access_token: data?.access_token ?? '',\n refresh_token: data?.refresh_token ?? '',\n expires_at: data?.expires_at ?? ''\n});\n","export enum BenjiConnectAuthAction {\n Connect = 'connect',\n Transfer = 'transfer',\n Redeem = 'redeem',\n Login = 'login',\n}\n\nexport interface BenjiConnectAuthToken {\n access_token: string;\n refresh_token: string;\n expires_at?: string | number;\n}\n\nexport interface BenjiConnectAuth {\n accessToken: string;\n configToken: string;\n}","import { BenjiConnectEventUserData } from \"../types/event\";\nimport { BenjiConnectUserData } from \"../types/user\";\n\nexport function isConnectUserData (\n input: BenjiConnectUserData | Record<string, any>\n): boolean {\n if (!input) return false;\n const data = mapEventToConnectUserData(input);\n if (data.user.id != 0) return true;\n return false;\n}\n\nexport const mapEventToConnectUserData = (\n data?: BenjiConnectEventUserData | Record<string, any>\n): BenjiConnectUserData => ({\n user: {\n id: data?.user?.id ?? 0,\n first_name: data?.user?.first_name ?? '',\n last_name: data?.user?.last_name ?? '',\n uuid: data?.user?.uuid \n },\n status: {\n status_id: data?.status?.status_id ?? '',\n num_of_rewards: data?.status?.num_of_rewards ?? 0,\n reward_status: data?.status?.reward_status ?? '',\n partner_status_tier_id: data?.status?.partner_status_tier_id\n },\n extra_data: {\n total_rewards_earned: data?.extra_data?.total_rewards_earned,\n total_rewards_redeemed: data?.extra_data?.total_rewards_redeemed,\n created_date: data?.extra_data?.created_date\n }\n});\n","import { BenjiConnectEventTransactionData } from \"../types/event\";\nimport { BenjiConnectTransactionData } from \"../types/transaction\";\n\nexport const mapEventToConnectTransactionData = (data?: BenjiConnectEventTransactionData): BenjiConnectTransactionData | null => {\n if (!data) return null;\n return {\n action: data.action,\n amount: data.amount,\n trigger_event_id: data.trigger_event_id,\n trigger_name: data.trigger_name\n };\n}","import { \n BenjiConnectMetadata, \n BenjiConnectOnErrorData, \n BenjiConnectOnEventData, \n BenjiConnectOnExitData, \n BenjiConnectOnExitMetadata, \n BenjiConnectOnSuccessData, \n BenjiConnectOnSuccessMetadata \n} from './config';\n\nimport { \n extractAccessToken,\n extractExchangeToken,\n mapEventToConnectToken \n} from '../utils/auth';\n\nimport { BenjiConnectAuthAction } from './auth';\n\nimport { buildContext } from '../utils/config';\nimport { mapEventToConnectUserData } from '../utils/user';\n\nimport { \n BenjiConnectAuthSuccessEventData,\n BenjiConnectErrorEventData, \n BenjiConnectEventDataMap, \n BenjiConnectEventMessage, \n BenjiConnectEventType, \n BenjiConnectFlowExitEventData\n} from './event';\nimport { mapEventToConnectTransactionData } from '../utils/transaction';\n\nexport type MessageRouterConfig = {\n onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n close?: () => void;\n};\n\nexport const mapToAuthSuccessData = (\n message: BenjiConnectEventMessage<BenjiConnectEventType.AUTH_SUCCESS>,\n data: BenjiConnectAuthSuccessEventData\n): BenjiConnectOnEventData => {\n return {\n type: message.type,\n metadata: {\n context: buildContext(),\n action: data.action,\n token: mapEventToConnectToken(data.token),\n transactionData: mapEventToConnectTransactionData(data.transaction),\n userData: mapEventToConnectUserData(data.metadata)\n }\n };\n};\n\nexport const mapToOnExitData = (data: BenjiConnectFlowExitEventData): BenjiConnectOnExitData => {\n return {\n metadata: {\n context: buildContext(),\n step: data.step,\n trigger: data.trigger\n }\n };\n};\n\nexport const mapToOnSuccessData = (data: BenjiConnectAuthSuccessEventData): BenjiConnectOnSuccessData => {\n \n const token = data.action === BenjiConnectAuthAction.Login\n ? extractExchangeToken(data.token)\n : extractAccessToken(data.token);\n\n let metadata: BenjiConnectOnSuccessMetadata = {\n context: buildContext(),\n action: data.action,\n user_data: data.metadata\n };\n\n if (data.transaction) {\n metadata.transaction_data = data.transaction;\n }\n \n return { token, metadata };\n};\n\nexport const mapToOnErrorData = (data: BenjiConnectErrorEventData): BenjiConnectOnErrorData => {\n return {\n error: data.error,\n error_id: '500', // Placeholder\n metadata: {\n context: buildContext()\n }\n };\n};\n\nexport const mapToOnEventData = <K extends BenjiConnectEventType>(\n message: BenjiConnectEventMessage<K>,\n data: BenjiConnectEventDataMap[K]\n): BenjiConnectOnEventData => {\n return {\n type: message.type,\n metadata: {\n context: buildContext(),\n ...data\n }\n };\n};\n\nexport type BenjiConnectCallbackDataMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: BenjiConnectOnEventData;\n [BenjiConnectEventType.FLOW_EXIT]: BenjiConnectOnExitData;\n [BenjiConnectEventType.FLOW_SUCCESS]: BenjiConnectOnSuccessData;\n [BenjiConnectEventType.ERROR]: BenjiConnectOnErrorData;\n [BenjiConnectEventType.EVENT]: BenjiConnectOnEventData;\n '*': BenjiConnectOnEventData;\n};\n\nexport const BenjiConnectCallbackMapperMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: mapToAuthSuccessData,\n [BenjiConnectEventType.FLOW_EXIT]: mapToOnExitData,\n [BenjiConnectEventType.FLOW_SUCCESS]: mapToOnSuccessData,\n [BenjiConnectEventType.ERROR]: mapToOnErrorData,\n [BenjiConnectEventType.EVENT]: mapToOnEventData,\n} as const;\n\n","import { \n Endpoints\n} from '../config';\n\nimport { BenjiConnectMode } from '../types/config';\nimport {\n BenjiConnectEventType,\n type BenjiConnectEventMessage,\n} from '../types/event';\n\nimport type {\n BenjiConnectOnSuccessData,\n BenjiConnectOnExitData,\n BenjiConnectMetadata,\n BenjiConnectOnSuccessMetadata,\n BenjiConnectOnExitMetadata\n} from '../types/config';\n\nimport {\n BenjiConnectCallbackMapperMap,\n MessageRouterConfig,\n mapToOnEventData,\n} from '../types/router';\nimport { isConnectMessageType } from '../utils/auth';\n\nexport class MessageRouter {\n\n static configuredListeners = false;\n static onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n static onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n static onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n static onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n static close?: () => void;\n\n static mode: BenjiConnectMode = BenjiConnectMode.CONNECT;\n\n static configureMessageRouter(config: MessageRouterConfig) {\n this.onSuccess = config.onSuccess;\n this.onError = config.onError;\n this.onExit = config.onExit;\n this.onEvent = config.onEvent;\n this.close = config.close;\n }\n\n static setMode(mode: BenjiConnectMode) {\n this.mode = mode;\n }\n\n static errorEventHandler = (event: Event) => { \n return MessageRouter.handleErrorMessage(event) \n };\n\n static messageEventHandler = (event: MessageEvent<unknown>) => { \n return MessageRouter.handleMessage(event) \n };\n\n static addEventListeners() {\n if (this.configuredListeners) return;\n window.addEventListener('error', this.errorEventHandler);\n window.addEventListener('unhandledrejection', this.errorEventHandler);\n window.addEventListener('message', this.messageEventHandler);\n this.configuredListeners = true;\n }\n\n static removeEventListeners() {\n window.removeEventListener('error', this.errorEventHandler);\n window.removeEventListener('unhandledrejection', this.errorEventHandler);\n window.removeEventListener('message', this.messageEventHandler);\n this.configuredListeners = false;\n this.mode = BenjiConnectMode.CONNECT;\n }\n\n static handleErrorMessage(event: Event) { \n switch(event.type) {\n case 'error': {\n const errorEvent = event as ErrorEvent;\n const error = errorEvent.error || new Error(errorEvent.message);\n // TODO: Track error\n break;\n }\n case 'unhandledrejection': {\n const rejectionEvent = event as PromiseRejectionEvent;\n const reason = rejectionEvent.reason instanceof Error\n ? rejectionEvent.reason\n : new Error(String(rejectionEvent.reason));\n // TODO: Track error (reason)\n break;\n }\n default: {\n console.error('[Benji Connect SDK] Received Unknown error message', event);\n break;\n }\n }\n }\n\n static handleMessage(event: MessageEvent<unknown>) {\n if (!isConnectMessageType(event.data)) return;\n\n const expectedOrigin: string = new URL(Endpoints.benji_connect_auth_url).origin;\n if (!event || event.origin !== expectedOrigin) {\n console.warn('[Benji Connect SDK] Skipped message, received event from unexpected origin', event.origin, expectedOrigin);\n return;\n }\n\n const raw = event.data;\n if (!raw || typeof raw !== 'object') return;\n\n const partial = raw as Partial<BenjiConnectEventMessage>;\n if (typeof partial.type !== 'string') return;\n \n const message = partial as BenjiConnectEventMessage;\n\n try {\n switch (message.type) {\n\n case BenjiConnectEventType.AUTH_SUCCESS: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.AUTH_SUCCESS>;\n const callbackData = BenjiConnectCallbackMapperMap.AUTH_SUCCESS(connectMessage, connectMessage.data);\n this.onEvent?.(callbackData.type, callbackData.metadata); \n break;\n }\n\n case BenjiConnectEventType.FLOW_EXIT: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.FLOW_EXIT>;\n const callbackData = BenjiConnectCallbackMapperMap.FLOW_EXIT(connectMessage.data) as BenjiConnectOnExitData;\n this.onExit?.(callbackData.metadata);\n this.close?.();\n break;\n }\n\n case BenjiConnectEventType.FLOW_SUCCESS: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.FLOW_SUCCESS>;\n const callbackData = BenjiConnectCallbackMapperMap.FLOW_SUCCESS(connectMessage.data) as BenjiConnectOnSuccessData;\n this.onSuccess?.(callbackData.token, callbackData.metadata);\n if (this.mode === BenjiConnectMode.LOGIN) {\n this.close?.();\n }\n break;\n }\n\n case BenjiConnectEventType.ERROR: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.ERROR>;\n const callbackData = BenjiConnectCallbackMapperMap.ERROR(connectMessage.data);\n this.onError?.(callbackData.error, callbackData.error_id, callbackData.metadata);\n break;\n }\n\n case BenjiConnectEventType.EVENT: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.EVENT>;\n const callbackData = mapToOnEventData(connectMessage, connectMessage.data);\n this.onEvent?.(callbackData.type, callbackData.metadata);\n break;\n }\n\n }\n } finally {\n // TODO: Any cleanup logic \n }\n }\n\n}\n","/// <reference path=\"./global.d.ts\" />\n\nimport { \n configureConfig, \n Endpoints\n} from './config';\n\nimport { \n type BenjiConnectConfig, \n BenjiConnectEnvironment,\n BenjiConnectMode,\n} from './types/config';\n\nimport { \n buildContext, \n mapToConnectEnvironment \n} from './utils/config';\n\nimport { MessageRouter } from './router/message';\nimport { BenjiConnectExitTrigger } from './types/event';\n\nconst IFRAME_STYLE: CSSStyleDeclaration = {\n position: 'relative',\n width: '400px',\n height: '645px',\n border: 'none',\n borderRadius: '20px',\n overflow: 'hidden',\n} as CSSStyleDeclaration;\n\nclass ConnectSDK {\n\n private sdkConfig: BenjiConnectConfig;\n private iframe: HTMLIFrameElement | null = null;\n private container: HTMLDivElement | null = null;\n\n constructor(config: BenjiConnectConfig) {\n\n this.sdkConfig = config;\n\n // Validations\n if (!this.sdkConfig.environment) throw new Error('Environment is required');\n if (!this.sdkConfig.token) throw new Error('Connect token is required');\n\n // Set internal config for environment based on consumer input at runtime\n const environment: BenjiConnectEnvironment = mapToConnectEnvironment(this.sdkConfig.environment);\n this.sdkConfig.environment = environment;\n configureConfig(environment);\n }\n\n async initialize() {\n \n // Configure message router for all postMessage from connect modal and error messages\n MessageRouter.configureMessageRouter({\n onSuccess: this.sdkConfig.onSuccess,\n onError: this.sdkConfig.onError,\n onExit: this.sdkConfig.onExit,\n onEvent: this.sdkConfig.onEvent,\n close: () => this.close(),\n });\n\n // TODO: Tracker.configureWithOptions(sdkOptions);\n // TODO: Tracker.trackSDKInitialized();\n }\n\n async open() {\n await this.initialize();\n this.openUI();\n\n MessageRouter.setMode(this.sdkConfig.mode ?? BenjiConnectMode.CONNECT);\n\n MessageRouter.addEventListeners();\n // TODO: Track SDK Opened Tracker.trackSDKOpened();\n }\n\n openUI() {\n if (this.iframe) return;\n\n // container\n this.container = document.createElement('div');\n Object.assign(this.container.style, {\n position: 'fixed', \n top: '0', \n left: '0', \n width: '100%', \n height: '100%',\n backgroundColor: 'rgba(0,0,0,0.5)',\n zIndex: '9999', \n display: 'flex',\n alignItems: 'center', \n justifyContent: 'center', \n overflow: 'auto',\n } as CSSStyleDeclaration);\n\n // iframe\n console.debug('[Connect SDK] endpoints', Endpoints);\n console.log('[Connect SDK] opeining URL', Endpoints.benji_connect_auth_url);\n const url = new URL(Endpoints.benji_connect_auth_url);\n const connectToken = this.sdkConfig.token;\n url.searchParams.set('connect_token', connectToken);\n url.searchParams.set('t', String(Date.now()));\n if (this.sdkConfig.mode != null) {\n url.searchParams.set('mode', String(this.sdkConfig.mode));\n }\n\n this.iframe = document.createElement('iframe');\n Object.assign(this.iframe.style, IFRAME_STYLE);\n this.iframe.src = url.toString();\n\n this.container.appendChild(this.iframe);\n document.body.appendChild(this.container);\n\n this.container.addEventListener('click', (e) => {\n if (e.target === this.container) {\n // Trigger exit when user taps outside modal bounds\n this.sdkConfig.onExit?.({\n context: buildContext(),\n trigger: BenjiConnectExitTrigger.TAPPED_OUT_OF_BOUNDS\n });\n this.close();\n }\n });\n }\n\n close() {\n if (!this.iframe) return;\n\n if (this.container?.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n MessageRouter.removeEventListeners();\n // TODO: Track SDK Closed Tracker.trackSDKClosed();\n this.iframe = null;\n this.container = null;\n }\n\n cleanup() {\n if (this.iframe) this.close();\n }\n\n ping() { return 'pong'; }\n}\n\nexport default ConnectSDK;\n","// Import the default export from connect-sdk.ts\nimport ConnectSDK from './connect-sdk';\nimport { BenjiConnectEventType } from './types/event';\n\n// Re-export both default and a named export so consumers can do either:\n// import ConnectSDK from '...'\n// import { ConnectSDK } from '...'\n// Also provide a default export (optional but helpful for JS users)\nexport default ConnectSDK;\nexport { ConnectSDK };\n\n// Expose Public types\nexport * from './types/config';\nexport { BenjiConnectAuthAction } from './types/auth';\nexport { \n BenjiConnectErrorID,\n BenjiConnectErrorName,\n BenjiConnectEventType,\n BenjiConnectExitTrigger,\n} from './types/event';"],"mappings":"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","names":["endpoints","project_environment","endpoints","project_environment","endpoints","project_environment","BenjiConnectEnvironment","BenjiConnectMode","BenjiConnectEventType","BenjiConnectExitTrigger","BenjiConnectErrorName","data","BenjiConnectAuthAction","data","data","data"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@benji-money/connect-sdk",
3
- "version": "1.0.10",
3
+ "version": "1.1.0-beta.1",
4
4
  "description": "Benji Connect SDK for authentication and verification",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -1,14 +0,0 @@
1
- // These are compile-time constants replaced by tsup's `define` option.
2
- // Declaring them globally prevents TypeScript errors.
3
-
4
-
5
- declare global {
6
- const __VERSION__: string;
7
- const __NAMESPACE__: string;
8
-
9
- // Global browser exposure for UMD builds
10
- interface Window {
11
- // SDK main class (UMD builds attach this)
12
- ConnectSDK?: any;
13
- }
14
- }