@whop/react-native 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/index.d.mts +5 -2
- package/dist/lib/index.d.ts +5 -2
- package/dist/lib/index.js +12 -2
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/index.mjs +12 -2
- package/dist/lib/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/lib/index.d.mts
CHANGED
|
@@ -7,6 +7,9 @@ interface PathParams {
|
|
|
7
7
|
path: string[];
|
|
8
8
|
params: Record<string, string>;
|
|
9
9
|
}
|
|
10
|
+
interface PathParamsWithOrigin extends PathParams {
|
|
11
|
+
origin?: string | null | undefined;
|
|
12
|
+
}
|
|
10
13
|
interface BaseViewProps extends PathParams {
|
|
11
14
|
currentUserId: string | undefined | null;
|
|
12
15
|
}
|
|
@@ -34,7 +37,7 @@ interface ExecSyncApi {
|
|
|
34
37
|
key?: string | null;
|
|
35
38
|
data?: string | null;
|
|
36
39
|
}): EmptyObject;
|
|
37
|
-
routerPush(params:
|
|
40
|
+
routerPush(params: PathParamsWithOrigin): EmptyObject;
|
|
38
41
|
routerPop(params: EmptyObject): EmptyObject;
|
|
39
42
|
routerGetCurrent(params: EmptyObject): PathParams;
|
|
40
43
|
setNavigationBarData(params: {
|
|
@@ -81,4 +84,4 @@ declare const Haptics: {
|
|
|
81
84
|
trigger(type: HapticType, options?: HapticOptions): Promise<void>;
|
|
82
85
|
};
|
|
83
86
|
|
|
84
|
-
export { type DashboardViewProps, type DiscoverViewProps, type ExecAsyncApi, type ExecSyncApi, type ExperienceViewProps, Haptics, type PathParams, __internal_execAsync, __internal_execSync, whopSdk };
|
|
87
|
+
export { type DashboardViewProps, type DiscoverViewProps, type ExecAsyncApi, type ExecSyncApi, type ExperienceViewProps, Haptics, type PathParams, type PathParamsWithOrigin, __internal_execAsync, __internal_execSync, whopSdk };
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -7,6 +7,9 @@ interface PathParams {
|
|
|
7
7
|
path: string[];
|
|
8
8
|
params: Record<string, string>;
|
|
9
9
|
}
|
|
10
|
+
interface PathParamsWithOrigin extends PathParams {
|
|
11
|
+
origin?: string | null | undefined;
|
|
12
|
+
}
|
|
10
13
|
interface BaseViewProps extends PathParams {
|
|
11
14
|
currentUserId: string | undefined | null;
|
|
12
15
|
}
|
|
@@ -34,7 +37,7 @@ interface ExecSyncApi {
|
|
|
34
37
|
key?: string | null;
|
|
35
38
|
data?: string | null;
|
|
36
39
|
}): EmptyObject;
|
|
37
|
-
routerPush(params:
|
|
40
|
+
routerPush(params: PathParamsWithOrigin): EmptyObject;
|
|
38
41
|
routerPop(params: EmptyObject): EmptyObject;
|
|
39
42
|
routerGetCurrent(params: EmptyObject): PathParams;
|
|
40
43
|
setNavigationBarData(params: {
|
|
@@ -81,4 +84,4 @@ declare const Haptics: {
|
|
|
81
84
|
trigger(type: HapticType, options?: HapticOptions): Promise<void>;
|
|
82
85
|
};
|
|
83
86
|
|
|
84
|
-
export { type DashboardViewProps, type DiscoverViewProps, type ExecAsyncApi, type ExecSyncApi, type ExperienceViewProps, Haptics, type PathParams, __internal_execAsync, __internal_execSync, whopSdk };
|
|
87
|
+
export { type DashboardViewProps, type DiscoverViewProps, type ExecAsyncApi, type ExecSyncApi, type ExperienceViewProps, Haptics, type PathParams, type PathParamsWithOrigin, __internal_execAsync, __internal_execSync, whopSdk };
|
package/dist/lib/index.js
CHANGED
|
@@ -192,7 +192,16 @@ var syncHandlers = {
|
|
|
192
192
|
return {};
|
|
193
193
|
},
|
|
194
194
|
routerPush(route) {
|
|
195
|
-
|
|
195
|
+
if (route.origin) {
|
|
196
|
+
const path = `/${route.path.join("/")}`;
|
|
197
|
+
const url = new URL(path, route.origin);
|
|
198
|
+
for (const [k, v] of Object.entries(route.params ?? {})) {
|
|
199
|
+
url.searchParams.set(k, v);
|
|
200
|
+
}
|
|
201
|
+
loadIframeSdk().then((sdk) => sdk.openExternalUrl({ url: url.href }));
|
|
202
|
+
} else {
|
|
203
|
+
navigation.push(route);
|
|
204
|
+
}
|
|
196
205
|
return {};
|
|
197
206
|
},
|
|
198
207
|
routerPop() {
|
|
@@ -246,7 +255,8 @@ async function loadIframeSdk() {
|
|
|
246
255
|
if (!iframeSdk) {
|
|
247
256
|
const module2 = await loadIframeModule();
|
|
248
257
|
iframeSdk = module2.createSdk({
|
|
249
|
-
appId: process.env.NEXT_PUBLIC_WHOP_APP_ID
|
|
258
|
+
appId: process.env.NEXT_PUBLIC_WHOP_APP_ID,
|
|
259
|
+
overrideParentOrigins: ["https://whop.com", "http://localhost:8004"]
|
|
250
260
|
});
|
|
251
261
|
}
|
|
252
262
|
return iframeSdk;
|
package/dist/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/index.ts","../../src/lib/client-sdk.ts","../../src/lib/native-whop-core.ts","../../src/lib/native-whop-core-stub.ts","../../src/lib/native-whop-core-wrapper.ts","../../src/lib/haptics.ts"],"sourcesContent":["export * from \"./client-sdk\";\nexport * from \"./native-whop-core-wrapper\";\nexport * from \"./props\";\nimport Haptics from \"./haptics\";\n\nexport { Haptics };\n","import Whop from \"@whop/sdk\";\nimport { Platform } from \"react-native\";\nimport { __internal_execSync } from \"./native-whop-core-wrapper\";\n\nfunction getAppOrigin() {\n\tif (Platform.OS === \"android\" || Platform.OS === \"ios\") {\n\t\treturn __internal_execSync(\"getAppApiOrigin\", {}).apiOrigin;\n\t}\n\n\tif (Platform.OS === \"web\" && typeof window !== \"undefined\") {\n\t\treturn window.location.origin;\n\t}\n\n\tthrow new Error(`Unsupported platform: ${Platform.OS}`);\n}\n\nconst appOrigin = getAppOrigin();\n\nexport const whopSdk = new Whop({\n\tapiKey: \"client\",\n\tappID: \"client\",\n\tbaseURL: new URL(\"/_whop/api/v1/\", appOrigin).href,\n});\n\nexport * from \"@whop/sdk\";\n","import type { TurboModule } from \"react-native\";\nimport { TurboModuleRegistry } from \"react-native\";\nimport stub from \"./native-whop-core-stub\";\n\nexport type FunctionCallResult = {\n\tisOk: boolean;\n\tdata: string | null;\n\terrorMessage: string | null;\n};\n\nexport interface Spec extends TurboModule {\n\texecSync(name: string, paramsJson: string): FunctionCallResult;\n\texecAsync(name: string, paramsJson: string): Promise<FunctionCallResult>;\n}\n\nfunction resolveNative(): Spec | null {\n\ttry {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tconst registry: any = TurboModuleRegistry as any;\n\t\tconst get = registry?.getEnforcing ?? registry?.get;\n\t\tif (typeof get === \"function\") {\n\t\t\treturn get.call(registry, \"NativeWhopCore\") as Spec;\n\t\t}\n\t\treturn null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nconst native = resolveNative();\n\nexport default native ?? (stub as Spec);\n","import { Platform } from \"react-native\";\nimport type { ExecAsyncApi, ExecSyncApi } from \"./native-whop-core-wrapper\";\n\nexport type FunctionCallResult = {\n\tisOk: boolean;\n\tdata: string | null;\n\terrorMessage: string | null;\n};\n\ntype Route = { path: string[]; params: Record<string, string> };\n\nclass WhopCoreObservable<T> {\n\tprivate subscribers: Set<(value: T) => void> = new Set();\n\tprivate value: T;\n\n\tconstructor(value: T) {\n\t\tthis.value = value;\n\t}\n\n\tsetValue(value: T) {\n\t\tthis.value = value;\n\t\tfor (const callback of this.subscribers) {\n\t\t\tcallback(value);\n\t\t}\n\t}\n\n\tgetValue() {\n\t\treturn this.value;\n\t}\n\n\tsubscribe(callback: (value: T) => void) {\n\t\tthis.subscribers.add(callback);\n\t\treturn () => {\n\t\t\tthis.subscribers.delete(callback);\n\t\t};\n\t}\n}\n\nclass WhopCoreNavigation {\n\tpublic path = new WhopCoreObservable<Route[]>([]);\n\tpublic sheet = new WhopCoreObservable<Route | null>(null);\n\n\tconstructor() {\n\t\tthis.getFullStack = this.getFullStack.bind(this);\n\t\tthis.getCurrentSheet = this.getCurrentSheet.bind(this);\n\t\tthis.subscribeToPath = this.subscribeToPath.bind(this);\n\t\tthis.subscribeToSheet = this.subscribeToSheet.bind(this);\n\t}\n\n\tpush(route: Route) {\n\t\tif (this.getCurrent().path.join(\"/\") === route.path.join(\"/\")) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.path.setValue([...this.path.getValue(), route]);\n\t\tif (typeof window !== \"undefined\" && window.history) {\n\t\t\ttry {\n\t\t\t\tconst pathBits = route.path.join(\"/\");\n\t\t\t\tconst paramsBits = Object.entries(route.params)\n\t\t\t\t\t.map(([key, value]) => `${key}=${value}`)\n\t\t\t\t\t.join(\"&\");\n\t\t\t\twindow.history.pushState(\n\t\t\t\t\t{ route, index: this.path.getValue().length },\n\t\t\t\t\t\"\",\n\t\t\t\t\t`#${pathBits}?${paramsBits}`,\n\t\t\t\t);\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\tpop() {\n\t\tif (typeof window !== \"undefined\" && window.history) {\n\t\t\ttry {\n\t\t\t\twindow.history.back();\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\tgetFullStack() {\n\t\treturn this.path.getValue();\n\t}\n\n\tgetCurrent() {\n\t\treturn (\n\t\t\tthis.path.getValue()[this.path.getValue().length - 1] ?? {\n\t\t\t\tpath: [],\n\t\t\t\tparams: {},\n\t\t\t}\n\t\t);\n\t}\n\n\tpresentSheet(route: Route) {\n\t\tthis.sheet.setValue(route);\n\t}\n\n\tdismissSheet() {\n\t\tthis.sheet.setValue(null);\n\t}\n\n\tgetCurrentSheet() {\n\t\treturn this.sheet.getValue() ?? null;\n\t}\n\n\tsubscribeToPath(callback: (route: Route[]) => void) {\n\t\treturn this.path.subscribe(callback);\n\t}\n\n\tsubscribeToSheet(callback: (route: Route | null) => void) {\n\t\treturn this.sheet.subscribe(callback);\n\t}\n}\n\nexport type TWhopCoreNavigation = WhopCoreNavigation;\n\nconst navigation = new WhopCoreNavigation();\nif (typeof window !== \"undefined\" && Platform.OS === \"web\") {\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t(window as any).whopCoreNavigation = navigation;\n\n\twindow.addEventListener(\"popstate\", (e) => {\n\t\tconst currentLength = navigation.path.getValue().length;\n\t\tif (!e.state) {\n\t\t\tnavigation.path.setValue(navigation.path.getValue().slice(0, -1));\n\t\t\treturn;\n\t\t}\n\t\tconst index = e.state.index;\n\t\tconst route = e.state.route;\n\t\tif (index < currentLength) {\n\t\t\tnavigation.path.setValue(navigation.path.getValue().slice(0, -1));\n\t\t} else {\n\t\t\tnavigation.path.setValue([...navigation.path.getValue(), route]);\n\t\t}\n\t});\n}\n\nfunction ok(data: unknown): FunctionCallResult {\n\treturn { isOk: true, data: JSON.stringify(data), errorMessage: null };\n}\n\nfunction err(message: string): FunctionCallResult {\n\treturn { isOk: false, data: null, errorMessage: message };\n}\n\nfunction getOrigin(): string {\n\tif (typeof window !== \"undefined\" && window.location) {\n\t\treturn window.location.origin;\n\t}\n\treturn \"\";\n}\n\nconst syncHandlers: ExecSyncApi = {\n\tgetAppApiOrigin() {\n\t\treturn { apiOrigin: getOrigin() };\n\t},\n\tcacheGet({ key }: { key?: string | null }) {\n\t\ttry {\n\t\t\tif (typeof window !== \"undefined\" && window.localStorage && key) {\n\t\t\t\treturn { data: window.localStorage.getItem(key) };\n\t\t\t}\n\t\t\treturn { data: null };\n\t\t} catch {\n\t\t\treturn { data: null };\n\t\t}\n\t},\n\tcacheSet({ key, data }: { key?: string | null; data?: string | null }) {\n\t\ttry {\n\t\t\tif (typeof window !== \"undefined\" && window.localStorage && key != null) {\n\t\t\t\tif (data == null) {\n\t\t\t\t\twindow.localStorage.removeItem(key);\n\t\t\t\t} else {\n\t\t\t\t\twindow.localStorage.setItem(key, data);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {}\n\t\treturn {};\n\t},\n\trouterPush(route: Route) {\n\t\tnavigation.push(route);\n\t\treturn {};\n\t},\n\trouterPop() {\n\t\tnavigation.pop();\n\t\treturn {};\n\t},\n\trouterGetCurrent() {\n\t\treturn navigation.getCurrent();\n\t},\n\tsetNavigationBarData() {\n\t\treturn {};\n\t},\n\trouterPresentSheet({ path, params }: Route) {\n\t\tnavigation.presentSheet({\n\t\t\tpath: Array.from(path ?? []),\n\t\t\tparams: params ?? {},\n\t\t});\n\t\treturn {};\n\t},\n\trouterDismissSheet() {\n\t\tnavigation.dismissSheet();\n\t\treturn {};\n\t},\n\trouterGetCurrentSheet() {\n\t\treturn navigation.getCurrentSheet() ?? null;\n\t},\n\tdowngradeToWebView() {\n\t\treturn {};\n\t},\n\tgetHostAppDetails() {\n\t\treturn {\n\t\t\tbuild: \"web\",\n\t\t\tversion: \"0.0.0\",\n\t\t\tplatform: \"web\",\n\t\t\tbuildType: \"appstore\",\n\t\t};\n\t},\n\tsetScreenOrientationMode() {\n\t\treturn {};\n\t},\n};\n\nlet iframeModulePromise: Promise<typeof import(\"@whop/iframe\")> | null = null;\n\nasync function loadIframeModule() {\n\tif (!iframeModulePromise) {\n\t\tiframeModulePromise = import(\"@whop/iframe\");\n\t}\n\treturn await iframeModulePromise;\n}\n\nlet iframeSdk: ReturnType<typeof import(\"@whop/iframe\").createSdk> | null =\n\tnull;\n\nasync function loadIframeSdk() {\n\tif (!iframeSdk) {\n\t\tconst module = await loadIframeModule();\n\t\tiframeSdk = module.createSdk({\n\t\t\tappId: process.env.NEXT_PUBLIC_WHOP_APP_ID,\n\t\t});\n\t}\n\treturn iframeSdk;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\ntype MakeAsync<T extends Record<string, any>> = {\n\t[K in keyof T]: (params: Parameters<T[K]>[0]) => Promise<ReturnType<T[K]>>;\n};\n\nconst asyncHandlers: MakeAsync<Pick<ExecAsyncApi, \"inAppPurchase\">> = {\n\tinAppPurchase: async ({ planId, id }) => {\n\t\tconst sdk = await loadIframeSdk();\n\t\tconst result = await sdk.inAppPurchase({ planId, id: id ?? undefined });\n\t\tif (result.status === \"ok\") {\n\t\t\treturn {\n\t\t\t\tsessionId: result.data.sessionId,\n\t\t\t\treceiptId: result.data.receiptId,\n\t\t\t};\n\t\t}\n\t\tthrow new Error(result.error);\n\t},\n};\n\nconst nativeWhopCoreStub = {\n\texecSync(name: string, paramsJson: string): FunctionCallResult {\n\t\ttry {\n\t\t\tconst params = paramsJson ? JSON.parse(paramsJson) : {};\n\t\t\tconst handler = syncHandlers[name as keyof typeof syncHandlers];\n\t\t\tif (!handler) return err(`Unknown sync method: ${name}`);\n\t\t\tconst result = handler(params);\n\t\t\treturn ok(result);\n\t\t} catch (e) {\n\t\t\treturn err(e instanceof Error ? e.message : \"Unknown error\");\n\t\t}\n\t},\n\tasync execAsync(\n\t\tname: string,\n\t\tparamsJson: string,\n\t): Promise<FunctionCallResult> {\n\t\ttry {\n\t\t\tconst params = paramsJson ? JSON.parse(paramsJson) : {};\n\t\t\tconst handler = (\n\t\t\t\tasyncHandlers as Record<string, (p: unknown) => Promise<unknown>>\n\t\t\t)[name];\n\t\t\tif (!handler) return err(`Unknown async method: ${name}`);\n\t\t\tconst result = await handler(params);\n\t\t\treturn ok(result);\n\t\t} catch (e) {\n\t\t\treturn err(e instanceof Error ? e.message : \"Unknown error\");\n\t\t}\n\t},\n};\n\nexport default nativeWhopCoreStub;\n","import nativeWhopCore from \"./native-whop-core\";\nimport type { PathParams } from \"./props\";\n\n// biome-ignore lint/complexity/noBannedTypes: allow here\ntype EmptyObject = {};\n\nexport interface ExecSyncApi {\n\tgetAppApiOrigin(params: EmptyObject): { apiOrigin: string };\n\tcacheGet(params: { key?: string | null }): { data?: string | null };\n\tcacheSet(params: { key?: string | null; data?: string | null }): EmptyObject;\n\trouterPush(params: PathParams): EmptyObject;\n\trouterPop(params: EmptyObject): EmptyObject;\n\trouterGetCurrent(params: EmptyObject): PathParams;\n\tsetNavigationBarData(params: {\n\t\ttitle?: string | null;\n\t\tdescription?: string | null;\n\t}): EmptyObject;\n\trouterPresentSheet(params: PathParams): EmptyObject;\n\trouterDismissSheet(params: EmptyObject): EmptyObject;\n\trouterGetCurrentSheet(params: EmptyObject): PathParams | null | undefined;\n\tdowngradeToWebView(params: EmptyObject): EmptyObject;\n\tgetHostAppDetails(params: EmptyObject): {\n\t\tbuild: string;\n\t\tversion: string;\n\t\tplatform: \"ios\" | \"android\" | \"web\";\n\t\tbuildType: \"appstore\" | \"testflight\" | \"debug\";\n\t};\n\tsetScreenOrientationMode(params: {\n\t\ttargetScreenOrientationMode: \"portrait\" | \"landscape\" | \"rotate\";\n\t}): EmptyObject;\n}\n\nexport interface ExecAsyncApi extends ExecSyncApi {\n\tinAppPurchase(params: {\n\t\tid?: string | null;\n\t\tplanId: string;\n\t}): {\n\t\tsessionId: string;\n\t\treceiptId: string;\n\t};\n}\n\nexport function __internal_execSync<F extends keyof ExecSyncApi>(\n\tname: F,\n\tparams: Parameters<ExecSyncApi[F]>[0],\n): ReturnType<ExecSyncApi[F]> {\n\tconst resultJson = nativeWhopCore.execSync(name, JSON.stringify(params));\n\tif (!resultJson.isOk) {\n\t\tthrow new Error(`Failed to execute ${name}: ${resultJson.errorMessage}`);\n\t}\n\n\treturn JSON.parse(resultJson.data || \"{}\") as ReturnType<ExecSyncApi[F]>;\n}\n\nexport async function __internal_execAsync<F extends keyof ExecAsyncApi>(\n\tname: F,\n\tparams: Parameters<ExecAsyncApi[F]>[0],\n): Promise<ReturnType<ExecAsyncApi[F]>> {\n\tconst resultJson = await nativeWhopCore.execAsync(\n\t\tname,\n\t\tJSON.stringify(params),\n\t);\n\n\tif (!resultJson.isOk) {\n\t\tthrow new Error(`Failed to execute ${name}: ${resultJson.errorMessage}`);\n\t}\n\n\treturn JSON.parse(resultJson.data || \"{}\") as ReturnType<ExecAsyncApi[F]>;\n}\n","/**\n * Web-safe wrapper for react-native-haptic-feedback.\n * - Lazily imports the native module only in native environments.\n * - Provides a no-op fallback on web to avoid runtime crashes.\n */\n\ntype HapticType =\n\t| \"selection\"\n\t| \"impactLight\"\n\t| \"impactMedium\"\n\t| \"impactHeavy\"\n\t| \"notificationSuccess\"\n\t| \"notificationWarning\"\n\t| \"notificationError\";\n\ntype HapticOptions = {\n\tenableVibrateFallback?: boolean;\n\tignoreAndroidSystemSettings?: boolean;\n};\n\n// Singleton holder for the native module once loaded\nlet nativeModule: {\n\ttrigger: (type: HapticType, options?: HapticOptions) => void;\n} | null = null;\nlet loadingPromise: Promise<void> | null = null;\n\nasync function ensureNativeLoaded(): Promise<void> {\n\t// If on web, skip loading entirely\n\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n\t// @ts-ignore - process may not be typed in RN web builds\n\tconst isWeb =\n\t\ttypeof document !== \"undefined\" && typeof window !== \"undefined\";\n\tif (isWeb) return;\n\n\tif (nativeModule || loadingPromise) {\n\t\treturn loadingPromise ?? Promise.resolve();\n\t}\n\n\tloadingPromise = import(\"react-native-haptic-feedback\")\n\t\t.then((mod) => {\n\t\t\tnativeModule = { trigger: mod.default.trigger };\n\t\t})\n\t\t.catch(() => {\n\t\t\t// Keep nativeModule null; fall back to noop\n\t\t})\n\t\t.finally(() => {\n\t\t\tloadingPromise = null;\n\t\t});\n\n\treturn loadingPromise;\n}\n\nconst HAPTIC_NOOP = {\n\ttrigger: (_type: HapticType, _options?: HapticOptions) => {\n\t\t// no-op on web\n\t},\n};\n\nconst Haptics = {\n\tasync trigger(type: HapticType, options?: HapticOptions): Promise<void> {\n\t\tawait ensureNativeLoaded();\n\t\tif (nativeModule) {\n\t\t\ttry {\n\t\t\t\tnativeModule.trigger(type, options);\n\t\t\t} catch {\n\t\t\t\t// ignore\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tHAPTIC_NOOP.trigger(type, options);\n\t},\n};\n\nexport default Haptics;\n"],"mappings":"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","names":["import_react_native","import_react_native","module","Whop"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/index.ts","../../src/lib/client-sdk.ts","../../src/lib/native-whop-core.ts","../../src/lib/native-whop-core-stub.ts","../../src/lib/native-whop-core-wrapper.ts","../../src/lib/haptics.ts"],"sourcesContent":["export * from \"./client-sdk\";\nexport * from \"./native-whop-core-wrapper\";\nexport * from \"./props\";\nimport Haptics from \"./haptics\";\n\nexport { Haptics };\n","import Whop from \"@whop/sdk\";\nimport { Platform } from \"react-native\";\nimport { __internal_execSync } from \"./native-whop-core-wrapper\";\n\nfunction getAppOrigin() {\n\tif (Platform.OS === \"android\" || Platform.OS === \"ios\") {\n\t\treturn __internal_execSync(\"getAppApiOrigin\", {}).apiOrigin;\n\t}\n\n\tif (Platform.OS === \"web\" && typeof window !== \"undefined\") {\n\t\treturn window.location.origin;\n\t}\n\n\tthrow new Error(`Unsupported platform: ${Platform.OS}`);\n}\n\nconst appOrigin = getAppOrigin();\n\nexport const whopSdk = new Whop({\n\tapiKey: \"client\",\n\tappID: \"client\",\n\tbaseURL: new URL(\"/_whop/api/v1/\", appOrigin).href,\n});\n\nexport * from \"@whop/sdk\";\n","import type { TurboModule } from \"react-native\";\nimport { TurboModuleRegistry } from \"react-native\";\nimport stub from \"./native-whop-core-stub\";\n\nexport type FunctionCallResult = {\n\tisOk: boolean;\n\tdata: string | null;\n\terrorMessage: string | null;\n};\n\nexport interface Spec extends TurboModule {\n\texecSync(name: string, paramsJson: string): FunctionCallResult;\n\texecAsync(name: string, paramsJson: string): Promise<FunctionCallResult>;\n}\n\nfunction resolveNative(): Spec | null {\n\ttry {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tconst registry: any = TurboModuleRegistry as any;\n\t\tconst get = registry?.getEnforcing ?? registry?.get;\n\t\tif (typeof get === \"function\") {\n\t\t\treturn get.call(registry, \"NativeWhopCore\") as Spec;\n\t\t}\n\t\treturn null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nconst native = resolveNative();\n\nexport default native ?? (stub as Spec);\n","import { Platform } from \"react-native\";\nimport type { ExecAsyncApi, ExecSyncApi } from \"./native-whop-core-wrapper\";\n\nexport type FunctionCallResult = {\n\tisOk: boolean;\n\tdata: string | null;\n\terrorMessage: string | null;\n};\n\ntype Route = { path: string[]; params: Record<string, string> };\n\nclass WhopCoreObservable<T> {\n\tprivate subscribers: Set<(value: T) => void> = new Set();\n\tprivate value: T;\n\n\tconstructor(value: T) {\n\t\tthis.value = value;\n\t}\n\n\tsetValue(value: T) {\n\t\tthis.value = value;\n\t\tfor (const callback of this.subscribers) {\n\t\t\tcallback(value);\n\t\t}\n\t}\n\n\tgetValue() {\n\t\treturn this.value;\n\t}\n\n\tsubscribe(callback: (value: T) => void) {\n\t\tthis.subscribers.add(callback);\n\t\treturn () => {\n\t\t\tthis.subscribers.delete(callback);\n\t\t};\n\t}\n}\n\nclass WhopCoreNavigation {\n\tpublic path = new WhopCoreObservable<Route[]>([]);\n\tpublic sheet = new WhopCoreObservable<Route | null>(null);\n\n\tconstructor() {\n\t\tthis.getFullStack = this.getFullStack.bind(this);\n\t\tthis.getCurrentSheet = this.getCurrentSheet.bind(this);\n\t\tthis.subscribeToPath = this.subscribeToPath.bind(this);\n\t\tthis.subscribeToSheet = this.subscribeToSheet.bind(this);\n\t}\n\n\tpush(route: Route) {\n\t\tif (this.getCurrent().path.join(\"/\") === route.path.join(\"/\")) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.path.setValue([...this.path.getValue(), route]);\n\t\tif (typeof window !== \"undefined\" && window.history) {\n\t\t\ttry {\n\t\t\t\tconst pathBits = route.path.join(\"/\");\n\t\t\t\tconst paramsBits = Object.entries(route.params)\n\t\t\t\t\t.map(([key, value]) => `${key}=${value}`)\n\t\t\t\t\t.join(\"&\");\n\t\t\t\twindow.history.pushState(\n\t\t\t\t\t{ route, index: this.path.getValue().length },\n\t\t\t\t\t\"\",\n\t\t\t\t\t`#${pathBits}?${paramsBits}`,\n\t\t\t\t);\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\tpop() {\n\t\tif (typeof window !== \"undefined\" && window.history) {\n\t\t\ttry {\n\t\t\t\twindow.history.back();\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\tgetFullStack() {\n\t\treturn this.path.getValue();\n\t}\n\n\tgetCurrent() {\n\t\treturn (\n\t\t\tthis.path.getValue()[this.path.getValue().length - 1] ?? {\n\t\t\t\tpath: [],\n\t\t\t\tparams: {},\n\t\t\t}\n\t\t);\n\t}\n\n\tpresentSheet(route: Route) {\n\t\tthis.sheet.setValue(route);\n\t}\n\n\tdismissSheet() {\n\t\tthis.sheet.setValue(null);\n\t}\n\n\tgetCurrentSheet() {\n\t\treturn this.sheet.getValue() ?? null;\n\t}\n\n\tsubscribeToPath(callback: (route: Route[]) => void) {\n\t\treturn this.path.subscribe(callback);\n\t}\n\n\tsubscribeToSheet(callback: (route: Route | null) => void) {\n\t\treturn this.sheet.subscribe(callback);\n\t}\n}\n\nexport type TWhopCoreNavigation = WhopCoreNavigation;\n\nconst navigation = new WhopCoreNavigation();\nif (typeof window !== \"undefined\" && Platform.OS === \"web\") {\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t(window as any).whopCoreNavigation = navigation;\n\n\twindow.addEventListener(\"popstate\", (e) => {\n\t\tconst currentLength = navigation.path.getValue().length;\n\t\tif (!e.state) {\n\t\t\tnavigation.path.setValue(navigation.path.getValue().slice(0, -1));\n\t\t\treturn;\n\t\t}\n\t\tconst index = e.state.index;\n\t\tconst route = e.state.route;\n\t\tif (index < currentLength) {\n\t\t\tnavigation.path.setValue(navigation.path.getValue().slice(0, -1));\n\t\t} else {\n\t\t\tnavigation.path.setValue([...navigation.path.getValue(), route]);\n\t\t}\n\t});\n}\n\nfunction ok(data: unknown): FunctionCallResult {\n\treturn { isOk: true, data: JSON.stringify(data), errorMessage: null };\n}\n\nfunction err(message: string): FunctionCallResult {\n\treturn { isOk: false, data: null, errorMessage: message };\n}\n\nfunction getOrigin(): string {\n\tif (typeof window !== \"undefined\" && window.location) {\n\t\treturn window.location.origin;\n\t}\n\treturn \"\";\n}\n\nconst syncHandlers: ExecSyncApi = {\n\tgetAppApiOrigin() {\n\t\treturn { apiOrigin: getOrigin() };\n\t},\n\tcacheGet({ key }: { key?: string | null }) {\n\t\ttry {\n\t\t\tif (typeof window !== \"undefined\" && window.localStorage && key) {\n\t\t\t\treturn { data: window.localStorage.getItem(key) };\n\t\t\t}\n\t\t\treturn { data: null };\n\t\t} catch {\n\t\t\treturn { data: null };\n\t\t}\n\t},\n\tcacheSet({ key, data }: { key?: string | null; data?: string | null }) {\n\t\ttry {\n\t\t\tif (typeof window !== \"undefined\" && window.localStorage && key != null) {\n\t\t\t\tif (data == null) {\n\t\t\t\t\twindow.localStorage.removeItem(key);\n\t\t\t\t} else {\n\t\t\t\t\twindow.localStorage.setItem(key, data);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {}\n\t\treturn {};\n\t},\n\trouterPush(route) {\n\t\tif (route.origin) {\n\t\t\tconst path = `/${route.path.join(\"/\")}`;\n\t\t\tconst url = new URL(path, route.origin);\n\t\t\tfor (const [k, v] of Object.entries(route.params ?? {})) {\n\t\t\t\turl.searchParams.set(k, v);\n\t\t\t}\n\t\t\tloadIframeSdk().then((sdk) => sdk.openExternalUrl({ url: url.href }));\n\t\t} else {\n\t\t\tnavigation.push(route);\n\t\t}\n\t\treturn {};\n\t},\n\trouterPop() {\n\t\tnavigation.pop();\n\t\treturn {};\n\t},\n\trouterGetCurrent() {\n\t\treturn navigation.getCurrent();\n\t},\n\tsetNavigationBarData() {\n\t\treturn {};\n\t},\n\trouterPresentSheet({ path, params }: Route) {\n\t\tnavigation.presentSheet({\n\t\t\tpath: Array.from(path ?? []),\n\t\t\tparams: params ?? {},\n\t\t});\n\t\treturn {};\n\t},\n\trouterDismissSheet() {\n\t\tnavigation.dismissSheet();\n\t\treturn {};\n\t},\n\trouterGetCurrentSheet() {\n\t\treturn navigation.getCurrentSheet() ?? null;\n\t},\n\tdowngradeToWebView() {\n\t\treturn {};\n\t},\n\tgetHostAppDetails() {\n\t\treturn {\n\t\t\tbuild: \"web\",\n\t\t\tversion: \"0.0.0\",\n\t\t\tplatform: \"web\",\n\t\t\tbuildType: \"appstore\",\n\t\t};\n\t},\n\tsetScreenOrientationMode() {\n\t\treturn {};\n\t},\n};\n\nlet iframeModulePromise: Promise<typeof import(\"@whop/iframe\")> | null = null;\n\nasync function loadIframeModule() {\n\tif (!iframeModulePromise) {\n\t\tiframeModulePromise = import(\"@whop/iframe\");\n\t}\n\treturn await iframeModulePromise;\n}\n\nlet iframeSdk: ReturnType<typeof import(\"@whop/iframe\").createSdk> | null =\n\tnull;\n\nasync function loadIframeSdk() {\n\tif (!iframeSdk) {\n\t\tconst module = await loadIframeModule();\n\t\tiframeSdk = module.createSdk({\n\t\t\tappId: process.env.NEXT_PUBLIC_WHOP_APP_ID,\n\t\t\toverrideParentOrigins: [\"https://whop.com\", \"http://localhost:8004\"],\n\t\t});\n\t}\n\treturn iframeSdk;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\ntype MakeAsync<T extends Record<string, any>> = {\n\t[K in keyof T]: (params: Parameters<T[K]>[0]) => Promise<ReturnType<T[K]>>;\n};\n\nconst asyncHandlers: MakeAsync<Pick<ExecAsyncApi, \"inAppPurchase\">> = {\n\tinAppPurchase: async ({ planId, id }) => {\n\t\tconst sdk = await loadIframeSdk();\n\t\tconst result = await sdk.inAppPurchase({ planId, id: id ?? undefined });\n\t\tif (result.status === \"ok\") {\n\t\t\treturn {\n\t\t\t\tsessionId: result.data.sessionId,\n\t\t\t\treceiptId: result.data.receiptId,\n\t\t\t};\n\t\t}\n\t\tthrow new Error(result.error);\n\t},\n};\n\nconst nativeWhopCoreStub = {\n\texecSync(name: string, paramsJson: string): FunctionCallResult {\n\t\ttry {\n\t\t\tconst params = paramsJson ? JSON.parse(paramsJson) : {};\n\t\t\tconst handler = syncHandlers[name as keyof typeof syncHandlers];\n\t\t\tif (!handler) return err(`Unknown sync method: ${name}`);\n\t\t\tconst result = handler(params);\n\t\t\treturn ok(result);\n\t\t} catch (e) {\n\t\t\treturn err(e instanceof Error ? e.message : \"Unknown error\");\n\t\t}\n\t},\n\tasync execAsync(\n\t\tname: string,\n\t\tparamsJson: string,\n\t): Promise<FunctionCallResult> {\n\t\ttry {\n\t\t\tconst params = paramsJson ? JSON.parse(paramsJson) : {};\n\t\t\tconst handler = (\n\t\t\t\tasyncHandlers as Record<string, (p: unknown) => Promise<unknown>>\n\t\t\t)[name];\n\t\t\tif (!handler) return err(`Unknown async method: ${name}`);\n\t\t\tconst result = await handler(params);\n\t\t\treturn ok(result);\n\t\t} catch (e) {\n\t\t\treturn err(e instanceof Error ? e.message : \"Unknown error\");\n\t\t}\n\t},\n};\n\nexport default nativeWhopCoreStub;\n","import nativeWhopCore from \"./native-whop-core\";\nimport type { PathParams, PathParamsWithOrigin } from \"./props\";\n\n// biome-ignore lint/complexity/noBannedTypes: allow here\ntype EmptyObject = {};\n\nexport interface ExecSyncApi {\n\tgetAppApiOrigin(params: EmptyObject): { apiOrigin: string };\n\tcacheGet(params: { key?: string | null }): { data?: string | null };\n\tcacheSet(params: { key?: string | null; data?: string | null }): EmptyObject;\n\trouterPush(params: PathParamsWithOrigin): EmptyObject;\n\trouterPop(params: EmptyObject): EmptyObject;\n\trouterGetCurrent(params: EmptyObject): PathParams;\n\tsetNavigationBarData(params: {\n\t\ttitle?: string | null;\n\t\tdescription?: string | null;\n\t}): EmptyObject;\n\trouterPresentSheet(params: PathParams): EmptyObject;\n\trouterDismissSheet(params: EmptyObject): EmptyObject;\n\trouterGetCurrentSheet(params: EmptyObject): PathParams | null | undefined;\n\tdowngradeToWebView(params: EmptyObject): EmptyObject;\n\tgetHostAppDetails(params: EmptyObject): {\n\t\tbuild: string;\n\t\tversion: string;\n\t\tplatform: \"ios\" | \"android\" | \"web\";\n\t\tbuildType: \"appstore\" | \"testflight\" | \"debug\";\n\t};\n\tsetScreenOrientationMode(params: {\n\t\ttargetScreenOrientationMode: \"portrait\" | \"landscape\" | \"rotate\";\n\t}): EmptyObject;\n}\n\nexport interface ExecAsyncApi extends ExecSyncApi {\n\tinAppPurchase(params: { id?: string | null; planId: string }): {\n\t\tsessionId: string;\n\t\treceiptId: string;\n\t};\n}\n\nexport function __internal_execSync<F extends keyof ExecSyncApi>(\n\tname: F,\n\tparams: Parameters<ExecSyncApi[F]>[0],\n): ReturnType<ExecSyncApi[F]> {\n\tconst resultJson = nativeWhopCore.execSync(name, JSON.stringify(params));\n\tif (!resultJson.isOk) {\n\t\tthrow new Error(`Failed to execute ${name}: ${resultJson.errorMessage}`);\n\t}\n\n\treturn JSON.parse(resultJson.data || \"{}\") as ReturnType<ExecSyncApi[F]>;\n}\n\nexport async function __internal_execAsync<F extends keyof ExecAsyncApi>(\n\tname: F,\n\tparams: Parameters<ExecAsyncApi[F]>[0],\n): Promise<ReturnType<ExecAsyncApi[F]>> {\n\tconst resultJson = await nativeWhopCore.execAsync(\n\t\tname,\n\t\tJSON.stringify(params),\n\t);\n\n\tif (!resultJson.isOk) {\n\t\tthrow new Error(`Failed to execute ${name}: ${resultJson.errorMessage}`);\n\t}\n\n\treturn JSON.parse(resultJson.data || \"{}\") as ReturnType<ExecAsyncApi[F]>;\n}\n","/**\n * Web-safe wrapper for react-native-haptic-feedback.\n * - Lazily imports the native module only in native environments.\n * - Provides a no-op fallback on web to avoid runtime crashes.\n */\n\ntype HapticType =\n\t| \"selection\"\n\t| \"impactLight\"\n\t| \"impactMedium\"\n\t| \"impactHeavy\"\n\t| \"notificationSuccess\"\n\t| \"notificationWarning\"\n\t| \"notificationError\";\n\ntype HapticOptions = {\n\tenableVibrateFallback?: boolean;\n\tignoreAndroidSystemSettings?: boolean;\n};\n\n// Singleton holder for the native module once loaded\nlet nativeModule: {\n\ttrigger: (type: HapticType, options?: HapticOptions) => void;\n} | null = null;\nlet loadingPromise: Promise<void> | null = null;\n\nasync function ensureNativeLoaded(): Promise<void> {\n\t// If on web, skip loading entirely\n\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n\t// @ts-ignore - process may not be typed in RN web builds\n\tconst isWeb =\n\t\ttypeof document !== \"undefined\" && typeof window !== \"undefined\";\n\tif (isWeb) return;\n\n\tif (nativeModule || loadingPromise) {\n\t\treturn loadingPromise ?? Promise.resolve();\n\t}\n\n\tloadingPromise = import(\"react-native-haptic-feedback\")\n\t\t.then((mod) => {\n\t\t\tnativeModule = { trigger: mod.default.trigger };\n\t\t})\n\t\t.catch(() => {\n\t\t\t// Keep nativeModule null; fall back to noop\n\t\t})\n\t\t.finally(() => {\n\t\t\tloadingPromise = null;\n\t\t});\n\n\treturn loadingPromise;\n}\n\nconst HAPTIC_NOOP = {\n\ttrigger: (_type: HapticType, _options?: HapticOptions) => {\n\t\t// no-op on web\n\t},\n};\n\nconst Haptics = {\n\tasync trigger(type: HapticType, options?: HapticOptions): Promise<void> {\n\t\tawait ensureNativeLoaded();\n\t\tif (nativeModule) {\n\t\t\ttry {\n\t\t\t\tnativeModule.trigger(type, options);\n\t\t\t} catch {\n\t\t\t\t// ignore\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tHAPTIC_NOOP.trigger(type, options);\n\t},\n};\n\nexport default Haptics;\n"],"mappings":"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","names":["import_react_native","import_react_native","module","Whop"]}
|
package/dist/lib/index.mjs
CHANGED
|
@@ -166,7 +166,16 @@ var syncHandlers = {
|
|
|
166
166
|
return {};
|
|
167
167
|
},
|
|
168
168
|
routerPush(route) {
|
|
169
|
-
|
|
169
|
+
if (route.origin) {
|
|
170
|
+
const path = `/${route.path.join("/")}`;
|
|
171
|
+
const url = new URL(path, route.origin);
|
|
172
|
+
for (const [k, v] of Object.entries(route.params ?? {})) {
|
|
173
|
+
url.searchParams.set(k, v);
|
|
174
|
+
}
|
|
175
|
+
loadIframeSdk().then((sdk) => sdk.openExternalUrl({ url: url.href }));
|
|
176
|
+
} else {
|
|
177
|
+
navigation.push(route);
|
|
178
|
+
}
|
|
170
179
|
return {};
|
|
171
180
|
},
|
|
172
181
|
routerPop() {
|
|
@@ -220,7 +229,8 @@ async function loadIframeSdk() {
|
|
|
220
229
|
if (!iframeSdk) {
|
|
221
230
|
const module = await loadIframeModule();
|
|
222
231
|
iframeSdk = module.createSdk({
|
|
223
|
-
appId: process.env.NEXT_PUBLIC_WHOP_APP_ID
|
|
232
|
+
appId: process.env.NEXT_PUBLIC_WHOP_APP_ID,
|
|
233
|
+
overrideParentOrigins: ["https://whop.com", "http://localhost:8004"]
|
|
224
234
|
});
|
|
225
235
|
}
|
|
226
236
|
return iframeSdk;
|
package/dist/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/index.ts","../../src/lib/client-sdk.ts","../../src/lib/native-whop-core.ts","../../src/lib/native-whop-core-stub.ts","../../src/lib/native-whop-core-wrapper.ts","../../src/lib/haptics.ts"],"sourcesContent":["export * from \"./client-sdk\";\nexport * from \"./native-whop-core-wrapper\";\nexport * from \"./props\";\nimport Haptics from \"./haptics\";\n\nexport { Haptics };\n","import Whop from \"@whop/sdk\";\nimport { Platform } from \"react-native\";\nimport { __internal_execSync } from \"./native-whop-core-wrapper\";\n\nfunction getAppOrigin() {\n\tif (Platform.OS === \"android\" || Platform.OS === \"ios\") {\n\t\treturn __internal_execSync(\"getAppApiOrigin\", {}).apiOrigin;\n\t}\n\n\tif (Platform.OS === \"web\" && typeof window !== \"undefined\") {\n\t\treturn window.location.origin;\n\t}\n\n\tthrow new Error(`Unsupported platform: ${Platform.OS}`);\n}\n\nconst appOrigin = getAppOrigin();\n\nexport const whopSdk = new Whop({\n\tapiKey: \"client\",\n\tappID: \"client\",\n\tbaseURL: new URL(\"/_whop/api/v1/\", appOrigin).href,\n});\n\nexport * from \"@whop/sdk\";\n","import type { TurboModule } from \"react-native\";\nimport { TurboModuleRegistry } from \"react-native\";\nimport stub from \"./native-whop-core-stub\";\n\nexport type FunctionCallResult = {\n\tisOk: boolean;\n\tdata: string | null;\n\terrorMessage: string | null;\n};\n\nexport interface Spec extends TurboModule {\n\texecSync(name: string, paramsJson: string): FunctionCallResult;\n\texecAsync(name: string, paramsJson: string): Promise<FunctionCallResult>;\n}\n\nfunction resolveNative(): Spec | null {\n\ttry {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tconst registry: any = TurboModuleRegistry as any;\n\t\tconst get = registry?.getEnforcing ?? registry?.get;\n\t\tif (typeof get === \"function\") {\n\t\t\treturn get.call(registry, \"NativeWhopCore\") as Spec;\n\t\t}\n\t\treturn null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nconst native = resolveNative();\n\nexport default native ?? (stub as Spec);\n","import { Platform } from \"react-native\";\nimport type { ExecAsyncApi, ExecSyncApi } from \"./native-whop-core-wrapper\";\n\nexport type FunctionCallResult = {\n\tisOk: boolean;\n\tdata: string | null;\n\terrorMessage: string | null;\n};\n\ntype Route = { path: string[]; params: Record<string, string> };\n\nclass WhopCoreObservable<T> {\n\tprivate subscribers: Set<(value: T) => void> = new Set();\n\tprivate value: T;\n\n\tconstructor(value: T) {\n\t\tthis.value = value;\n\t}\n\n\tsetValue(value: T) {\n\t\tthis.value = value;\n\t\tfor (const callback of this.subscribers) {\n\t\t\tcallback(value);\n\t\t}\n\t}\n\n\tgetValue() {\n\t\treturn this.value;\n\t}\n\n\tsubscribe(callback: (value: T) => void) {\n\t\tthis.subscribers.add(callback);\n\t\treturn () => {\n\t\t\tthis.subscribers.delete(callback);\n\t\t};\n\t}\n}\n\nclass WhopCoreNavigation {\n\tpublic path = new WhopCoreObservable<Route[]>([]);\n\tpublic sheet = new WhopCoreObservable<Route | null>(null);\n\n\tconstructor() {\n\t\tthis.getFullStack = this.getFullStack.bind(this);\n\t\tthis.getCurrentSheet = this.getCurrentSheet.bind(this);\n\t\tthis.subscribeToPath = this.subscribeToPath.bind(this);\n\t\tthis.subscribeToSheet = this.subscribeToSheet.bind(this);\n\t}\n\n\tpush(route: Route) {\n\t\tif (this.getCurrent().path.join(\"/\") === route.path.join(\"/\")) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.path.setValue([...this.path.getValue(), route]);\n\t\tif (typeof window !== \"undefined\" && window.history) {\n\t\t\ttry {\n\t\t\t\tconst pathBits = route.path.join(\"/\");\n\t\t\t\tconst paramsBits = Object.entries(route.params)\n\t\t\t\t\t.map(([key, value]) => `${key}=${value}`)\n\t\t\t\t\t.join(\"&\");\n\t\t\t\twindow.history.pushState(\n\t\t\t\t\t{ route, index: this.path.getValue().length },\n\t\t\t\t\t\"\",\n\t\t\t\t\t`#${pathBits}?${paramsBits}`,\n\t\t\t\t);\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\tpop() {\n\t\tif (typeof window !== \"undefined\" && window.history) {\n\t\t\ttry {\n\t\t\t\twindow.history.back();\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\tgetFullStack() {\n\t\treturn this.path.getValue();\n\t}\n\n\tgetCurrent() {\n\t\treturn (\n\t\t\tthis.path.getValue()[this.path.getValue().length - 1] ?? {\n\t\t\t\tpath: [],\n\t\t\t\tparams: {},\n\t\t\t}\n\t\t);\n\t}\n\n\tpresentSheet(route: Route) {\n\t\tthis.sheet.setValue(route);\n\t}\n\n\tdismissSheet() {\n\t\tthis.sheet.setValue(null);\n\t}\n\n\tgetCurrentSheet() {\n\t\treturn this.sheet.getValue() ?? null;\n\t}\n\n\tsubscribeToPath(callback: (route: Route[]) => void) {\n\t\treturn this.path.subscribe(callback);\n\t}\n\n\tsubscribeToSheet(callback: (route: Route | null) => void) {\n\t\treturn this.sheet.subscribe(callback);\n\t}\n}\n\nexport type TWhopCoreNavigation = WhopCoreNavigation;\n\nconst navigation = new WhopCoreNavigation();\nif (typeof window !== \"undefined\" && Platform.OS === \"web\") {\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t(window as any).whopCoreNavigation = navigation;\n\n\twindow.addEventListener(\"popstate\", (e) => {\n\t\tconst currentLength = navigation.path.getValue().length;\n\t\tif (!e.state) {\n\t\t\tnavigation.path.setValue(navigation.path.getValue().slice(0, -1));\n\t\t\treturn;\n\t\t}\n\t\tconst index = e.state.index;\n\t\tconst route = e.state.route;\n\t\tif (index < currentLength) {\n\t\t\tnavigation.path.setValue(navigation.path.getValue().slice(0, -1));\n\t\t} else {\n\t\t\tnavigation.path.setValue([...navigation.path.getValue(), route]);\n\t\t}\n\t});\n}\n\nfunction ok(data: unknown): FunctionCallResult {\n\treturn { isOk: true, data: JSON.stringify(data), errorMessage: null };\n}\n\nfunction err(message: string): FunctionCallResult {\n\treturn { isOk: false, data: null, errorMessage: message };\n}\n\nfunction getOrigin(): string {\n\tif (typeof window !== \"undefined\" && window.location) {\n\t\treturn window.location.origin;\n\t}\n\treturn \"\";\n}\n\nconst syncHandlers: ExecSyncApi = {\n\tgetAppApiOrigin() {\n\t\treturn { apiOrigin: getOrigin() };\n\t},\n\tcacheGet({ key }: { key?: string | null }) {\n\t\ttry {\n\t\t\tif (typeof window !== \"undefined\" && window.localStorage && key) {\n\t\t\t\treturn { data: window.localStorage.getItem(key) };\n\t\t\t}\n\t\t\treturn { data: null };\n\t\t} catch {\n\t\t\treturn { data: null };\n\t\t}\n\t},\n\tcacheSet({ key, data }: { key?: string | null; data?: string | null }) {\n\t\ttry {\n\t\t\tif (typeof window !== \"undefined\" && window.localStorage && key != null) {\n\t\t\t\tif (data == null) {\n\t\t\t\t\twindow.localStorage.removeItem(key);\n\t\t\t\t} else {\n\t\t\t\t\twindow.localStorage.setItem(key, data);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {}\n\t\treturn {};\n\t},\n\trouterPush(route: Route) {\n\t\tnavigation.push(route);\n\t\treturn {};\n\t},\n\trouterPop() {\n\t\tnavigation.pop();\n\t\treturn {};\n\t},\n\trouterGetCurrent() {\n\t\treturn navigation.getCurrent();\n\t},\n\tsetNavigationBarData() {\n\t\treturn {};\n\t},\n\trouterPresentSheet({ path, params }: Route) {\n\t\tnavigation.presentSheet({\n\t\t\tpath: Array.from(path ?? []),\n\t\t\tparams: params ?? {},\n\t\t});\n\t\treturn {};\n\t},\n\trouterDismissSheet() {\n\t\tnavigation.dismissSheet();\n\t\treturn {};\n\t},\n\trouterGetCurrentSheet() {\n\t\treturn navigation.getCurrentSheet() ?? null;\n\t},\n\tdowngradeToWebView() {\n\t\treturn {};\n\t},\n\tgetHostAppDetails() {\n\t\treturn {\n\t\t\tbuild: \"web\",\n\t\t\tversion: \"0.0.0\",\n\t\t\tplatform: \"web\",\n\t\t\tbuildType: \"appstore\",\n\t\t};\n\t},\n\tsetScreenOrientationMode() {\n\t\treturn {};\n\t},\n};\n\nlet iframeModulePromise: Promise<typeof import(\"@whop/iframe\")> | null = null;\n\nasync function loadIframeModule() {\n\tif (!iframeModulePromise) {\n\t\tiframeModulePromise = import(\"@whop/iframe\");\n\t}\n\treturn await iframeModulePromise;\n}\n\nlet iframeSdk: ReturnType<typeof import(\"@whop/iframe\").createSdk> | null =\n\tnull;\n\nasync function loadIframeSdk() {\n\tif (!iframeSdk) {\n\t\tconst module = await loadIframeModule();\n\t\tiframeSdk = module.createSdk({\n\t\t\tappId: process.env.NEXT_PUBLIC_WHOP_APP_ID,\n\t\t});\n\t}\n\treturn iframeSdk;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\ntype MakeAsync<T extends Record<string, any>> = {\n\t[K in keyof T]: (params: Parameters<T[K]>[0]) => Promise<ReturnType<T[K]>>;\n};\n\nconst asyncHandlers: MakeAsync<Pick<ExecAsyncApi, \"inAppPurchase\">> = {\n\tinAppPurchase: async ({ planId, id }) => {\n\t\tconst sdk = await loadIframeSdk();\n\t\tconst result = await sdk.inAppPurchase({ planId, id: id ?? undefined });\n\t\tif (result.status === \"ok\") {\n\t\t\treturn {\n\t\t\t\tsessionId: result.data.sessionId,\n\t\t\t\treceiptId: result.data.receiptId,\n\t\t\t};\n\t\t}\n\t\tthrow new Error(result.error);\n\t},\n};\n\nconst nativeWhopCoreStub = {\n\texecSync(name: string, paramsJson: string): FunctionCallResult {\n\t\ttry {\n\t\t\tconst params = paramsJson ? JSON.parse(paramsJson) : {};\n\t\t\tconst handler = syncHandlers[name as keyof typeof syncHandlers];\n\t\t\tif (!handler) return err(`Unknown sync method: ${name}`);\n\t\t\tconst result = handler(params);\n\t\t\treturn ok(result);\n\t\t} catch (e) {\n\t\t\treturn err(e instanceof Error ? e.message : \"Unknown error\");\n\t\t}\n\t},\n\tasync execAsync(\n\t\tname: string,\n\t\tparamsJson: string,\n\t): Promise<FunctionCallResult> {\n\t\ttry {\n\t\t\tconst params = paramsJson ? JSON.parse(paramsJson) : {};\n\t\t\tconst handler = (\n\t\t\t\tasyncHandlers as Record<string, (p: unknown) => Promise<unknown>>\n\t\t\t)[name];\n\t\t\tif (!handler) return err(`Unknown async method: ${name}`);\n\t\t\tconst result = await handler(params);\n\t\t\treturn ok(result);\n\t\t} catch (e) {\n\t\t\treturn err(e instanceof Error ? e.message : \"Unknown error\");\n\t\t}\n\t},\n};\n\nexport default nativeWhopCoreStub;\n","import nativeWhopCore from \"./native-whop-core\";\nimport type { PathParams } from \"./props\";\n\n// biome-ignore lint/complexity/noBannedTypes: allow here\ntype EmptyObject = {};\n\nexport interface ExecSyncApi {\n\tgetAppApiOrigin(params: EmptyObject): { apiOrigin: string };\n\tcacheGet(params: { key?: string | null }): { data?: string | null };\n\tcacheSet(params: { key?: string | null; data?: string | null }): EmptyObject;\n\trouterPush(params: PathParams): EmptyObject;\n\trouterPop(params: EmptyObject): EmptyObject;\n\trouterGetCurrent(params: EmptyObject): PathParams;\n\tsetNavigationBarData(params: {\n\t\ttitle?: string | null;\n\t\tdescription?: string | null;\n\t}): EmptyObject;\n\trouterPresentSheet(params: PathParams): EmptyObject;\n\trouterDismissSheet(params: EmptyObject): EmptyObject;\n\trouterGetCurrentSheet(params: EmptyObject): PathParams | null | undefined;\n\tdowngradeToWebView(params: EmptyObject): EmptyObject;\n\tgetHostAppDetails(params: EmptyObject): {\n\t\tbuild: string;\n\t\tversion: string;\n\t\tplatform: \"ios\" | \"android\" | \"web\";\n\t\tbuildType: \"appstore\" | \"testflight\" | \"debug\";\n\t};\n\tsetScreenOrientationMode(params: {\n\t\ttargetScreenOrientationMode: \"portrait\" | \"landscape\" | \"rotate\";\n\t}): EmptyObject;\n}\n\nexport interface ExecAsyncApi extends ExecSyncApi {\n\tinAppPurchase(params: {\n\t\tid?: string | null;\n\t\tplanId: string;\n\t}): {\n\t\tsessionId: string;\n\t\treceiptId: string;\n\t};\n}\n\nexport function __internal_execSync<F extends keyof ExecSyncApi>(\n\tname: F,\n\tparams: Parameters<ExecSyncApi[F]>[0],\n): ReturnType<ExecSyncApi[F]> {\n\tconst resultJson = nativeWhopCore.execSync(name, JSON.stringify(params));\n\tif (!resultJson.isOk) {\n\t\tthrow new Error(`Failed to execute ${name}: ${resultJson.errorMessage}`);\n\t}\n\n\treturn JSON.parse(resultJson.data || \"{}\") as ReturnType<ExecSyncApi[F]>;\n}\n\nexport async function __internal_execAsync<F extends keyof ExecAsyncApi>(\n\tname: F,\n\tparams: Parameters<ExecAsyncApi[F]>[0],\n): Promise<ReturnType<ExecAsyncApi[F]>> {\n\tconst resultJson = await nativeWhopCore.execAsync(\n\t\tname,\n\t\tJSON.stringify(params),\n\t);\n\n\tif (!resultJson.isOk) {\n\t\tthrow new Error(`Failed to execute ${name}: ${resultJson.errorMessage}`);\n\t}\n\n\treturn JSON.parse(resultJson.data || \"{}\") as ReturnType<ExecAsyncApi[F]>;\n}\n","/**\n * Web-safe wrapper for react-native-haptic-feedback.\n * - Lazily imports the native module only in native environments.\n * - Provides a no-op fallback on web to avoid runtime crashes.\n */\n\ntype HapticType =\n\t| \"selection\"\n\t| \"impactLight\"\n\t| \"impactMedium\"\n\t| \"impactHeavy\"\n\t| \"notificationSuccess\"\n\t| \"notificationWarning\"\n\t| \"notificationError\";\n\ntype HapticOptions = {\n\tenableVibrateFallback?: boolean;\n\tignoreAndroidSystemSettings?: boolean;\n};\n\n// Singleton holder for the native module once loaded\nlet nativeModule: {\n\ttrigger: (type: HapticType, options?: HapticOptions) => void;\n} | null = null;\nlet loadingPromise: Promise<void> | null = null;\n\nasync function ensureNativeLoaded(): Promise<void> {\n\t// If on web, skip loading entirely\n\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n\t// @ts-ignore - process may not be typed in RN web builds\n\tconst isWeb =\n\t\ttypeof document !== \"undefined\" && typeof window !== \"undefined\";\n\tif (isWeb) return;\n\n\tif (nativeModule || loadingPromise) {\n\t\treturn loadingPromise ?? Promise.resolve();\n\t}\n\n\tloadingPromise = import(\"react-native-haptic-feedback\")\n\t\t.then((mod) => {\n\t\t\tnativeModule = { trigger: mod.default.trigger };\n\t\t})\n\t\t.catch(() => {\n\t\t\t// Keep nativeModule null; fall back to noop\n\t\t})\n\t\t.finally(() => {\n\t\t\tloadingPromise = null;\n\t\t});\n\n\treturn loadingPromise;\n}\n\nconst HAPTIC_NOOP = {\n\ttrigger: (_type: HapticType, _options?: HapticOptions) => {\n\t\t// no-op on web\n\t},\n};\n\nconst Haptics = {\n\tasync trigger(type: HapticType, options?: HapticOptions): Promise<void> {\n\t\tawait ensureNativeLoaded();\n\t\tif (nativeModule) {\n\t\t\ttry {\n\t\t\t\tnativeModule.trigger(type, options);\n\t\t\t} catch {\n\t\t\t\t// ignore\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tHAPTIC_NOOP.trigger(type, options);\n\t},\n};\n\nexport default Haptics;\n"],"mappings":"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","names":["Platform","Platform"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/index.ts","../../src/lib/client-sdk.ts","../../src/lib/native-whop-core.ts","../../src/lib/native-whop-core-stub.ts","../../src/lib/native-whop-core-wrapper.ts","../../src/lib/haptics.ts"],"sourcesContent":["export * from \"./client-sdk\";\nexport * from \"./native-whop-core-wrapper\";\nexport * from \"./props\";\nimport Haptics from \"./haptics\";\n\nexport { Haptics };\n","import Whop from \"@whop/sdk\";\nimport { Platform } from \"react-native\";\nimport { __internal_execSync } from \"./native-whop-core-wrapper\";\n\nfunction getAppOrigin() {\n\tif (Platform.OS === \"android\" || Platform.OS === \"ios\") {\n\t\treturn __internal_execSync(\"getAppApiOrigin\", {}).apiOrigin;\n\t}\n\n\tif (Platform.OS === \"web\" && typeof window !== \"undefined\") {\n\t\treturn window.location.origin;\n\t}\n\n\tthrow new Error(`Unsupported platform: ${Platform.OS}`);\n}\n\nconst appOrigin = getAppOrigin();\n\nexport const whopSdk = new Whop({\n\tapiKey: \"client\",\n\tappID: \"client\",\n\tbaseURL: new URL(\"/_whop/api/v1/\", appOrigin).href,\n});\n\nexport * from \"@whop/sdk\";\n","import type { TurboModule } from \"react-native\";\nimport { TurboModuleRegistry } from \"react-native\";\nimport stub from \"./native-whop-core-stub\";\n\nexport type FunctionCallResult = {\n\tisOk: boolean;\n\tdata: string | null;\n\terrorMessage: string | null;\n};\n\nexport interface Spec extends TurboModule {\n\texecSync(name: string, paramsJson: string): FunctionCallResult;\n\texecAsync(name: string, paramsJson: string): Promise<FunctionCallResult>;\n}\n\nfunction resolveNative(): Spec | null {\n\ttry {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tconst registry: any = TurboModuleRegistry as any;\n\t\tconst get = registry?.getEnforcing ?? registry?.get;\n\t\tif (typeof get === \"function\") {\n\t\t\treturn get.call(registry, \"NativeWhopCore\") as Spec;\n\t\t}\n\t\treturn null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nconst native = resolveNative();\n\nexport default native ?? (stub as Spec);\n","import { Platform } from \"react-native\";\nimport type { ExecAsyncApi, ExecSyncApi } from \"./native-whop-core-wrapper\";\n\nexport type FunctionCallResult = {\n\tisOk: boolean;\n\tdata: string | null;\n\terrorMessage: string | null;\n};\n\ntype Route = { path: string[]; params: Record<string, string> };\n\nclass WhopCoreObservable<T> {\n\tprivate subscribers: Set<(value: T) => void> = new Set();\n\tprivate value: T;\n\n\tconstructor(value: T) {\n\t\tthis.value = value;\n\t}\n\n\tsetValue(value: T) {\n\t\tthis.value = value;\n\t\tfor (const callback of this.subscribers) {\n\t\t\tcallback(value);\n\t\t}\n\t}\n\n\tgetValue() {\n\t\treturn this.value;\n\t}\n\n\tsubscribe(callback: (value: T) => void) {\n\t\tthis.subscribers.add(callback);\n\t\treturn () => {\n\t\t\tthis.subscribers.delete(callback);\n\t\t};\n\t}\n}\n\nclass WhopCoreNavigation {\n\tpublic path = new WhopCoreObservable<Route[]>([]);\n\tpublic sheet = new WhopCoreObservable<Route | null>(null);\n\n\tconstructor() {\n\t\tthis.getFullStack = this.getFullStack.bind(this);\n\t\tthis.getCurrentSheet = this.getCurrentSheet.bind(this);\n\t\tthis.subscribeToPath = this.subscribeToPath.bind(this);\n\t\tthis.subscribeToSheet = this.subscribeToSheet.bind(this);\n\t}\n\n\tpush(route: Route) {\n\t\tif (this.getCurrent().path.join(\"/\") === route.path.join(\"/\")) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.path.setValue([...this.path.getValue(), route]);\n\t\tif (typeof window !== \"undefined\" && window.history) {\n\t\t\ttry {\n\t\t\t\tconst pathBits = route.path.join(\"/\");\n\t\t\t\tconst paramsBits = Object.entries(route.params)\n\t\t\t\t\t.map(([key, value]) => `${key}=${value}`)\n\t\t\t\t\t.join(\"&\");\n\t\t\t\twindow.history.pushState(\n\t\t\t\t\t{ route, index: this.path.getValue().length },\n\t\t\t\t\t\"\",\n\t\t\t\t\t`#${pathBits}?${paramsBits}`,\n\t\t\t\t);\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\tpop() {\n\t\tif (typeof window !== \"undefined\" && window.history) {\n\t\t\ttry {\n\t\t\t\twindow.history.back();\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\tgetFullStack() {\n\t\treturn this.path.getValue();\n\t}\n\n\tgetCurrent() {\n\t\treturn (\n\t\t\tthis.path.getValue()[this.path.getValue().length - 1] ?? {\n\t\t\t\tpath: [],\n\t\t\t\tparams: {},\n\t\t\t}\n\t\t);\n\t}\n\n\tpresentSheet(route: Route) {\n\t\tthis.sheet.setValue(route);\n\t}\n\n\tdismissSheet() {\n\t\tthis.sheet.setValue(null);\n\t}\n\n\tgetCurrentSheet() {\n\t\treturn this.sheet.getValue() ?? null;\n\t}\n\n\tsubscribeToPath(callback: (route: Route[]) => void) {\n\t\treturn this.path.subscribe(callback);\n\t}\n\n\tsubscribeToSheet(callback: (route: Route | null) => void) {\n\t\treturn this.sheet.subscribe(callback);\n\t}\n}\n\nexport type TWhopCoreNavigation = WhopCoreNavigation;\n\nconst navigation = new WhopCoreNavigation();\nif (typeof window !== \"undefined\" && Platform.OS === \"web\") {\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t(window as any).whopCoreNavigation = navigation;\n\n\twindow.addEventListener(\"popstate\", (e) => {\n\t\tconst currentLength = navigation.path.getValue().length;\n\t\tif (!e.state) {\n\t\t\tnavigation.path.setValue(navigation.path.getValue().slice(0, -1));\n\t\t\treturn;\n\t\t}\n\t\tconst index = e.state.index;\n\t\tconst route = e.state.route;\n\t\tif (index < currentLength) {\n\t\t\tnavigation.path.setValue(navigation.path.getValue().slice(0, -1));\n\t\t} else {\n\t\t\tnavigation.path.setValue([...navigation.path.getValue(), route]);\n\t\t}\n\t});\n}\n\nfunction ok(data: unknown): FunctionCallResult {\n\treturn { isOk: true, data: JSON.stringify(data), errorMessage: null };\n}\n\nfunction err(message: string): FunctionCallResult {\n\treturn { isOk: false, data: null, errorMessage: message };\n}\n\nfunction getOrigin(): string {\n\tif (typeof window !== \"undefined\" && window.location) {\n\t\treturn window.location.origin;\n\t}\n\treturn \"\";\n}\n\nconst syncHandlers: ExecSyncApi = {\n\tgetAppApiOrigin() {\n\t\treturn { apiOrigin: getOrigin() };\n\t},\n\tcacheGet({ key }: { key?: string | null }) {\n\t\ttry {\n\t\t\tif (typeof window !== \"undefined\" && window.localStorage && key) {\n\t\t\t\treturn { data: window.localStorage.getItem(key) };\n\t\t\t}\n\t\t\treturn { data: null };\n\t\t} catch {\n\t\t\treturn { data: null };\n\t\t}\n\t},\n\tcacheSet({ key, data }: { key?: string | null; data?: string | null }) {\n\t\ttry {\n\t\t\tif (typeof window !== \"undefined\" && window.localStorage && key != null) {\n\t\t\t\tif (data == null) {\n\t\t\t\t\twindow.localStorage.removeItem(key);\n\t\t\t\t} else {\n\t\t\t\t\twindow.localStorage.setItem(key, data);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {}\n\t\treturn {};\n\t},\n\trouterPush(route) {\n\t\tif (route.origin) {\n\t\t\tconst path = `/${route.path.join(\"/\")}`;\n\t\t\tconst url = new URL(path, route.origin);\n\t\t\tfor (const [k, v] of Object.entries(route.params ?? {})) {\n\t\t\t\turl.searchParams.set(k, v);\n\t\t\t}\n\t\t\tloadIframeSdk().then((sdk) => sdk.openExternalUrl({ url: url.href }));\n\t\t} else {\n\t\t\tnavigation.push(route);\n\t\t}\n\t\treturn {};\n\t},\n\trouterPop() {\n\t\tnavigation.pop();\n\t\treturn {};\n\t},\n\trouterGetCurrent() {\n\t\treturn navigation.getCurrent();\n\t},\n\tsetNavigationBarData() {\n\t\treturn {};\n\t},\n\trouterPresentSheet({ path, params }: Route) {\n\t\tnavigation.presentSheet({\n\t\t\tpath: Array.from(path ?? []),\n\t\t\tparams: params ?? {},\n\t\t});\n\t\treturn {};\n\t},\n\trouterDismissSheet() {\n\t\tnavigation.dismissSheet();\n\t\treturn {};\n\t},\n\trouterGetCurrentSheet() {\n\t\treturn navigation.getCurrentSheet() ?? null;\n\t},\n\tdowngradeToWebView() {\n\t\treturn {};\n\t},\n\tgetHostAppDetails() {\n\t\treturn {\n\t\t\tbuild: \"web\",\n\t\t\tversion: \"0.0.0\",\n\t\t\tplatform: \"web\",\n\t\t\tbuildType: \"appstore\",\n\t\t};\n\t},\n\tsetScreenOrientationMode() {\n\t\treturn {};\n\t},\n};\n\nlet iframeModulePromise: Promise<typeof import(\"@whop/iframe\")> | null = null;\n\nasync function loadIframeModule() {\n\tif (!iframeModulePromise) {\n\t\tiframeModulePromise = import(\"@whop/iframe\");\n\t}\n\treturn await iframeModulePromise;\n}\n\nlet iframeSdk: ReturnType<typeof import(\"@whop/iframe\").createSdk> | null =\n\tnull;\n\nasync function loadIframeSdk() {\n\tif (!iframeSdk) {\n\t\tconst module = await loadIframeModule();\n\t\tiframeSdk = module.createSdk({\n\t\t\tappId: process.env.NEXT_PUBLIC_WHOP_APP_ID,\n\t\t\toverrideParentOrigins: [\"https://whop.com\", \"http://localhost:8004\"],\n\t\t});\n\t}\n\treturn iframeSdk;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\ntype MakeAsync<T extends Record<string, any>> = {\n\t[K in keyof T]: (params: Parameters<T[K]>[0]) => Promise<ReturnType<T[K]>>;\n};\n\nconst asyncHandlers: MakeAsync<Pick<ExecAsyncApi, \"inAppPurchase\">> = {\n\tinAppPurchase: async ({ planId, id }) => {\n\t\tconst sdk = await loadIframeSdk();\n\t\tconst result = await sdk.inAppPurchase({ planId, id: id ?? undefined });\n\t\tif (result.status === \"ok\") {\n\t\t\treturn {\n\t\t\t\tsessionId: result.data.sessionId,\n\t\t\t\treceiptId: result.data.receiptId,\n\t\t\t};\n\t\t}\n\t\tthrow new Error(result.error);\n\t},\n};\n\nconst nativeWhopCoreStub = {\n\texecSync(name: string, paramsJson: string): FunctionCallResult {\n\t\ttry {\n\t\t\tconst params = paramsJson ? JSON.parse(paramsJson) : {};\n\t\t\tconst handler = syncHandlers[name as keyof typeof syncHandlers];\n\t\t\tif (!handler) return err(`Unknown sync method: ${name}`);\n\t\t\tconst result = handler(params);\n\t\t\treturn ok(result);\n\t\t} catch (e) {\n\t\t\treturn err(e instanceof Error ? e.message : \"Unknown error\");\n\t\t}\n\t},\n\tasync execAsync(\n\t\tname: string,\n\t\tparamsJson: string,\n\t): Promise<FunctionCallResult> {\n\t\ttry {\n\t\t\tconst params = paramsJson ? JSON.parse(paramsJson) : {};\n\t\t\tconst handler = (\n\t\t\t\tasyncHandlers as Record<string, (p: unknown) => Promise<unknown>>\n\t\t\t)[name];\n\t\t\tif (!handler) return err(`Unknown async method: ${name}`);\n\t\t\tconst result = await handler(params);\n\t\t\treturn ok(result);\n\t\t} catch (e) {\n\t\t\treturn err(e instanceof Error ? e.message : \"Unknown error\");\n\t\t}\n\t},\n};\n\nexport default nativeWhopCoreStub;\n","import nativeWhopCore from \"./native-whop-core\";\nimport type { PathParams, PathParamsWithOrigin } from \"./props\";\n\n// biome-ignore lint/complexity/noBannedTypes: allow here\ntype EmptyObject = {};\n\nexport interface ExecSyncApi {\n\tgetAppApiOrigin(params: EmptyObject): { apiOrigin: string };\n\tcacheGet(params: { key?: string | null }): { data?: string | null };\n\tcacheSet(params: { key?: string | null; data?: string | null }): EmptyObject;\n\trouterPush(params: PathParamsWithOrigin): EmptyObject;\n\trouterPop(params: EmptyObject): EmptyObject;\n\trouterGetCurrent(params: EmptyObject): PathParams;\n\tsetNavigationBarData(params: {\n\t\ttitle?: string | null;\n\t\tdescription?: string | null;\n\t}): EmptyObject;\n\trouterPresentSheet(params: PathParams): EmptyObject;\n\trouterDismissSheet(params: EmptyObject): EmptyObject;\n\trouterGetCurrentSheet(params: EmptyObject): PathParams | null | undefined;\n\tdowngradeToWebView(params: EmptyObject): EmptyObject;\n\tgetHostAppDetails(params: EmptyObject): {\n\t\tbuild: string;\n\t\tversion: string;\n\t\tplatform: \"ios\" | \"android\" | \"web\";\n\t\tbuildType: \"appstore\" | \"testflight\" | \"debug\";\n\t};\n\tsetScreenOrientationMode(params: {\n\t\ttargetScreenOrientationMode: \"portrait\" | \"landscape\" | \"rotate\";\n\t}): EmptyObject;\n}\n\nexport interface ExecAsyncApi extends ExecSyncApi {\n\tinAppPurchase(params: { id?: string | null; planId: string }): {\n\t\tsessionId: string;\n\t\treceiptId: string;\n\t};\n}\n\nexport function __internal_execSync<F extends keyof ExecSyncApi>(\n\tname: F,\n\tparams: Parameters<ExecSyncApi[F]>[0],\n): ReturnType<ExecSyncApi[F]> {\n\tconst resultJson = nativeWhopCore.execSync(name, JSON.stringify(params));\n\tif (!resultJson.isOk) {\n\t\tthrow new Error(`Failed to execute ${name}: ${resultJson.errorMessage}`);\n\t}\n\n\treturn JSON.parse(resultJson.data || \"{}\") as ReturnType<ExecSyncApi[F]>;\n}\n\nexport async function __internal_execAsync<F extends keyof ExecAsyncApi>(\n\tname: F,\n\tparams: Parameters<ExecAsyncApi[F]>[0],\n): Promise<ReturnType<ExecAsyncApi[F]>> {\n\tconst resultJson = await nativeWhopCore.execAsync(\n\t\tname,\n\t\tJSON.stringify(params),\n\t);\n\n\tif (!resultJson.isOk) {\n\t\tthrow new Error(`Failed to execute ${name}: ${resultJson.errorMessage}`);\n\t}\n\n\treturn JSON.parse(resultJson.data || \"{}\") as ReturnType<ExecAsyncApi[F]>;\n}\n","/**\n * Web-safe wrapper for react-native-haptic-feedback.\n * - Lazily imports the native module only in native environments.\n * - Provides a no-op fallback on web to avoid runtime crashes.\n */\n\ntype HapticType =\n\t| \"selection\"\n\t| \"impactLight\"\n\t| \"impactMedium\"\n\t| \"impactHeavy\"\n\t| \"notificationSuccess\"\n\t| \"notificationWarning\"\n\t| \"notificationError\";\n\ntype HapticOptions = {\n\tenableVibrateFallback?: boolean;\n\tignoreAndroidSystemSettings?: boolean;\n};\n\n// Singleton holder for the native module once loaded\nlet nativeModule: {\n\ttrigger: (type: HapticType, options?: HapticOptions) => void;\n} | null = null;\nlet loadingPromise: Promise<void> | null = null;\n\nasync function ensureNativeLoaded(): Promise<void> {\n\t// If on web, skip loading entirely\n\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n\t// @ts-ignore - process may not be typed in RN web builds\n\tconst isWeb =\n\t\ttypeof document !== \"undefined\" && typeof window !== \"undefined\";\n\tif (isWeb) return;\n\n\tif (nativeModule || loadingPromise) {\n\t\treturn loadingPromise ?? Promise.resolve();\n\t}\n\n\tloadingPromise = import(\"react-native-haptic-feedback\")\n\t\t.then((mod) => {\n\t\t\tnativeModule = { trigger: mod.default.trigger };\n\t\t})\n\t\t.catch(() => {\n\t\t\t// Keep nativeModule null; fall back to noop\n\t\t})\n\t\t.finally(() => {\n\t\t\tloadingPromise = null;\n\t\t});\n\n\treturn loadingPromise;\n}\n\nconst HAPTIC_NOOP = {\n\ttrigger: (_type: HapticType, _options?: HapticOptions) => {\n\t\t// no-op on web\n\t},\n};\n\nconst Haptics = {\n\tasync trigger(type: HapticType, options?: HapticOptions): Promise<void> {\n\t\tawait ensureNativeLoaded();\n\t\tif (nativeModule) {\n\t\t\ttry {\n\t\t\t\tnativeModule.trigger(type, options);\n\t\t\t} catch {\n\t\t\t\t// ignore\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tHAPTIC_NOOP.trigger(type, options);\n\t},\n};\n\nexport default Haptics;\n"],"mappings":"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","names":["Platform","Platform"]}
|