@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.
- package/dist/connect-sdk.umd.global.js +55 -18
- package/dist/connect-sdk.umd.global.js.map +1 -1
- package/dist/index.cjs +63 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -3
- package/dist/index.d.ts +6 -3
- package/dist/index.js +62 -24
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/connect-sdk.umd.d.ts +0 -14
|
@@ -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.
|
|
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
|
-
|
|
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
|
-
(
|
|
347
|
+
(_f = this.onError) == null ? void 0 : _f.call(this, callbackData.error, callbackData.error_id, callbackData.metadata);
|
|
321
348
|
break;
|
|
322
349
|
}
|
|
323
|
-
|
|
324
|
-
const
|
|
325
|
-
const callbackData = mapToOnEventData(
|
|
326
|
-
(
|
|
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
|
-
|
|
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":"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","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__ */ ((
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return
|
|
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.
|
|
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
|
-
|
|
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
|
-
(
|
|
409
|
+
(_f = this.onError) == null ? void 0 : _f.call(this, callbackData.error, callbackData.error_id, callbackData.metadata);
|
|
382
410
|
break;
|
|
383
411
|
}
|
|
384
|
-
|
|
385
|
-
const
|
|
386
|
-
const callbackData = mapToOnEventData(
|
|
387
|
-
(
|
|
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
|
-
|
|
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,
|
package/dist/index.cjs.map
CHANGED
|
@@ -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__ */ ((
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return
|
|
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.
|
|
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
|
-
|
|
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
|
-
(
|
|
382
|
+
(_f = this.onError) == null ? void 0 : _f.call(this, callbackData.error, callbackData.error_id, callbackData.metadata);
|
|
356
383
|
break;
|
|
357
384
|
}
|
|
358
|
-
|
|
359
|
-
const
|
|
360
|
-
const callbackData = mapToOnEventData(
|
|
361
|
-
(
|
|
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
|
-
|
|
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":";;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,sBAA8B;AAEpC,IAAM,YAAoC;AAAA,EAC/C,0BAAyB;AAAA,EACzB,kCAAmC;AACrC;;;ACLA;AAAA;AAAA,mBAAAA;AAAA,EAAA,2BAAAC;AAAA;AAAO,IAAMA,uBAA8B;AAEpC,IAAMD,aAAoC;AAAA,EAC/C,0BAAyB;AAAA,EACzB,kCAAmC;AACrC;;;ACLA;AAAA;AAAA,mBAAAE;AAAA,EAAA,2BAAAC;AAAA;AAAO,IAAMA,uBAA8B;AAEpC,IAAMD,aAAoC;AAAA,EAC/C,0BAA0B;AAAA,EAC1B,kCAAkC;AACpC;;;ACLA;AAAA;AAAA,mBAAAE;AAAA,EAAA,2BAAAC;AAAA;AAKO,IAAMA,uBAA8B;AAEpC,IAAMD,aAAoC;AAAA,EAC/C,wBAAwB;AAAA,EACxB,gCAAgC;AAClC;;;ACLO,IAAK,0BAAL,kBAAKE,6BAAL;AACL,EAAAA,yBAAA,WAAQ;AACR,EAAAA,yBAAA,iBAAc;AACd,EAAAA,yBAAA,aAAU;AACV,EAAAA,yBAAA,gBAAa;AAJH,SAAAA;AAAA,GAAA;AAOL,IAAK,mBAAL,kBAAKC,sBAAL;AACL,EAAAA,oCAAA,aAAU,KAAV;AACA,EAAAA,oCAAA,cAAW,KAAX;AACA,EAAAA,oCAAA,YAAS,KAAT;AAHU,SAAAA;AAAA,GAAA;;;ACXL,IAAM,kBAAkB,CAAC,aAAa,aAAa,OAAO,OAAO;AAExE,IAAM,qBAA0C,IAAI,IAAI,eAAe;AAEhE,SAAS,YACd,WAAmB,OAAO,WAAW,cAAc,OAAO,SAAS,WAAW,IACrE;AACT,MAAI,mBAAmB,IAAI,QAAQ,GAAG;AACpC,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,WAAW,MAAM,GAAG;AAC/B,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ACJA,IAAM,MAAM,OAAO,YAAY,cAAc,QAAQ,MAAM,CAAC;AAC5D,IAAI,OAAgC;AAE7B,IAAI,YAA4B,aAAa;AAC7C,IAAI;AAEJ,SAAS,gBAAgB,aAAsC;AACpE,MAAI,eAAe,cAAc;AAC/B,YAAQ,IAAI,uDAAuD;AACnE,WAAO;AAAA,EACT,WAAW,eAAe,WAAW;AACnC,YAAQ,IAAI,oDAAoD;AAChE,WAAO;AAAA,EACT,WAAW,eAAe,eAAe;AACvC,YAAQ,IAAI,wDAAwD;AACpE,WAAO;AAAA,EACT,WAAW,eAAe,SAAS;AACjC,QAAI,YAAY,GAAG;AACjB,cAAQ,IAAI,kDAAkD;AAC9D,aAAO;AAAA,IACT,OAAO;AACL,cAAQ;AAAA,QACN;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,cAAY,aAAa;AACzB,gBAAc,eAAe;AAC/B;AAEA,SAAS,eAA+B;AACtC,QAAM,UAAU,OAAO,QAAQ,KAAK,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACnE,UAAM,YAAW,2BAAM,SAAQ;AAC/B,WAAO,CAAC,KAAK,QAAQ;AAAA,EACvB,CAAC;AACD,SAAO,OAAO,YAAY,OAAO;AACnC;AAEA,SAAS,iBAA0C;AACjD,SAAO,KAAK,qBAAqB;AACnC;;;AClDO,IAAM,eAAe,OAAO;AAAA,EACjC,WAAmD,sBAAgB,sBAAgB;AAAA,EACnF,SAA+C,WAAc,OAAO,QAAW,IAAI;AACrF;AAEO,SAAS,0BACd,aACwC;AACxC,SACE,uCACA,mDACA,2CACA;AAEJ;AAEO,SAAS,wBACd,aACyB;AAEzB,MAAI,0BAA0B,WAAW,EAAG,QAAO;AAEnD,QAAM,eAAwD;AAAA,IAC5D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,SAAS,aAAa,WAAW;AACvC,MAAI,OAAQ,QAAO;AAEnB,QAAM,qBAAqB,YAAY;AAGvC,UAAQ,KAAK,uBAAuB,WAAW,wCAAwC,kBAAkB,EAAE;AAE3G,SAAO;AACT;;;ACrCO,IAAK,wBAAL,kBAAKC,2BAAL;AACL,EAAAA,uBAAA,kBAAe;AACf,EAAAA,uBAAA,eAAY;AACZ,EAAAA,uBAAA,kBAAe;AACf,EAAAA,uBAAA,WAAQ;AACR,EAAAA,uBAAA,WAAQ;AALE,SAAAA;AAAA,GAAA;AASL,IAAK,0BAAL,kBAAKC,6BAAL;AACL,EAAAA,yBAAA,2BAAwB;AACxB,EAAAA,yBAAA,8BAA2B;AAC3B,EAAAA,yBAAA,0BAAuB;AACvB,EAAAA,yBAAA,0BAAuB;AAJb,SAAAA;AAAA,GAAA;AAOL,IAAK,wBAAL,kBAAKC,2BAAL;AACL,EAAAA,uBAAA,sBAAmB;AACnB,EAAAA,uBAAA,2BAAwB;AAFd,SAAAA;AAAA,GAAA;;;AChBL,IAAM,qBAAqB,CAAC,UAAiD;AAHpF;AAIE,gBAAO,UAAU,WAAW,SAAS,oCAAO,iBAAP,YAAuB;AAAA;AAEvD,IAAM,yBAAyB,CAACC,UAAsD;AAN7F;AAMiG;AAAA,IAC/F,eAAc,KAAAA,SAAA,gBAAAA,MAAM,iBAAN,YAAsB;AAAA,IACpC,gBAAe,KAAAA,SAAA,gBAAAA,MAAM,kBAAN,YAAuB;AAAA,IACtC,aAAY,KAAAA,SAAA,gBAAAA,MAAM,eAAN,YAAoB;AAAA,EAClC;AAAA;;;ACEO,IAAM,4BAA4B,CACvCC,UACsB;AAdxB;AAc4B;AAAA,IAC1B,MAAM;AAAA,MACJ,KAAI,WAAAA,SAAA,gBAAAA,MAAM,SAAN,mBAAY,OAAZ,YAAkB;AAAA,MACtB,aAAY,WAAAA,SAAA,gBAAAA,MAAM,SAAN,mBAAY,eAAZ,YAA0B;AAAA,MACtC,YAAW,WAAAA,SAAA,gBAAAA,MAAM,SAAN,mBAAY,cAAZ,YAAyB;AAAA,MACpC,OAAM,KAAAA,SAAA,gBAAAA,MAAM,SAAN,mBAAY;AAAA,IACpB;AAAA,IACA,QAAQ;AAAA,MACN,YAAW,WAAAA,SAAA,gBAAAA,MAAM,WAAN,mBAAc,cAAd,YAA2B;AAAA,MACtC,iBAAgB,WAAAA,SAAA,gBAAAA,MAAM,WAAN,mBAAc,mBAAd,YAAgC;AAAA,MAChD,gBAAe,WAAAA,SAAA,gBAAAA,MAAM,WAAN,mBAAc,kBAAd,YAA+B;AAAA,MAC9C,yBAAwB,KAAAA,SAAA,gBAAAA,MAAM,WAAN,mBAAc;AAAA,IACxC;AAAA,IACA,YAAY;AAAA,MACV,uBAAsB,KAAAA,SAAA,gBAAAA,MAAM,eAAN,mBAAkB;AAAA,MACxC,yBAAwB,KAAAA,SAAA,gBAAAA,MAAM,eAAN,mBAAkB;AAAA,MAC1C,eAAc,KAAAA,SAAA,gBAAAA,MAAM,eAAN,mBAAkB;AAAA,IAClC;AAAA,EACF;AAAA;;;AC7BO,IAAM,mCAAmC,CAACC,UAAgF;AAC7H,MAAI,CAACA,MAAM,QAAO;AAClB,SAAO;AAAA,IACH,QAAQA,MAAK;AAAA,IACb,QAAQA,MAAK;AAAA,IACb,kBAAkBA,MAAK;AAAA,IACvB,cAAcA,MAAK;AAAA,EACvB;AACJ;;;ACqCO,IAAM,uBAAuB,CAClC,SACAC,UAC4B;AAC5B,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,UAAU;AAAA,MACR,SAAS,aAAa;AAAA,MACtB,QAAQA,MAAK;AAAA,MACb,OAAO,uBAAuBA,MAAK,KAAK;AAAA,MACxC,iBAAiB,iCAAiCA,MAAK,WAAW;AAAA,MAClE,UAAU,0BAA0BA,MAAK,QAAQ;AAAA,IACnD;AAAA,EACF;AACF;AAEO,IAAM,kBAAkB,CAACA,UAAgE;AAC9F,SAAO;AAAA,IACJ,UAAU;AAAA,MACT,SAAS,aAAa;AAAA,MACtB,MAAMA,MAAK;AAAA,MACX,SAASA,MAAK;AAAA,IAChB;AAAA,EACF;AACF;AAEO,IAAM,qBAAqB,CAACA,UAAsE;AAEvG,QAAM,QAAQ,mBAAmBA,MAAK,KAAK;AAE3C,MAAI,WAA0C;AAAA,IAC5C,SAAS,aAAa;AAAA,IACtB,QAAQA,MAAK;AAAA,IACb,WAAWA,MAAK;AAAA,EAClB;AAEA,MAAIA,MAAK,aAAa;AACpB,aAAS,mBAAmBA,MAAK;AAAA,EACnC;AAEA,SAAO,EAAE,OAAO,SAAS;AAC3B;AAEO,IAAM,mBAAmB,CAACA,UAA8D;AAC7F,SAAO;AAAA,IACL,OAAOA,MAAK;AAAA,IACZ,UAAU;AAAA;AAAA,IACV,UAAU;AAAA,MACR,SAAS,aAAa;AAAA,IACxB;AAAA,EACF;AACF;AAEO,IAAM,mBAAmB,CAC9B,SACAA,UAC4B;AAC5B,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,UAAU;AAAA,MACR,SAAS,aAAa;AAAA,MACtB,GAAGA;AAAA,IACL;AAAA,EACF;AACF;AAWO,IAAM,gCAAgC;AAAA,EAC3C,kCAAmC,GAAG;AAAA,EACtC,4BAAgC,GAAG;AAAA,EACnC,kCAAmC,GAAG;AAAA,EACtC,oBAA4B,GAAG;AAAA,EAC/B,oBAA4B,GAAG;AACjC;;;ACzGO,IAAM,iBAAN,MAAM,eAAc;AAAA,EAqBzB,OAAO,uBAAuB,QAA6B;AACzD,SAAK,YAAY,OAAO;AACxB,SAAK,UAAU,OAAO;AACtB,SAAK,SAAS,OAAO;AACrB,SAAK,UAAU,OAAO;AACtB,SAAK,QAAQ,OAAO;AAAA,EACtB;AAAA,EAUA,OAAO,oBAAoB;AACzB,QAAI,KAAK,oBAAqB;AAC9B,WAAO,iBAAiB,SAAS,KAAK,iBAAiB;AACvD,WAAO,iBAAiB,sBAAsB,KAAK,iBAAiB;AACpE,WAAO,iBAAiB,WAAW,KAAK,mBAAmB;AAC3D,SAAK,sBAAsB;AAAA,EAK7B;AAAA,EAEA,OAAO,uBAAuB;AAC5B,WAAO,oBAAoB,SAAS,KAAK,iBAAiB;AAC1D,WAAO,oBAAoB,sBAAsB,KAAK,iBAAiB;AACvE,WAAO,oBAAoB,WAAW,KAAK,mBAAmB;AAC9D,SAAK,sBAAsB;AAAA,EAC7B;AAAA,EAEA,OAAO,mBAAmB,OAAc;AACtC,YAAO,MAAM,MAAM;AAAA,MACjB,KAAK,SAAS;AACZ,cAAM,aAAa;AACnB,cAAM,QAAQ,WAAW,SAAS,IAAI,MAAM,WAAW,OAAO;AAE9D;AAAA,MACF;AAAA,MACA,KAAK,sBAAsB;AACzB,cAAM,iBAAiB;AACvB,cAAM,SAAS,eAAe,kBAAkB,QAC5C,eAAe,SACf,IAAI,MAAM,OAAO,eAAe,MAAM,CAAC;AAE3C;AAAA,MACF;AAAA,MACA,SAAS;AACP,gBAAQ,MAAM,sDAAsD,KAAK;AACzE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,cAAc,OAA8B;AAvGrD;AAyGI,YAAQ,MAAM,wCAAwC,KAAK;AAG3D,UAAM,iBAAyB,IAAI,IAAI,UAAU,sBAAsB,EAAE;AACzE,QAAI,CAAC,SAAS,MAAM,WAAW,gBAAgB;AAC7C,cAAQ,KAAK,8EAA8E,MAAM,QAAQ,cAAc;AACvH;AAAA,IACF;AAEA,UAAM,MAAM,MAAM;AAClB,QAAI,CAAC,OAAO,OAAO,QAAQ,SAAU;AAErC,UAAM,UAAU;AAChB,QAAI,OAAO,QAAQ,SAAS,SAAU;AAEtC,UAAM,UAAU;AAQhB,QAAI;AAEF,cAAQ,QAAQ,MAAM;AAAA,QAEpB,wCAAyC;AACvC,gBAAM,iBAAiB;AACvB,gBAAM,eAAe,8BAA8B,aAAa,gBAAgB,eAAe,IAAI;AAEnG,qBAAK,YAAL,8BAAe,aAAa,MAAM,aAAa;AAC/C;AAAA,QACF;AAAA,QAEA,kCAAsC;AACpC,gBAAM,iBAAiB;AACvB,gBAAM,eAAe,8BAA8B,UAAU,eAAe,IAAI;AAEhF,qBAAK,WAAL,8BAAc,aAAa;AAC3B,qBAAK,UAAL;AACA;AAAA,QACF;AAAA,QAEA,wCAAyC;AACvC,gBAAM,iBAAiB;AAGvB,gBAAM,eAAe,8BAA8B,aAAa,eAAe,IAAI;AACnF,qBAAK,cAAL,8BAAiB,aAAa,OAAO,aAAa;AAClD;AAAA,QACF;AAAA,QAEA,0BAAkC;AAChC,gBAAM,iBAAiB;AAEvB,gBAAM,eAAe,8BAA8B,MAAM,eAAe,IAAI;AAC5E,qBAAK,YAAL,8BAAe,aAAa,OAAO,aAAa,UAAU,aAAa;AACvE;AAAA,QACF;AAAA,QAEA,SAAS;AAEP,gBAAM,IAAI;AAEV,gBAAM,eAAe,iBAAiB,GAAG,EAAE,IAA6B;AACxE,qBAAK,YAAL,8BAAe,aAAa,MAAM,aAAa;AAC/C;AAAA,QACF;AAAA,MACF;AAAA,IACF,UAAE;AAAA,IAEF;AAAA,EACF;AAEF;AA5Ja,eAEJ,sBAAsB;AAFlB,eA6BJ,oBAAoB,CAAC,UAAiB;AAC3C,SAAO,eAAc,mBAAmB,KAAK;AAC/C;AA/BW,eAiCJ,sBAAsB,CAAC,UAAiC;AAC7D,SAAO,eAAc,cAAc,KAAK;AAC1C;AAnCK,IAAM,gBAAN;;;ACJP,IAAM,aAAN,MAAiB;AAAA,EAMf,YAAY,QAA4B;AAHxC,SAAQ,SAAmC;AAC3C,SAAQ,YAAmC;AAIzC,SAAK,YAAY;AAGjB,QAAI,CAAC,KAAK,UAAU,YAAa,OAAM,IAAI,MAAM,yBAAyB;AAC1E,QAAI,CAAC,KAAK,UAAU,MAAO,OAAM,IAAI,MAAM,2BAA2B;AAGtE,UAAM,cAAuC,wBAAwB,KAAK,UAAU,WAAW;AAC/F,SAAK,UAAU,cAAc;AAC7B,oBAAgB,WAAW;AAAA,EAC7B;AAAA,EAEA,MAAM,aAAa;AAGjB,kBAAc,uBAAuB;AAAA,MACnC,WAAW,KAAK,UAAU;AAAA,MAC1B,SAAS,KAAK,UAAU;AAAA,MACxB,QAAQ,KAAK,UAAU;AAAA,MACvB,SAAS,KAAK,UAAU;AAAA,MACxB,OAAO,MAAM,KAAK,MAAM;AAAA,IAC1B,CAAC;AAAA,EAIH;AAAA,EAEA,MAAM,OAAO;AACX,UAAM,KAAK,WAAW;AACtB,SAAK,OAAO;AACZ,kBAAc,kBAAkB;AAAA,EAElC;AAAA,EAEA,SAAS;AACP,QAAI,KAAK,OAAQ;AAGjB,SAAK,YAAY,SAAS,cAAc,KAAK;AAC7C,WAAO,OAAO,KAAK,UAAU,OAAO;AAAA,MAClC,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,UAAU;AAAA,IACZ,CAAwB;AAGxB,YAAQ,MAAM,2BAA2B,SAAS;AAClD,YAAQ,IAAI,8BAA8B,UAAU,sBAAsB;AAC1E,UAAM,MAAM,IAAI,IAAI,UAAU,sBAAsB;AACpD,UAAM,eAAe,KAAK,UAAU;AACpC,QAAI,aAAa,IAAI,iBAAiB,YAAY;AAClD,QAAI,aAAa,IAAI,KAAK,OAAO,KAAK,IAAI,CAAC,CAAC;AAE5C,SAAK,SAAS,SAAS,cAAc,QAAQ;AAC7C,WAAO,OAAO,KAAK,OAAO,OAAO;AAAA,MAC/B,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,UAAU;AAAA,IACZ,CAAwB;AACxB,SAAK,OAAO,MAAM,IAAI,SAAS;AAE/B,SAAK,UAAU,YAAY,KAAK,MAAM;AACtC,aAAS,KAAK,YAAY,KAAK,SAAS;AAExC,SAAK,UAAU,iBAAiB,SAAS,CAAC,MAAM;AAvGpD;AAwGM,UAAI,EAAE,WAAW,KAAK,WAAW;AAE/B,yBAAK,WAAU,WAAf,4BAAwB;AAAA,UACtB,SAAS,aAAa;AAAA,UACtB;AAAA,QACF;AACA,aAAK,MAAM;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ;AACN,QAAI,CAAC,KAAK,OAAQ;AAClB,aAAS,KAAK,YAAY,KAAK,SAAU;AACzC,kBAAc,qBAAqB;AAEnC,SAAK,SAAS;AACd,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,UAAU;AACR,QAAI,KAAK,OAAQ,MAAK,MAAM;AAAA,EAC9B;AAAA,EAEA,OAAO;AAAE,WAAO;AAAA,EAAQ;AAC1B;AAEA,IAAO,sBAAQ;;;AC3Hf,IAAO,cAAQ;","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":";;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,sBAA8B;AAEpC,IAAM,YAAoC;AAAA,EAC/C,0BAAyB;AAAA,EACzB,kCAAmC;AACrC;;;ACLA;AAAA;AAAA,mBAAAA;AAAA,EAAA,2BAAAC;AAAA;AAAO,IAAMA,uBAA8B;AAEpC,IAAMD,aAAoC;AAAA,EAC/C,0BAAyB;AAAA,EACzB,kCAAmC;AACrC;;;ACLA;AAAA;AAAA,mBAAAE;AAAA,EAAA,2BAAAC;AAAA;AAAO,IAAMA,uBAA8B;AAEpC,IAAMD,aAAoC;AAAA,EAC/C,0BAA0B;AAAA,EAC1B,kCAAkC;AACpC;;;ACLA;AAAA;AAAA,mBAAAE;AAAA,EAAA,2BAAAC;AAAA;AAKO,IAAMA,uBAA8B;AAEpC,IAAMD,aAAoC;AAAA,EAC/C,wBAAwB;AAAA,EACxB,gCAAgC;AAClC;;;ACLO,IAAK,0BAAL,kBAAKE,6BAAL;AACL,EAAAA,yBAAA,WAAQ;AACR,EAAAA,yBAAA,iBAAc;AACd,EAAAA,yBAAA,aAAU;AACV,EAAAA,yBAAA,gBAAa;AAJH,SAAAA;AAAA,GAAA;AAOL,IAAK,mBAAL,kBAAKC,sBAAL;AACL,EAAAA,oCAAA,aAAU,KAAV;AACA,EAAAA,oCAAA,cAAW,KAAX;AACA,EAAAA,oCAAA,YAAS,KAAT;AACA,EAAAA,oCAAA,WAAQ,KAAR;AAJU,SAAAA;AAAA,GAAA;;;ACXL,IAAM,kBAAkB,CAAC,aAAa,aAAa,OAAO,OAAO;AAExE,IAAM,qBAA0C,IAAI,IAAI,eAAe;AAEhE,SAAS,YACd,WAAmB,OAAO,WAAW,cAAc,OAAO,SAAS,WAAW,IACrE;AACT,MAAI,mBAAmB,IAAI,QAAQ,GAAG;AACpC,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,WAAW,MAAM,GAAG;AAC/B,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ACJA,IAAM,MAAM,OAAO,YAAY,cAAc,QAAQ,MAAM,CAAC;AAC5D,IAAI,OAAgC;AAE7B,IAAI,YAA4B,aAAa;AAC7C,IAAI;AAEJ,SAAS,gBAAgB,aAAsC;AACpE,MAAI,eAAe,cAAc;AAC/B,YAAQ,IAAI,uDAAuD;AACnE,WAAO;AAAA,EACT,WAAW,eAAe,WAAW;AACnC,YAAQ,IAAI,oDAAoD;AAChE,WAAO;AAAA,EACT,WAAW,eAAe,eAAe;AACvC,YAAQ,IAAI,wDAAwD;AACpE,WAAO;AAAA,EACT,WAAW,eAAe,SAAS;AACjC,QAAI,YAAY,GAAG;AACjB,cAAQ,IAAI,kDAAkD;AAC9D,aAAO;AAAA,IACT,OAAO;AACL,cAAQ;AAAA,QACN;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,cAAY,aAAa;AACzB,gBAAc,eAAe;AAC/B;AAEA,SAAS,eAA+B;AACtC,QAAM,UAAU,OAAO,QAAQ,KAAK,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACnE,UAAM,YAAW,2BAAM,SAAQ;AAC/B,WAAO,CAAC,KAAK,QAAQ;AAAA,EACvB,CAAC;AACD,SAAO,OAAO,YAAY,OAAO;AACnC;AAEA,SAAS,iBAA0C;AACjD,SAAO,KAAK,qBAAqB;AACnC;;;AClDO,IAAM,eAAe,OAAO;AAAA,EACjC,WAAmD,sBAAgB,sBAAgB;AAAA,EACnF,SAA+C,iBAAc,OAAO,cAAW,IAAI;AACrF;AAEO,SAAS,0BACd,aACwC;AACxC,SACE,uCACA,mDACA,2CACA;AAEJ;AAEO,SAAS,wBACd,aACyB;AAEzB,MAAI,0BAA0B,WAAW,EAAG,QAAO;AAEnD,QAAM,eAAwD;AAAA,IAC5D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,SAAS,aAAa,WAAW;AACvC,MAAI,OAAQ,QAAO;AAEnB,QAAM,qBAAqB,YAAY;AAGvC,UAAQ,KAAK,uBAAuB,WAAW,wCAAwC,kBAAkB,EAAE;AAE3G,SAAO;AACT;;;ACrCO,IAAK,wBAAL,kBAAKC,2BAAL;AACL,EAAAA,uBAAA,kBAAe;AACf,EAAAA,uBAAA,eAAY;AACZ,EAAAA,uBAAA,kBAAe;AACf,EAAAA,uBAAA,WAAQ;AACR,EAAAA,uBAAA,WAAQ;AALE,SAAAA;AAAA,GAAA;AASL,IAAK,0BAAL,kBAAKC,6BAAL;AACL,EAAAA,yBAAA,2BAAwB;AACxB,EAAAA,yBAAA,8BAA2B;AAC3B,EAAAA,yBAAA,0BAAuB;AACvB,EAAAA,yBAAA,0BAAuB;AAJb,SAAAA;AAAA,GAAA;AAOL,IAAK,wBAAL,kBAAKC,2BAAL;AACL,EAAAA,uBAAA,sBAAmB;AACnB,EAAAA,uBAAA,2BAAwB;AAFd,SAAAA;AAAA,GAAA;;;AChBZ,IAAM,wBAAwB,IAAI,IAAY,OAAO,OAAO,qBAAqB,CAAC;AAE3E,SAAS,qBAAqBC,OAAwB;AAC3D,MAAI,CAACA,SAAQ,OAAOA,UAAS,SAAU,QAAO;AAC9C,QAAM,OAAQA,MAA2B;AACzC,SAAO,OAAO,SAAS,YAAY,sBAAsB,IAAI,IAAI;AACnE;AAEO,IAAM,qBAAqB,CAAC,UAAiD;AAXpF;AAYE,gBAAO,UAAU,WAAW,SAAS,oCAAO,iBAAP,YAAuB;AAAA;AAEvD,IAAM,uBAAuB,CAAC,UAAiD;AAdtF;AAeE,gBAAO,UAAU,WAAW,SAAS,oCAAO,mBAAP,YAAyB;AAAA;AAEzD,IAAM,yBAAyB,CAACA,UAAsD;AAjB7F;AAiBiG;AAAA,IAC/F,eAAc,KAAAA,SAAA,gBAAAA,MAAM,iBAAN,YAAsB;AAAA,IACpC,gBAAe,KAAAA,SAAA,gBAAAA,MAAM,kBAAN,YAAuB;AAAA,IACtC,aAAY,KAAAA,SAAA,gBAAAA,MAAM,eAAN,YAAoB;AAAA,EAClC;AAAA;;;ACrBO,IAAK,yBAAL,kBAAKC,4BAAL;AACL,EAAAA,wBAAA,aAAU;AACV,EAAAA,wBAAA,cAAW;AACX,EAAAA,wBAAA,YAAS;AACT,EAAAA,wBAAA,WAAQ;AAJE,SAAAA;AAAA,GAAA;;;ACYL,IAAM,4BAA4B,CACvCC,UACsB;AAdxB;AAc4B;AAAA,IAC1B,MAAM;AAAA,MACJ,KAAI,WAAAA,SAAA,gBAAAA,MAAM,SAAN,mBAAY,OAAZ,YAAkB;AAAA,MACtB,aAAY,WAAAA,SAAA,gBAAAA,MAAM,SAAN,mBAAY,eAAZ,YAA0B;AAAA,MACtC,YAAW,WAAAA,SAAA,gBAAAA,MAAM,SAAN,mBAAY,cAAZ,YAAyB;AAAA,MACpC,OAAM,KAAAA,SAAA,gBAAAA,MAAM,SAAN,mBAAY;AAAA,IACpB;AAAA,IACA,QAAQ;AAAA,MACN,YAAW,WAAAA,SAAA,gBAAAA,MAAM,WAAN,mBAAc,cAAd,YAA2B;AAAA,MACtC,iBAAgB,WAAAA,SAAA,gBAAAA,MAAM,WAAN,mBAAc,mBAAd,YAAgC;AAAA,MAChD,gBAAe,WAAAA,SAAA,gBAAAA,MAAM,WAAN,mBAAc,kBAAd,YAA+B;AAAA,MAC9C,yBAAwB,KAAAA,SAAA,gBAAAA,MAAM,WAAN,mBAAc;AAAA,IACxC;AAAA,IACA,YAAY;AAAA,MACV,uBAAsB,KAAAA,SAAA,gBAAAA,MAAM,eAAN,mBAAkB;AAAA,MACxC,yBAAwB,KAAAA,SAAA,gBAAAA,MAAM,eAAN,mBAAkB;AAAA,MAC1C,eAAc,KAAAA,SAAA,gBAAAA,MAAM,eAAN,mBAAkB;AAAA,IAClC;AAAA,EACF;AAAA;;;AC7BO,IAAM,mCAAmC,CAACC,UAAgF;AAC7H,MAAI,CAACA,MAAM,QAAO;AAClB,SAAO;AAAA,IACH,QAAQA,MAAK;AAAA,IACb,QAAQA,MAAK;AAAA,IACb,kBAAkBA,MAAK;AAAA,IACvB,cAAcA,MAAK;AAAA,EACvB;AACJ;;;ACwCO,IAAM,uBAAuB,CAClC,SACAC,UAC4B;AAC5B,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,UAAU;AAAA,MACR,SAAS,aAAa;AAAA,MACtB,QAAQA,MAAK;AAAA,MACb,OAAO,uBAAuBA,MAAK,KAAK;AAAA,MACxC,iBAAiB,iCAAiCA,MAAK,WAAW;AAAA,MAClE,UAAU,0BAA0BA,MAAK,QAAQ;AAAA,IACnD;AAAA,EACF;AACF;AAEO,IAAM,kBAAkB,CAACA,UAAgE;AAC9F,SAAO;AAAA,IACJ,UAAU;AAAA,MACT,SAAS,aAAa;AAAA,MACtB,MAAMA,MAAK;AAAA,MACX,SAASA,MAAK;AAAA,IAChB;AAAA,EACF;AACF;AAEO,IAAM,qBAAqB,CAACA,UAAsE;AAEvG,QAAM,QAAQA,MAAK,iCACf,qBAAqBA,MAAK,KAAK,IAC/B,mBAAmBA,MAAK,KAAK;AAEjC,MAAI,WAA0C;AAAA,IAC5C,SAAS,aAAa;AAAA,IACtB,QAAQA,MAAK;AAAA,IACb,WAAWA,MAAK;AAAA,EAClB;AAEA,MAAIA,MAAK,aAAa;AACpB,aAAS,mBAAmBA,MAAK;AAAA,EACnC;AAEA,SAAO,EAAE,OAAO,SAAS;AAC3B;AAEO,IAAM,mBAAmB,CAACA,UAA8D;AAC7F,SAAO;AAAA,IACL,OAAOA,MAAK;AAAA,IACZ,UAAU;AAAA;AAAA,IACV,UAAU;AAAA,MACR,SAAS,aAAa;AAAA,IACxB;AAAA,EACF;AACF;AAEO,IAAM,mBAAmB,CAC9B,SACAA,UAC4B;AAC5B,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,UAAU;AAAA,MACR,SAAS,aAAa;AAAA,MACtB,GAAGA;AAAA,IACL;AAAA,EACF;AACF;AAWO,IAAM,gCAAgC;AAAA,EAC3C,kCAAmC,GAAG;AAAA,EACtC,4BAAgC,GAAG;AAAA,EACnC,kCAAmC,GAAG;AAAA,EACtC,oBAA4B,GAAG;AAAA,EAC/B,oBAA4B,GAAG;AACjC;;;AC7GO,IAAM,iBAAN,MAAM,eAAc;AAAA,EAuBzB,OAAO,uBAAuB,QAA6B;AACzD,SAAK,YAAY,OAAO;AACxB,SAAK,UAAU,OAAO;AACtB,SAAK,SAAS,OAAO;AACrB,SAAK,UAAU,OAAO;AACtB,SAAK,QAAQ,OAAO;AAAA,EACtB;AAAA,EAEA,OAAO,QAAQ,MAAwB;AACrC,SAAK,OAAO;AAAA,EACd;AAAA,EAUA,OAAO,oBAAoB;AACzB,QAAI,KAAK,oBAAqB;AAC9B,WAAO,iBAAiB,SAAS,KAAK,iBAAiB;AACvD,WAAO,iBAAiB,sBAAsB,KAAK,iBAAiB;AACpE,WAAO,iBAAiB,WAAW,KAAK,mBAAmB;AAC3D,SAAK,sBAAsB;AAAA,EAC7B;AAAA,EAEA,OAAO,uBAAuB;AAC5B,WAAO,oBAAoB,SAAS,KAAK,iBAAiB;AAC1D,WAAO,oBAAoB,sBAAsB,KAAK,iBAAiB;AACvE,WAAO,oBAAoB,WAAW,KAAK,mBAAmB;AAC9D,SAAK,sBAAsB;AAC3B,SAAK;AAAA,EACP;AAAA,EAEA,OAAO,mBAAmB,OAAc;AACtC,YAAO,MAAM,MAAM;AAAA,MACjB,KAAK,SAAS;AACZ,cAAM,aAAa;AACnB,cAAM,QAAQ,WAAW,SAAS,IAAI,MAAM,WAAW,OAAO;AAE9D;AAAA,MACF;AAAA,MACA,KAAK,sBAAsB;AACzB,cAAM,iBAAiB;AACvB,cAAM,SAAS,eAAe,kBAAkB,QAC5C,eAAe,SACf,IAAI,MAAM,OAAO,eAAe,MAAM,CAAC;AAE3C;AAAA,MACF;AAAA,MACA,SAAS;AACP,gBAAQ,MAAM,sDAAsD,KAAK;AACzE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,cAAc,OAA8B;AA3GrD;AA4GI,QAAI,CAAC,qBAAqB,MAAM,IAAI,EAAG;AAEvC,UAAM,iBAAyB,IAAI,IAAI,UAAU,sBAAsB,EAAE;AACzE,QAAI,CAAC,SAAS,MAAM,WAAW,gBAAgB;AAC7C,cAAQ,KAAK,8EAA8E,MAAM,QAAQ,cAAc;AACvH;AAAA,IACF;AAEA,UAAM,MAAM,MAAM;AAClB,QAAI,CAAC,OAAO,OAAO,QAAQ,SAAU;AAErC,UAAM,UAAU;AAChB,QAAI,OAAO,QAAQ,SAAS,SAAU;AAEtC,UAAM,UAAU;AAEhB,QAAI;AACF,cAAQ,QAAQ,MAAM;AAAA,QAEpB,wCAAyC;AACvC,gBAAM,iBAAiB;AACvB,gBAAM,eAAe,8BAA8B,aAAa,gBAAgB,eAAe,IAAI;AACnG,qBAAK,YAAL,8BAAe,aAAa,MAAM,aAAa;AAC/C;AAAA,QACF;AAAA,QAEA,kCAAsC;AACpC,gBAAM,iBAAiB;AACvB,gBAAM,eAAe,8BAA8B,UAAU,eAAe,IAAI;AAChF,qBAAK,WAAL,8BAAc,aAAa;AAC3B,qBAAK,UAAL;AACA;AAAA,QACF;AAAA,QAEA,wCAAyC;AACvC,gBAAM,iBAAiB;AACvB,gBAAM,eAAe,8BAA8B,aAAa,eAAe,IAAI;AACnF,qBAAK,cAAL,8BAAiB,aAAa,OAAO,aAAa;AAClD,cAAI,KAAK,wBAAiC;AACxC,uBAAK,UAAL;AAAA,UACF;AACA;AAAA,QACF;AAAA,QAEA,0BAAkC;AAChC,gBAAM,iBAAiB;AACvB,gBAAM,eAAe,8BAA8B,MAAM,eAAe,IAAI;AAC5E,qBAAK,YAAL,8BAAe,aAAa,OAAO,aAAa,UAAU,aAAa;AACvE;AAAA,QACF;AAAA,QAEA,0BAAkC;AAChC,gBAAM,iBAAiB;AACvB,gBAAM,eAAe,iBAAiB,gBAAgB,eAAe,IAAI;AACzE,qBAAK,YAAL,8BAAe,aAAa,MAAM,aAAa;AAC/C;AAAA,QACF;AAAA,MAEF;AAAA,IACF,UAAE;AAAA,IAEF;AAAA,EACF;AAEF;AAnJa,eAEJ,sBAAsB;AAFlB,eAqBJ;AArBI,eAmCJ,oBAAoB,CAAC,UAAiB;AAC3C,SAAO,eAAc,mBAAmB,KAAK;AAC/C;AArCW,eAuCJ,sBAAsB,CAAC,UAAiC;AAC7D,SAAO,eAAc,cAAc,KAAK;AAC1C;AAzCK,IAAM,gBAAN;;;ACJP,IAAM,eAAoC;AAAA,EACxC,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,UAAU;AACZ;AAEA,IAAM,aAAN,MAAiB;AAAA,EAMf,YAAY,QAA4B;AAHxC,SAAQ,SAAmC;AAC3C,SAAQ,YAAmC;AAIzC,SAAK,YAAY;AAGjB,QAAI,CAAC,KAAK,UAAU,YAAa,OAAM,IAAI,MAAM,yBAAyB;AAC1E,QAAI,CAAC,KAAK,UAAU,MAAO,OAAM,IAAI,MAAM,2BAA2B;AAGtE,UAAM,cAAuC,wBAAwB,KAAK,UAAU,WAAW;AAC/F,SAAK,UAAU,cAAc;AAC7B,oBAAgB,WAAW;AAAA,EAC7B;AAAA,EAEA,MAAM,aAAa;AAGjB,kBAAc,uBAAuB;AAAA,MACnC,WAAW,KAAK,UAAU;AAAA,MAC1B,SAAS,KAAK,UAAU;AAAA,MACxB,QAAQ,KAAK,UAAU;AAAA,MACvB,SAAS,KAAK,UAAU;AAAA,MACxB,OAAO,MAAM,KAAK,MAAM;AAAA,IAC1B,CAAC;AAAA,EAIH;AAAA,EAEA,MAAM,OAAO;AAjEf;AAkEI,UAAM,KAAK,WAAW;AACtB,SAAK,OAAO;AAEZ,kBAAc,SAAQ,UAAK,UAAU,SAAf,2BAA+C;AAErE,kBAAc,kBAAkB;AAAA,EAElC;AAAA,EAEA,SAAS;AACP,QAAI,KAAK,OAAQ;AAGjB,SAAK,YAAY,SAAS,cAAc,KAAK;AAC7C,WAAO,OAAO,KAAK,UAAU,OAAO;AAAA,MAClC,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,UAAU;AAAA,IACZ,CAAwB;AAGxB,YAAQ,MAAM,2BAA2B,SAAS;AAClD,YAAQ,IAAI,8BAA8B,UAAU,sBAAsB;AAC1E,UAAM,MAAM,IAAI,IAAI,UAAU,sBAAsB;AACpD,UAAM,eAAe,KAAK,UAAU;AACpC,QAAI,aAAa,IAAI,iBAAiB,YAAY;AAClD,QAAI,aAAa,IAAI,KAAK,OAAO,KAAK,IAAI,CAAC,CAAC;AAC5C,QAAI,KAAK,UAAU,QAAQ,MAAM;AAC/B,UAAI,aAAa,IAAI,QAAQ,OAAO,KAAK,UAAU,IAAI,CAAC;AAAA,IAC1D;AAEA,SAAK,SAAS,SAAS,cAAc,QAAQ;AAC7C,WAAO,OAAO,KAAK,OAAO,OAAO,YAAY;AAC7C,SAAK,OAAO,MAAM,IAAI,SAAS;AAE/B,SAAK,UAAU,YAAY,KAAK,MAAM;AACtC,aAAS,KAAK,YAAY,KAAK,SAAS;AAExC,SAAK,UAAU,iBAAiB,SAAS,CAAC,MAAM;AAhHpD;AAiHM,UAAI,EAAE,WAAW,KAAK,WAAW;AAE/B,yBAAK,WAAU,WAAf,4BAAwB;AAAA,UACtB,SAAS,aAAa;AAAA,UACtB;AAAA,QACF;AACA,aAAK,MAAM;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ;AA5HV;AA6HI,QAAI,CAAC,KAAK,OAAQ;AAElB,SAAI,UAAK,cAAL,mBAAgB,YAAY;AAC9B,WAAK,UAAU,WAAW,YAAY,KAAK,SAAS;AAAA,IACtD;AACA,kBAAc,qBAAqB;AAEnC,SAAK,SAAS;AACd,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,UAAU;AACR,QAAI,KAAK,OAAQ,MAAK,MAAM;AAAA,EAC9B;AAAA,EAEA,OAAO;AAAE,WAAO;AAAA,EAAQ;AAC1B;AAEA,IAAO,sBAAQ;;;ACvIf,IAAO,cAAQ;","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,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
|
-
}
|