@benji-money/connect-sdk 1.0.9 → 1.0.10-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/README.md +14 -2
- package/dist/connect-sdk.umd.global.js +22 -6
- package/dist/connect-sdk.umd.global.js.map +1 -1
- package/dist/index.cjs +23 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +23 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ yarn add @benji-money/connect-sdk
|
|
|
20
20
|
import { ConnectSDK } from "@benji-money/connect-sdk";
|
|
21
21
|
|
|
22
22
|
const sdk = new ConnectSDK({
|
|
23
|
-
environment: "production", // or "
|
|
23
|
+
environment: "production", // or "local" | "development" | "sandbox",
|
|
24
24
|
token: "your-connect-token",
|
|
25
25
|
|
|
26
26
|
// token: string, metadata: BenjiConnectOnSuccessMetadata
|
|
@@ -56,7 +56,7 @@ Demo example [here](https://github.com/Benji-money/benji-connect-examples/tree/m
|
|
|
56
56
|
<script src="/path/to/connect-sdk.umd.js"></script>
|
|
57
57
|
<script>
|
|
58
58
|
const sdk = new ConnectSDK({
|
|
59
|
-
environment: "production", // or "
|
|
59
|
+
environment: "production", // or "local" | "development" | "sandbox",
|
|
60
60
|
token: "your-connect-token",
|
|
61
61
|
|
|
62
62
|
onSuccess: (token, metadata) => {
|
|
@@ -84,12 +84,24 @@ Demo example [here](https://github.com/Benji-money/benji-connect-examples/tree/m
|
|
|
84
84
|
|
|
85
85
|
The SDK accepts the following configuration options:
|
|
86
86
|
|
|
87
|
+
- `environment` (required): One of `local`, `development`, `sandbox`, or `production`
|
|
87
88
|
- `token` (required): Your API connect token
|
|
88
89
|
- `onSuccess` (optional): Callback function called when connect completed successfully
|
|
89
90
|
- `onError` (optional): Callback function called when error occurs in the connect flow
|
|
90
91
|
- `onExit` (optional): Callback function called when the user exits the connect flow
|
|
91
92
|
- `onEvent` (optional): Callback function for handling various events
|
|
92
93
|
|
|
94
|
+
### Environments
|
|
95
|
+
|
|
96
|
+
| Environment | Auth UI | Use when |
|
|
97
|
+
|-------------|---------|----------|
|
|
98
|
+
| `local` | `http://localhost:3000` | Running Benji Connect locally (default for invalid env strings) |
|
|
99
|
+
| `development` | `https://verifyapp-dev.withbenji.com` | Remote dev verify app |
|
|
100
|
+
| `sandbox` | `https://verifyapp-staging.withbenji.com` | Staging |
|
|
101
|
+
| `production` | `https://verifyapp.withbenji.com` | Production |
|
|
102
|
+
|
|
103
|
+
**Migration:** In earlier SDK versions, `development` pointed at localhost. Use `environment: "local"` for localhost; use `development` for the remote dev stack.
|
|
104
|
+
|
|
93
105
|
## Development
|
|
94
106
|
|
|
95
107
|
```bash
|
|
@@ -38,15 +38,27 @@ var ConnectSDK = (() => {
|
|
|
38
38
|
});
|
|
39
39
|
var project_environment3 = "development";
|
|
40
40
|
var endpoints3 = {
|
|
41
|
+
"benji_connect_auth_url": "https://verifyapp-dev.withbenji.com",
|
|
42
|
+
"benji_connect_auth_service_url": "https://authservice-dev.withbenji.com"
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
// src/config/local.ts
|
|
46
|
+
var local_exports = {};
|
|
47
|
+
__export(local_exports, {
|
|
48
|
+
endpoints: () => endpoints4,
|
|
49
|
+
project_environment: () => project_environment4
|
|
50
|
+
});
|
|
51
|
+
var project_environment4 = "local";
|
|
52
|
+
var endpoints4 = {
|
|
41
53
|
"benji_connect_auth_url": "http://localhost:3000",
|
|
42
|
-
"benji_connect_auth_service_url": "https://authservice-
|
|
54
|
+
"benji_connect_auth_service_url": "https://authservice-dev.withbenji.com"
|
|
43
55
|
};
|
|
44
56
|
|
|
45
57
|
// src/config/index.ts
|
|
46
58
|
var env = typeof process !== "undefined" ? process.env : {};
|
|
47
|
-
var data =
|
|
59
|
+
var data = local_exports;
|
|
48
60
|
var Endpoints = getEndpoints();
|
|
49
|
-
var Environment = "
|
|
61
|
+
var Environment = "local" /* LOCAL */;
|
|
50
62
|
function configureConfig(environment) {
|
|
51
63
|
if (environment == "production") {
|
|
52
64
|
console.log("[Connect SDK] configuring with environment production");
|
|
@@ -57,6 +69,9 @@ var ConnectSDK = (() => {
|
|
|
57
69
|
} else if (environment == "development") {
|
|
58
70
|
console.log("[Connect SDK] configuring with environment development");
|
|
59
71
|
data = development_exports;
|
|
72
|
+
} else if (environment == "local") {
|
|
73
|
+
console.log("[Connect SDK] configuring with environment local");
|
|
74
|
+
data = local_exports;
|
|
60
75
|
}
|
|
61
76
|
Endpoints = getEndpoints();
|
|
62
77
|
Environment = getEnvironment();
|
|
@@ -75,21 +90,22 @@ var ConnectSDK = (() => {
|
|
|
75
90
|
// src/utils/config.ts
|
|
76
91
|
var buildContext = () => ({
|
|
77
92
|
namespace: "benji-connect-sdk" ? "benji-connect-sdk" : "benji-connect-sdk",
|
|
78
|
-
version: "1.0.
|
|
93
|
+
version: "1.0.10-beta.1" ? String("1.0.10-beta.1") : "0.0.0"
|
|
79
94
|
});
|
|
80
95
|
function isBenjiConnectEnvironment(environment) {
|
|
81
|
-
return environment === "development" /* DEVELOPMENT */ || environment === "sandbox" /* SANDBOX */ || environment === "production" /* PRODUCTION */;
|
|
96
|
+
return environment === "local" /* LOCAL */ || environment === "development" /* DEVELOPMENT */ || environment === "sandbox" /* SANDBOX */ || environment === "production" /* PRODUCTION */;
|
|
82
97
|
}
|
|
83
98
|
function mapToConnectEnvironment(environment) {
|
|
84
99
|
if (isBenjiConnectEnvironment(environment)) return environment;
|
|
85
100
|
const environments = {
|
|
101
|
+
local: "local" /* LOCAL */,
|
|
86
102
|
development: "development" /* DEVELOPMENT */,
|
|
87
103
|
sandbox: "sandbox" /* SANDBOX */,
|
|
88
104
|
production: "production" /* PRODUCTION */
|
|
89
105
|
};
|
|
90
106
|
const mapped = environments[environment];
|
|
91
107
|
if (mapped) return mapped;
|
|
92
|
-
const defaultEnvironment = "
|
|
108
|
+
const defaultEnvironment = "local" /* LOCAL */;
|
|
93
109
|
console.warn(`[Benji Connect SDK] ${environment} not valid environment defaulting to ${defaultEnvironment}`);
|
|
94
110
|
return defaultEnvironment;
|
|
95
111
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/production.ts","../src/config/sandbox.ts","../src/config/development.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':'http://localhost:3000',\n 'benji_connect_auth_service_url' : 'https://authservice-staging.withbenji.com'\n}","import * as productionConfig from './production';\nimport * as sandboxConfig from './sandbox';\nimport * as developmentConfig from './development';\nimport { BenjiConnectEnvironment } from '../types/config';\n\n// Defaults to dev\nconst env = (typeof process !== 'undefined' ? process.env : {});\nlet data = developmentConfig;\n// Derive endpoint type from dev config\ntype EndpointConfig = typeof developmentConfig.endpoints;\nexport let Endpoints: EndpointConfig = getEndpoints();\nexport let Environment = BenjiConnectEnvironment.DEVELOPMENT;\n\n// Configure with environment at runtime \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 }\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\n","import { BenjiConnectEnvironment } from \"../types/config\";\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.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 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 = 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","data","data","data","data"]}
|
|
1
|
+
{"version":3,"sources":["../src/config/production.ts","../src/config/sandbox.ts","../src/config/development.ts","../src/config/local.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};","export const project_environment: string = 'local';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url': 'http://localhost:3000',\n 'benji_connect_auth_service_url': 'https://authservice-dev.withbenji.com',\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';\n\n// Defaults to local\nconst env = (typeof process !== 'undefined' ? process.env : {});\nlet data = localConfig;\n// Derive endpoint type from local config\ntype EndpointConfig = typeof localConfig.endpoints;\nexport let Endpoints: EndpointConfig = getEndpoints();\nexport let Environment = BenjiConnectEnvironment.LOCAL;\n\n// Configure with environment at runtime \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 console.log('[Connect SDK] configuring with environment local');\n data = localConfig;\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\";\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 = BenjiConnectEnvironment.LOCAL;\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"]}
|
package/dist/index.cjs
CHANGED
|
@@ -62,12 +62,25 @@ __export(development_exports, {
|
|
|
62
62
|
});
|
|
63
63
|
var project_environment3 = "development";
|
|
64
64
|
var endpoints3 = {
|
|
65
|
+
"benji_connect_auth_url": "https://verifyapp-dev.withbenji.com",
|
|
66
|
+
"benji_connect_auth_service_url": "https://authservice-dev.withbenji.com"
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
// src/config/local.ts
|
|
70
|
+
var local_exports = {};
|
|
71
|
+
__export(local_exports, {
|
|
72
|
+
endpoints: () => endpoints4,
|
|
73
|
+
project_environment: () => project_environment4
|
|
74
|
+
});
|
|
75
|
+
var project_environment4 = "local";
|
|
76
|
+
var endpoints4 = {
|
|
65
77
|
"benji_connect_auth_url": "http://localhost:3000",
|
|
66
|
-
"benji_connect_auth_service_url": "https://authservice-
|
|
78
|
+
"benji_connect_auth_service_url": "https://authservice-dev.withbenji.com"
|
|
67
79
|
};
|
|
68
80
|
|
|
69
81
|
// src/types/config.ts
|
|
70
82
|
var BenjiConnectEnvironment = /* @__PURE__ */ ((BenjiConnectEnvironment2) => {
|
|
83
|
+
BenjiConnectEnvironment2["LOCAL"] = "local";
|
|
71
84
|
BenjiConnectEnvironment2["DEVELOPMENT"] = "development";
|
|
72
85
|
BenjiConnectEnvironment2["SANDBOX"] = "sandbox";
|
|
73
86
|
BenjiConnectEnvironment2["PRODUCTION"] = "production";
|
|
@@ -82,9 +95,9 @@ var BenjiConnectMode = /* @__PURE__ */ ((BenjiConnectMode2) => {
|
|
|
82
95
|
|
|
83
96
|
// src/config/index.ts
|
|
84
97
|
var env = typeof process !== "undefined" ? process.env : {};
|
|
85
|
-
var data =
|
|
98
|
+
var data = local_exports;
|
|
86
99
|
var Endpoints = getEndpoints();
|
|
87
|
-
var Environment = "
|
|
100
|
+
var Environment = "local" /* LOCAL */;
|
|
88
101
|
function configureConfig(environment) {
|
|
89
102
|
if (environment == "production") {
|
|
90
103
|
console.log("[Connect SDK] configuring with environment production");
|
|
@@ -95,6 +108,9 @@ function configureConfig(environment) {
|
|
|
95
108
|
} else if (environment == "development") {
|
|
96
109
|
console.log("[Connect SDK] configuring with environment development");
|
|
97
110
|
data = development_exports;
|
|
111
|
+
} else if (environment == "local") {
|
|
112
|
+
console.log("[Connect SDK] configuring with environment local");
|
|
113
|
+
data = local_exports;
|
|
98
114
|
}
|
|
99
115
|
Endpoints = getEndpoints();
|
|
100
116
|
Environment = getEnvironment();
|
|
@@ -113,21 +129,22 @@ function getEnvironment() {
|
|
|
113
129
|
// src/utils/config.ts
|
|
114
130
|
var buildContext = () => ({
|
|
115
131
|
namespace: "benji-connect-sdk" ? "benji-connect-sdk" : "benji-connect-sdk",
|
|
116
|
-
version: "1.0.
|
|
132
|
+
version: "1.0.10-beta.1" ? String("1.0.10-beta.1") : "0.0.0"
|
|
117
133
|
});
|
|
118
134
|
function isBenjiConnectEnvironment(environment) {
|
|
119
|
-
return environment === "development" /* DEVELOPMENT */ || environment === "sandbox" /* SANDBOX */ || environment === "production" /* PRODUCTION */;
|
|
135
|
+
return environment === "local" /* LOCAL */ || environment === "development" /* DEVELOPMENT */ || environment === "sandbox" /* SANDBOX */ || environment === "production" /* PRODUCTION */;
|
|
120
136
|
}
|
|
121
137
|
function mapToConnectEnvironment(environment) {
|
|
122
138
|
if (isBenjiConnectEnvironment(environment)) return environment;
|
|
123
139
|
const environments = {
|
|
140
|
+
local: "local" /* LOCAL */,
|
|
124
141
|
development: "development" /* DEVELOPMENT */,
|
|
125
142
|
sandbox: "sandbox" /* SANDBOX */,
|
|
126
143
|
production: "production" /* PRODUCTION */
|
|
127
144
|
};
|
|
128
145
|
const mapped = environments[environment];
|
|
129
146
|
if (mapped) return mapped;
|
|
130
|
-
const defaultEnvironment = "
|
|
147
|
+
const defaultEnvironment = "local" /* LOCAL */;
|
|
131
148
|
console.warn(`[Benji Connect SDK] ${environment} not valid environment defaulting to ${defaultEnvironment}`);
|
|
132
149
|
return defaultEnvironment;
|
|
133
150
|
}
|
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/types/config.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':'http://localhost:3000',\n 'benji_connect_auth_service_url' : 'https://authservice-staging.withbenji.com'\n}","import { BenjiConnectAuthAction } from './auth';\nimport { BenjiConnectEventType } from './event';\nimport { BenjiConnectTransactionData } from './transaction';\nimport { BenjiConnectUserData } from './user';\n\nexport enum BenjiConnectEnvironment {\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}","import * as productionConfig from './production';\nimport * as sandboxConfig from './sandbox';\nimport * as developmentConfig from './development';\nimport { BenjiConnectEnvironment } from '../types/config';\n\n// Defaults to dev\nconst env = (typeof process !== 'undefined' ? process.env : {});\nlet data = developmentConfig;\n// Derive endpoint type from dev config\ntype EndpointConfig = typeof developmentConfig.endpoints;\nexport let Endpoints: EndpointConfig = getEndpoints();\nexport let Environment = BenjiConnectEnvironment.DEVELOPMENT;\n\n// Configure with environment at runtime \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 }\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\n","import { BenjiConnectEnvironment } from \"../types/config\";\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.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 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 = 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","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.ts","../src/types/config.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};","export const project_environment: string = 'local';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url': 'http://localhost:3000',\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}","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';\n\n// Defaults to local\nconst env = (typeof process !== 'undefined' ? process.env : {});\nlet data = localConfig;\n// Derive endpoint type from local config\ntype EndpointConfig = typeof localConfig.endpoints;\nexport let Endpoints: EndpointConfig = getEndpoints();\nexport let Environment = BenjiConnectEnvironment.LOCAL;\n\n// Configure with environment at runtime \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 console.log('[Connect SDK] configuring with environment local');\n data = localConfig;\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\";\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 = BenjiConnectEnvironment.LOCAL;\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"]}
|
package/dist/index.d.cts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -36,12 +36,25 @@ __export(development_exports, {
|
|
|
36
36
|
});
|
|
37
37
|
var project_environment3 = "development";
|
|
38
38
|
var endpoints3 = {
|
|
39
|
+
"benji_connect_auth_url": "https://verifyapp-dev.withbenji.com",
|
|
40
|
+
"benji_connect_auth_service_url": "https://authservice-dev.withbenji.com"
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
// src/config/local.ts
|
|
44
|
+
var local_exports = {};
|
|
45
|
+
__export(local_exports, {
|
|
46
|
+
endpoints: () => endpoints4,
|
|
47
|
+
project_environment: () => project_environment4
|
|
48
|
+
});
|
|
49
|
+
var project_environment4 = "local";
|
|
50
|
+
var endpoints4 = {
|
|
39
51
|
"benji_connect_auth_url": "http://localhost:3000",
|
|
40
|
-
"benji_connect_auth_service_url": "https://authservice-
|
|
52
|
+
"benji_connect_auth_service_url": "https://authservice-dev.withbenji.com"
|
|
41
53
|
};
|
|
42
54
|
|
|
43
55
|
// src/types/config.ts
|
|
44
56
|
var BenjiConnectEnvironment = /* @__PURE__ */ ((BenjiConnectEnvironment2) => {
|
|
57
|
+
BenjiConnectEnvironment2["LOCAL"] = "local";
|
|
45
58
|
BenjiConnectEnvironment2["DEVELOPMENT"] = "development";
|
|
46
59
|
BenjiConnectEnvironment2["SANDBOX"] = "sandbox";
|
|
47
60
|
BenjiConnectEnvironment2["PRODUCTION"] = "production";
|
|
@@ -56,9 +69,9 @@ var BenjiConnectMode = /* @__PURE__ */ ((BenjiConnectMode2) => {
|
|
|
56
69
|
|
|
57
70
|
// src/config/index.ts
|
|
58
71
|
var env = typeof process !== "undefined" ? process.env : {};
|
|
59
|
-
var data =
|
|
72
|
+
var data = local_exports;
|
|
60
73
|
var Endpoints = getEndpoints();
|
|
61
|
-
var Environment = "
|
|
74
|
+
var Environment = "local" /* LOCAL */;
|
|
62
75
|
function configureConfig(environment) {
|
|
63
76
|
if (environment == "production") {
|
|
64
77
|
console.log("[Connect SDK] configuring with environment production");
|
|
@@ -69,6 +82,9 @@ function configureConfig(environment) {
|
|
|
69
82
|
} else if (environment == "development") {
|
|
70
83
|
console.log("[Connect SDK] configuring with environment development");
|
|
71
84
|
data = development_exports;
|
|
85
|
+
} else if (environment == "local") {
|
|
86
|
+
console.log("[Connect SDK] configuring with environment local");
|
|
87
|
+
data = local_exports;
|
|
72
88
|
}
|
|
73
89
|
Endpoints = getEndpoints();
|
|
74
90
|
Environment = getEnvironment();
|
|
@@ -87,21 +103,22 @@ function getEnvironment() {
|
|
|
87
103
|
// src/utils/config.ts
|
|
88
104
|
var buildContext = () => ({
|
|
89
105
|
namespace: "benji-connect-sdk" ? "benji-connect-sdk" : "benji-connect-sdk",
|
|
90
|
-
version: "1.0.
|
|
106
|
+
version: "1.0.10-beta.1" ? String("1.0.10-beta.1") : "0.0.0"
|
|
91
107
|
});
|
|
92
108
|
function isBenjiConnectEnvironment(environment) {
|
|
93
|
-
return environment === "development" /* DEVELOPMENT */ || environment === "sandbox" /* SANDBOX */ || environment === "production" /* PRODUCTION */;
|
|
109
|
+
return environment === "local" /* LOCAL */ || environment === "development" /* DEVELOPMENT */ || environment === "sandbox" /* SANDBOX */ || environment === "production" /* PRODUCTION */;
|
|
94
110
|
}
|
|
95
111
|
function mapToConnectEnvironment(environment) {
|
|
96
112
|
if (isBenjiConnectEnvironment(environment)) return environment;
|
|
97
113
|
const environments = {
|
|
114
|
+
local: "local" /* LOCAL */,
|
|
98
115
|
development: "development" /* DEVELOPMENT */,
|
|
99
116
|
sandbox: "sandbox" /* SANDBOX */,
|
|
100
117
|
production: "production" /* PRODUCTION */
|
|
101
118
|
};
|
|
102
119
|
const mapped = environments[environment];
|
|
103
120
|
if (mapped) return mapped;
|
|
104
|
-
const defaultEnvironment = "
|
|
121
|
+
const defaultEnvironment = "local" /* LOCAL */;
|
|
105
122
|
console.warn(`[Benji Connect SDK] ${environment} not valid environment defaulting to ${defaultEnvironment}`);
|
|
106
123
|
return defaultEnvironment;
|
|
107
124
|
}
|
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/types/config.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':'http://localhost:3000',\n 'benji_connect_auth_service_url' : 'https://authservice-staging.withbenji.com'\n}","import { BenjiConnectAuthAction } from './auth';\nimport { BenjiConnectEventType } from './event';\nimport { BenjiConnectTransactionData } from './transaction';\nimport { BenjiConnectUserData } from './user';\n\nexport enum BenjiConnectEnvironment {\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}","import * as productionConfig from './production';\nimport * as sandboxConfig from './sandbox';\nimport * as developmentConfig from './development';\nimport { BenjiConnectEnvironment } from '../types/config';\n\n// Defaults to dev\nconst env = (typeof process !== 'undefined' ? process.env : {});\nlet data = developmentConfig;\n// Derive endpoint type from dev config\ntype EndpointConfig = typeof developmentConfig.endpoints;\nexport let Endpoints: EndpointConfig = getEndpoints();\nexport let Environment = BenjiConnectEnvironment.DEVELOPMENT;\n\n// Configure with environment at runtime \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 }\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\n","import { BenjiConnectEnvironment } from \"../types/config\";\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.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 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 = 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,0BAAyB;AAAA,EACzB,kCAAmC;AACrC;;;ACAO,IAAK,0BAAL,kBAAKE,6BAAL;AACL,EAAAA,yBAAA,iBAAc;AACd,EAAAA,yBAAA,aAAU;AACV,EAAAA,yBAAA,gBAAa;AAHH,SAAAA;AAAA,GAAA;AAML,IAAK,mBAAL,kBAAKC,sBAAL;AACL,EAAAA,oCAAA,aAAU,KAAV;AACA,EAAAA,oCAAA,cAAW,KAAX;AACA,EAAAA,oCAAA,YAAS,KAAT;AAHU,SAAAA;AAAA,GAAA;;;ACLZ,IAAM,MAAO,OAAO,YAAY,cAAc,QAAQ,MAAM,CAAC;AAC7D,IAAI,OAAO;AAGJ,IAAI,YAA4B,aAAa;AAC7C,IAAI;AAGJ,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;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;;;ACrCO,IAAM,eAAe,OAAO;AAAA,EACjC,WAAmD,sBAAgB,sBAAgB;AAAA,EACnF,SAA+C,UAAc,OAAO,OAAW,IAAI;AACrF;AAEO,SAAS,0BACd,aACwC;AACxC,SACE,mDACA,2CACA;AAEJ;AAEO,SAAS,wBACd,aACyB;AAEzB,MAAI,0BAA0B,WAAW,EAAG,QAAO;AAEnD,QAAM,eAAwD;AAAA,IAC5D;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,SAAS,aAAa,WAAW;AACvC,MAAI,OAAQ,QAAO;AAEnB,QAAM;AACN,UAAQ,KAAK,uBAAuB,WAAW,wCAAwC,kBAAkB,EAAE;AAE3G,SAAO;AACT;;;AChCO,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","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.ts","../src/types/config.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};","export const project_environment: string = 'local';\n\nexport const endpoints: Record<string, string> = {\n 'benji_connect_auth_url': 'http://localhost:3000',\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}","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';\n\n// Defaults to local\nconst env = (typeof process !== 'undefined' ? process.env : {});\nlet data = localConfig;\n// Derive endpoint type from local config\ntype EndpointConfig = typeof localConfig.endpoints;\nexport let Endpoints: EndpointConfig = getEndpoints();\nexport let Environment = BenjiConnectEnvironment.LOCAL;\n\n// Configure with environment at runtime \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 console.log('[Connect SDK] configuring with environment local');\n data = localConfig;\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\";\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 = BenjiConnectEnvironment.LOCAL;\n console.warn(`[Benji Connect SDK] ${environment} not valid environment defaulting to ${defaultEnvironment}`);\n\n return defaultEnvironment;\n}","import { BenjiConnectAuthAction } from \"./auth\";\n\n// Known event names coming from the SDK transport (postMessage)\nexport enum BenjiConnectEventType {\n AUTH_SUCCESS = 'AUTH_SUCCESS',\n FLOW_EXIT = 'FLOW_EXIT',\n FLOW_SUCCESS = 'FLOW_SUCCESS',\n EVENT = 'EVENT',\n ERROR = 'ERROR',\n}\n\n// Known exit trigger types coming from the SDK transport (postMessage)\nexport enum BenjiConnectExitTrigger {\n ACTION_BUTTON_CLICKED = 'ACTION_BUTTON_CLICKED',\n BACK_TO_MERCHANT_CLICKED = 'BACK_TO_MERCHANT_CLICKED', // deprecated\n CLOSE_BUTTON_CLICKED = 'CLOSE_BUTTON_CLICKED',\n TAPPED_OUT_OF_BOUNDS = 'TAPPED_OUT_OF_BOUNDS'\n}\n\nexport enum BenjiConnectErrorName {\n UNEXPECTED_ERROR = 'unexpected_error',\n PARTNER_CONNECT_ERROR = 'partner_connect_error'\n}\n\nexport type BenjiConnectErrorID = '400' | '500'; // Placeholders for now\n\n// Transport-layer token (raw, unprocessed from postMessage)\nexport interface BenjiConnectEventToken {\n access_token: string;\n refresh_token: string;\n expires_at?: string | number;\n}\n\nexport interface BenjiConnectEventUserData {\n user: {\n id: number\n first_name: string\n last_name: string\n uuid?: string\n }\n status: BenjiConnectEventUserStatusData\n extra_data?: {\n total_rewards_earned?: number\n total_rewards_redeemed?: number\n created_date?: string\n }\n}\n\nexport interface BenjiConnectEventTransactionData {\n action: string;\n amount: number;\n trigger_event_id: string;\n trigger_name: string;\n}\n\nexport interface BenjiConnectEventUserStatusData {\n status_id: string\n num_of_rewards: number\n reward_status: string\n partner_status_tier_id?: number\n}\n\n// Basic structure for Benji Connect SDK typed events\nexport interface BenjiConnectEvent {\n type: BenjiConnectEventType;\n data?: BenjiConnectEventData;\n}\n\nexport interface BenjiConnectEventData {\n [k: string]: unknown;\n}\n\nexport interface BenjiConnectEventMessage<K extends BenjiConnectEventType = BenjiConnectEventType> {\n type: K; // discriminant\n data: BenjiConnectEventDataMap[K];\n}\n\nexport interface BenjiConnectAuthSuccessEventData {\n action: BenjiConnectAuthAction;\n metadata?: BenjiConnectEventUserData;\n token?: BenjiConnectEventToken,\n transaction?: BenjiConnectEventTransactionData;\n}\n\nexport interface BenjiConnectFlowExitEventData {\n step: string;\n trigger: BenjiConnectExitTrigger;\n}\n\nexport interface BenjiConnectErrorEventData {\n error: Error;\n}\n\n// Canonical event map \nexport type BenjiConnectEventDataMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: BenjiConnectAuthSuccessEventData;\n [BenjiConnectEventType.FLOW_EXIT]: BenjiConnectFlowExitEventData;\n [BenjiConnectEventType.FLOW_SUCCESS]: BenjiConnectAuthSuccessEventData;\n [BenjiConnectEventType.EVENT]: BenjiConnectEventData;\n [BenjiConnectEventType.ERROR]: BenjiConnectErrorEventData;\n\n // Optional catch-all fan-out\n '*': { type: BenjiConnectEventType; data: BenjiConnectEventDataMap[BenjiConnectEventType] };\n};","import { BenjiConnectAuthToken } from \"../types/auth\";\nimport { BenjiConnectEventToken } from \"../types/event\";\n\nexport const extractAccessToken = (token?: BenjiConnectEventToken | string): string =>\n typeof token === 'string' ? token : (token?.access_token ?? '');\n\nexport const mapEventToConnectToken = (data?: BenjiConnectEventToken): BenjiConnectAuthToken => ({\n access_token: data?.access_token ?? '',\n refresh_token: data?.refresh_token ?? '',\n expires_at: data?.expires_at ?? ''\n});","import { BenjiConnectEventUserData } from \"../types/event\";\nimport { BenjiConnectUserData } from \"../types/user\";\n\nexport function isConnectUserData (\n input: BenjiConnectUserData | Record<string, any>\n): boolean {\n if (!input) return false;\n const data = mapEventToConnectUserData(input);\n if (data.user.id != 0) return true;\n return false;\n}\n\nexport const mapEventToConnectUserData = (\n data?: BenjiConnectEventUserData | Record<string, any>\n): BenjiConnectUserData => ({\n user: {\n id: data?.user?.id ?? 0,\n first_name: data?.user?.first_name ?? '',\n last_name: data?.user?.last_name ?? '',\n uuid: data?.user?.uuid \n },\n status: {\n status_id: data?.status?.status_id ?? '',\n num_of_rewards: data?.status?.num_of_rewards ?? 0,\n reward_status: data?.status?.reward_status ?? '',\n partner_status_tier_id: data?.status?.partner_status_tier_id\n },\n extra_data: {\n total_rewards_earned: data?.extra_data?.total_rewards_earned,\n total_rewards_redeemed: data?.extra_data?.total_rewards_redeemed,\n created_date: data?.extra_data?.created_date\n }\n});\n","import { BenjiConnectEventTransactionData } from \"../types/event\";\nimport { BenjiConnectTransactionData } from \"../types/transaction\";\n\nexport const mapEventToConnectTransactionData = (data?: BenjiConnectEventTransactionData): BenjiConnectTransactionData | null => {\n if (!data) return null;\n return {\n action: data.action,\n amount: data.amount,\n trigger_event_id: data.trigger_event_id,\n trigger_name: data.trigger_name\n };\n}","import { \n BenjiConnectMetadata, \n BenjiConnectOnErrorData, \n BenjiConnectOnEventData, \n BenjiConnectOnExitData, \n BenjiConnectOnExitMetadata, \n BenjiConnectOnSuccessData, \n BenjiConnectOnSuccessMetadata \n} from './config';\n\nimport { \n extractAccessToken, \n mapEventToConnectToken \n} from '../utils/auth';\n\nimport { buildContext } from '../utils/config';\nimport { mapEventToConnectUserData } from '../utils/user';\n\nimport { \n BenjiConnectAuthSuccessEventData,\n BenjiConnectErrorEventData, \n BenjiConnectEventDataMap, \n BenjiConnectEventMessage, \n BenjiConnectEventType, \n BenjiConnectFlowExitEventData\n} from './event';\nimport { mapEventToConnectTransactionData } from '../utils/transaction';\n\nexport type MessageRouterConfig = {\n onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n close?: () => void;\n};\n\nexport const mapToAuthSuccessData = (\n message: BenjiConnectEventMessage<BenjiConnectEventType.AUTH_SUCCESS>,\n data: BenjiConnectAuthSuccessEventData\n): BenjiConnectOnEventData => {\n return {\n type: message.type,\n metadata: {\n context: buildContext(),\n action: data.action,\n token: mapEventToConnectToken(data.token),\n transactionData: mapEventToConnectTransactionData(data.transaction),\n userData: mapEventToConnectUserData(data.metadata)\n }\n };\n};\n\nexport const mapToOnExitData = (data: BenjiConnectFlowExitEventData): BenjiConnectOnExitData => {\n return {\n metadata: {\n context: buildContext(),\n step: data.step,\n trigger: data.trigger\n }\n };\n};\n\nexport const mapToOnSuccessData = (data: BenjiConnectAuthSuccessEventData): BenjiConnectOnSuccessData => {\n \n const token = extractAccessToken(data.token);\n\n let metadata: BenjiConnectOnSuccessMetadata = {\n context: buildContext(),\n action: data.action,\n user_data: data.metadata\n };\n\n if (data.transaction) {\n metadata.transaction_data = data.transaction;\n }\n \n return { token, metadata };\n};\n\nexport const mapToOnErrorData = (data: BenjiConnectErrorEventData): BenjiConnectOnErrorData => {\n return {\n error: data.error,\n error_id: '500', // Placeholder\n metadata: {\n context: buildContext()\n }\n };\n};\n\nexport const mapToOnEventData = <K extends BenjiConnectEventType>(\n message: BenjiConnectEventMessage<K>,\n data: BenjiConnectEventDataMap[K]\n): BenjiConnectOnEventData => {\n return {\n type: message.type,\n metadata: {\n context: buildContext(),\n ...data\n }\n };\n};\n\nexport type BenjiConnectCallbackDataMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: BenjiConnectOnEventData;\n [BenjiConnectEventType.FLOW_EXIT]: BenjiConnectOnExitData;\n [BenjiConnectEventType.FLOW_SUCCESS]: BenjiConnectOnSuccessData;\n [BenjiConnectEventType.ERROR]: BenjiConnectOnErrorData;\n [BenjiConnectEventType.EVENT]: BenjiConnectOnEventData;\n '*': BenjiConnectOnEventData;\n};\n\nexport const BenjiConnectCallbackMapperMap = {\n [BenjiConnectEventType.AUTH_SUCCESS]: mapToAuthSuccessData,\n [BenjiConnectEventType.FLOW_EXIT]: mapToOnExitData,\n [BenjiConnectEventType.FLOW_SUCCESS]: mapToOnSuccessData,\n [BenjiConnectEventType.ERROR]: mapToOnErrorData,\n [BenjiConnectEventType.EVENT]: mapToOnEventData,\n} as const;\n\n","import { \n Endpoints\n} from '../config';\n\nimport {\n BenjiConnectEventType,\n type BenjiConnectEventData,\n type BenjiConnectEventMessage\n} from '../types/event';\n\nimport type {\n BenjiConnectOnSuccessData,\n BenjiConnectOnExitData,\n BenjiConnectMetadata,\n BenjiConnectOnSuccessMetadata,\n BenjiConnectOnExitMetadata\n} from '../types/config';\n\nimport {\n BenjiConnectCallbackMapperMap,\n MessageRouterConfig,\n mapToOnEventData\n} from '../types/router';\n\nexport class MessageRouter {\n\n static configuredListeners = false;\n static onSuccess?: (\n token: string, \n metadata: BenjiConnectOnSuccessMetadata\n ) => void;\n static onError?: (\n error: Error,\n error_id: string,\n metadata: BenjiConnectMetadata\n ) => void;\n static onExit?: (\n metadata: BenjiConnectOnExitMetadata\n ) => void;\n static onEvent?: (\n type: BenjiConnectEventType, \n metadata: BenjiConnectMetadata\n ) => void;\n static close?: () => void;\n\n static configureMessageRouter(config: MessageRouterConfig) {\n this.onSuccess = config.onSuccess;\n this.onError = config.onError;\n this.onExit = config.onExit;\n this.onEvent = config.onEvent;\n this.close = config.close;\n }\n\n static errorEventHandler = (event: Event) => { \n return MessageRouter.handleErrorMessage(event) \n };\n\n static messageEventHandler = (event: MessageEvent<unknown>) => { \n return MessageRouter.handleMessage(event) \n };\n\n static addEventListeners() {\n if (this.configuredListeners) return;\n window.addEventListener('error', this.errorEventHandler);\n window.addEventListener('unhandledrejection', this.errorEventHandler);\n window.addEventListener('message', this.messageEventHandler);\n this.configuredListeners = true;\n\n // Test uncaught error handling\n // Promise.reject(new Error('[Benji Connect SDK] MessageRouter Test rejection'));\n // throw new Error('[Benji Connect SDK] MessageRouter Test error');\n }\n\n static removeEventListeners() {\n window.removeEventListener('error', this.errorEventHandler);\n window.removeEventListener('unhandledrejection', this.errorEventHandler);\n window.removeEventListener('message', this.messageEventHandler);\n this.configuredListeners = false;\n }\n\n static handleErrorMessage(event: Event) { \n switch(event.type) {\n case 'error': {\n const errorEvent = event as ErrorEvent;\n const error = errorEvent.error || new Error(errorEvent.message);\n // TODO: Track error\n break;\n }\n case 'unhandledrejection': {\n const rejectionEvent = event as PromiseRejectionEvent;\n const reason = rejectionEvent.reason instanceof Error\n ? rejectionEvent.reason\n : new Error(String(rejectionEvent.reason));\n // TODO: Track error (reason)\n break;\n }\n default: {\n console.error('[Benji Connect SDK] Received Unknown error message', event);\n break;\n }\n }\n }\n\n static handleMessage(event: MessageEvent<unknown>) {\n\n console.debug('[Benji Connect SDK] Received message', event);\n \n // Basic origin check\n const expectedOrigin: string = new URL(Endpoints.benji_connect_auth_url).origin;\n if (!event || event.origin !== expectedOrigin) {\n console.warn('[Benji Connect SDK] Skipped message, received event from unexpected origin', event.origin, expectedOrigin);\n return;\n }\n\n const raw = event.data;\n if (!raw || typeof raw !== 'object') return;\n\n const partial = raw as Partial<BenjiConnectEventMessage>;\n if (typeof partial.type !== 'string') return;\n \n const message = partial as BenjiConnectEventMessage;\n\n // TODO: Proper Constraint checks\n // if (Namespace && message.namespace && message.namespace !== Namespace) return;\n // if (Version != null && message.version != null && String(message.version) !== String(Version)) return;\n\n // TODO: Track message received either here or below but not both\n \n try {\n // Type events and route to callbacks\n switch (message.type) {\n\n case BenjiConnectEventType.AUTH_SUCCESS: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.AUTH_SUCCESS>;\n const callbackData = BenjiConnectCallbackMapperMap.AUTH_SUCCESS(connectMessage, connectMessage.data);\n // TODO: Track message received?\n this.onEvent?.(callbackData.type, callbackData.metadata); \n break;\n }\n\n case BenjiConnectEventType.FLOW_EXIT: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.FLOW_EXIT>;\n const callbackData = BenjiConnectCallbackMapperMap.FLOW_EXIT(connectMessage.data) as BenjiConnectOnExitData;\n // TODO: Track message received?\n this.onExit?.(callbackData.metadata);\n this.close?.();\n break;\n }\n\n case BenjiConnectEventType.FLOW_SUCCESS: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.FLOW_SUCCESS>;\n // TODO: Track message received?\n // Forward onSuccess when flow completes for connect, redeem and transfer \n const callbackData = BenjiConnectCallbackMapperMap.FLOW_SUCCESS(connectMessage.data) as BenjiConnectOnSuccessData;\n this.onSuccess?.(callbackData.token, callbackData.metadata); \n break;\n }\n\n case BenjiConnectEventType.ERROR: {\n const connectMessage = message as BenjiConnectEventMessage<BenjiConnectEventType.ERROR>;\n // TODO: Track message received?\n const callbackData = BenjiConnectCallbackMapperMap.ERROR(connectMessage.data);\n this.onError?.(callbackData.error, callbackData.error_id, callbackData.metadata);\n break;\n }\n\n default: {\n // Unknown event type (forward generically)\n const m = message as BenjiConnectEventMessage<any>;\n // TODO: Track message received?\n const callbackData = mapToOnEventData(m, m.data as BenjiConnectEventData);\n this.onEvent?.(callbackData.type, callbackData.metadata);\n break;\n }\n }\n } finally {\n // TODO: Any cleanup logic \n }\n }\n\n}","/// <reference path=\"./global.d.ts\" />\n\nimport { \n configureConfig, \n Endpoints\n} from './config';\n\nimport { \n type BenjiConnectConfig, \n BenjiConnectEnvironment\n} from './types/config';\n\nimport { \n buildContext, \n mapToConnectEnvironment \n} from './utils/config';\n\nimport { MessageRouter } from './router/message';\nimport { BenjiConnectExitTrigger } from './types/event';\n\nclass ConnectSDK {\n\n private sdkConfig: BenjiConnectConfig;\n private iframe: HTMLIFrameElement | null = null;\n private container: HTMLDivElement | null = null;\n\n constructor(config: BenjiConnectConfig) {\n\n this.sdkConfig = config;\n\n // Validations\n if (!this.sdkConfig.environment) throw new Error('Environment is required');\n if (!this.sdkConfig.token) throw new Error('Connect token is required');\n\n // Set internal config for environment based on consumer input at runtime\n const environment: BenjiConnectEnvironment = mapToConnectEnvironment(this.sdkConfig.environment);\n this.sdkConfig.environment = environment;\n configureConfig(environment);\n }\n\n async initialize() {\n \n // Configure message router for all postMessage from connect modal and error messages\n MessageRouter.configureMessageRouter({\n onSuccess: this.sdkConfig.onSuccess,\n onError: this.sdkConfig.onError,\n onExit: this.sdkConfig.onExit,\n onEvent: this.sdkConfig.onEvent,\n close: () => this.close()\n });\n\n // TODO: Tracker.configureWithOptions(sdkOptions);\n // TODO: Tracker.trackSDKInitialized();\n }\n\n async open() {\n await this.initialize();\n this.openUI();\n MessageRouter.addEventListeners();\n // TODO: Track SDK Opened Tracker.trackSDKOpened();\n }\n\n openUI() {\n if (this.iframe) return;\n\n // container\n this.container = document.createElement('div');\n Object.assign(this.container.style, {\n position: 'fixed', \n top: '0', \n left: '0', \n width: '100%', \n height: '100%',\n backgroundColor: 'rgba(0,0,0,0.5)', \n zIndex: '9999', \n display: 'flex',\n alignItems: 'center', \n justifyContent: 'center', \n overflow: 'auto'\n } as CSSStyleDeclaration);\n\n // iframe\n console.debug('[Connect SDK] endpoints', Endpoints);\n console.log('[Connect SDK] opeining URL', Endpoints.benji_connect_auth_url);\n const url = new URL(Endpoints.benji_connect_auth_url);\n const connectToken = this.sdkConfig.token;\n url.searchParams.set('connect_token', connectToken);\n url.searchParams.set('t', String(Date.now()));\n\n this.iframe = document.createElement('iframe');\n Object.assign(this.iframe.style, {\n position: 'relative', \n width: '400px', \n height: '645px',\n border: 'none', \n borderRadius: '20px', \n overflow: 'hidden'\n } as CSSStyleDeclaration);\n this.iframe.src = url.toString();\n\n this.container.appendChild(this.iframe);\n document.body.appendChild(this.container);\n\n this.container.addEventListener('click', (e) => {\n if (e.target === this.container) {\n // Trigger exit when user taps outside modal bounds\n this.sdkConfig.onExit?.({\n context: buildContext(),\n trigger: BenjiConnectExitTrigger.TAPPED_OUT_OF_BOUNDS\n });\n this.close();\n }\n });\n }\n\n close() {\n if (!this.iframe) return;\n document.body.removeChild(this.container!);\n MessageRouter.removeEventListeners();\n // TODO: Track SDK Closed Tracker.trackSDKClosed();\n this.iframe = null;\n this.container = null;\n }\n\n cleanup() {\n if (this.iframe) this.close();\n }\n\n ping() { return 'pong'; }\n}\n\nexport default ConnectSDK;","// Import the default export from connect-sdk.ts\nimport ConnectSDK from './connect-sdk';\nimport { BenjiConnectEventType } from './types/event';\n\n// Re-export both default and a named export so consumers can do either:\n// import ConnectSDK from '...'\n// import { ConnectSDK } from '...'\n// Also provide a default export (optional but helpful for JS users)\nexport default ConnectSDK;\nexport { ConnectSDK };\n\n// Expose Public types\nexport * from './types/config';\nexport { \n BenjiConnectErrorID,\n BenjiConnectErrorName,\n BenjiConnectEventType,\n BenjiConnectExitTrigger,\n} from './types/event';"],"mappings":"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","names":["endpoints","project_environment","endpoints","project_environment","endpoints","project_environment","BenjiConnectEnvironment","BenjiConnectMode","BenjiConnectEventType","BenjiConnectExitTrigger","BenjiConnectErrorName","data","data","data","data"]}
|