@mission_sciences/provider-sdk 0.4.0 → 0.5.0-dev.b340289
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 +0 -2
- package/dist/adapters/react/index.js +19 -23
- package/dist/adapters/react/index.js.map +1 -1
- package/dist/adapters/react/useMarketplaceSession.d.ts +0 -1
- package/dist/adapters/react/useMarketplaceSession.d.ts.map +1 -1
- package/dist/adapters/vue/useMarketplaceSession.d.ts +0 -2
- package/dist/adapters/vue/useMarketplaceSession.d.ts.map +1 -1
- package/dist/core/HeartbeatManager.d.ts.map +1 -1
- package/dist/core/MarketplaceSDK.d.ts +0 -4
- package/dist/core/MarketplaceSDK.d.ts.map +1 -1
- package/dist/core/PurchaseStateManager.d.ts.map +1 -1
- package/dist/core/constants.d.ts +3 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/marketplace-sdk.es.js +12 -53
- package/dist/marketplace-sdk.es.js.map +1 -1
- package/dist/marketplace-sdk.umd.js +1 -1
- package/dist/marketplace-sdk.umd.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -72,7 +72,6 @@ await sdk.initialize();
|
|
|
72
72
|
- **Heartbeat**: Automatic server sync at configurable intervals
|
|
73
73
|
- **Multi-Tab Sync**: Master tab election via BroadcastChannel API
|
|
74
74
|
- **Session Extension**: Self-service renewal with `extendSession(minutes)`
|
|
75
|
-
- **Early Completion**: End sessions early with `completeSession(actualMinutes)`
|
|
76
75
|
- **Visibility API**: Auto-pause timer when tab is hidden
|
|
77
76
|
- **Backend Validation**: Alternative to JWKS for sensitive apps
|
|
78
77
|
|
|
@@ -329,7 +328,6 @@ class MarketplaceSDK {
|
|
|
329
328
|
// Session control
|
|
330
329
|
async endSession(): Promise<void>
|
|
331
330
|
async extendSession(additionalMinutes: number): Promise<void>
|
|
332
|
-
async completeSession(actualUsageMinutes?: number): Promise<void>
|
|
333
331
|
|
|
334
332
|
// Data
|
|
335
333
|
getSessionData(): SessionData | null
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { useState as a, useRef as m, useEffect as
|
|
2
|
-
import { MarketplaceSDK as
|
|
3
|
-
function
|
|
4
|
-
const [d, S] = a(null), [f, c] = a(!0), [T,
|
|
5
|
-
|
|
1
|
+
import { useState as a, useRef as m, useEffect as W, useCallback as i } from "react";
|
|
2
|
+
import { MarketplaceSDK as z } from "../../../core/MarketplaceSDK";
|
|
3
|
+
function K(e) {
|
|
4
|
+
const [d, S] = a(null), [f, c] = a(!0), [T, u] = a(null), [g, k] = a(0), [b, h] = a("0:00"), [w, E] = a("0:00:00"), [R, s] = a(!1), n = m(null), o = m(null);
|
|
5
|
+
W(() => ((async () => {
|
|
6
6
|
try {
|
|
7
|
-
const r = new
|
|
7
|
+
const r = new z({
|
|
8
8
|
jwksUri: e.jwksUri,
|
|
9
9
|
marketplaceUrl: e.marketplaceUrl,
|
|
10
10
|
apiEndpoint: e.apiEndpoint,
|
|
@@ -27,18 +27,18 @@ function F(e) {
|
|
|
27
27
|
}), r.on("onSessionEnd", () => {
|
|
28
28
|
s(!1), e.onSessionEnd?.();
|
|
29
29
|
}), r.on("onError", (t) => {
|
|
30
|
-
|
|
31
|
-
}), n.current = r, await r.initialize(),
|
|
30
|
+
u(t.message), c(!1), e.onError?.(t);
|
|
31
|
+
}), n.current = r, await r.initialize(), o.current = window.setInterval(() => {
|
|
32
32
|
n.current && (k(n.current.getRemainingTime()), h(n.current.getFormattedTime()), E(n.current.getFormattedTimeWithHours()), s(n.current.isTimerRunning()));
|
|
33
33
|
}, 1e3);
|
|
34
34
|
} catch (r) {
|
|
35
35
|
const t = r instanceof Error ? r.message : "Unknown error";
|
|
36
|
-
|
|
36
|
+
u(t), c(!1);
|
|
37
37
|
}
|
|
38
38
|
})(), () => {
|
|
39
|
-
|
|
39
|
+
o.current && clearInterval(o.current), n.current && n.current.destroy();
|
|
40
40
|
}), []);
|
|
41
|
-
const
|
|
41
|
+
const y = i(() => {
|
|
42
42
|
n.current?.startTimer(), s(!0);
|
|
43
43
|
}, []), H = i(() => {
|
|
44
44
|
n.current?.pauseTimer(), s(!1);
|
|
@@ -46,31 +46,27 @@ function F(e) {
|
|
|
46
46
|
n.current?.resumeTimer(), s(!0);
|
|
47
47
|
}, []), v = i(() => {
|
|
48
48
|
n.current?.endSession(), s(!1);
|
|
49
|
-
}, []),
|
|
49
|
+
}, []), U = i(async (l) => {
|
|
50
50
|
if (!n.current) throw new Error("SDK not initialized");
|
|
51
|
-
await n.current.extendSession(
|
|
52
|
-
}, []), D = i(async (o) => {
|
|
53
|
-
if (!n.current) throw new Error("SDK not initialized");
|
|
54
|
-
await n.current.completeSession(o);
|
|
51
|
+
await n.current.extendSession(l);
|
|
55
52
|
}, []);
|
|
56
53
|
return {
|
|
57
54
|
session: d,
|
|
58
55
|
loading: f,
|
|
59
56
|
error: T,
|
|
60
57
|
remainingTime: g,
|
|
61
|
-
formattedTime:
|
|
62
|
-
formattedTimeWithHours:
|
|
63
|
-
isTimerRunning:
|
|
64
|
-
startTimer:
|
|
58
|
+
formattedTime: b,
|
|
59
|
+
formattedTimeWithHours: w,
|
|
60
|
+
isTimerRunning: R,
|
|
61
|
+
startTimer: y,
|
|
65
62
|
pauseTimer: H,
|
|
66
63
|
resumeTimer: I,
|
|
67
64
|
endSession: v,
|
|
68
|
-
extendSession:
|
|
69
|
-
completeSession: D,
|
|
65
|
+
extendSession: U,
|
|
70
66
|
sdk: n.current
|
|
71
67
|
};
|
|
72
68
|
}
|
|
73
69
|
export {
|
|
74
|
-
|
|
70
|
+
K as useMarketplaceSession
|
|
75
71
|
};
|
|
76
72
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/adapters/react/useMarketplaceSession.ts"],"sourcesContent":["import { useEffect, useState, useCallback, useRef } from 'react';\nimport { MarketplaceSDK } from '../../core/MarketplaceSDK';\nimport type { SDKConfig, SessionData } from '../../types';\n\nexport interface UseMarketplaceSessionOptions extends Omit<SDKConfig, 'hooks'> {\n onSessionStart?: (data: SessionData) => void;\n onSessionWarning?: (data: { remainingSeconds: number }) => void;\n onSessionEnd?: () => void;\n onError?: (error: Error) => void;\n hooks?: SDKConfig['hooks'];\n}\n\nexport interface UseMarketplaceSessionReturn {\n session: SessionData | null;\n loading: boolean;\n error: string | null;\n remainingTime: number;\n formattedTime: string;\n formattedTimeWithHours: string;\n isTimerRunning: boolean;\n startTimer: () => void;\n pauseTimer: () => void;\n resumeTimer: () => void;\n endSession: () => void;\n extendSession: (minutes: number) => Promise<void>;\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/adapters/react/useMarketplaceSession.ts"],"sourcesContent":["import { useEffect, useState, useCallback, useRef } from 'react';\nimport { MarketplaceSDK } from '../../core/MarketplaceSDK';\nimport type { SDKConfig, SessionData } from '../../types';\n\nexport interface UseMarketplaceSessionOptions extends Omit<SDKConfig, 'hooks'> {\n onSessionStart?: (data: SessionData) => void;\n onSessionWarning?: (data: { remainingSeconds: number }) => void;\n onSessionEnd?: () => void;\n onError?: (error: Error) => void;\n hooks?: SDKConfig['hooks'];\n}\n\nexport interface UseMarketplaceSessionReturn {\n session: SessionData | null;\n loading: boolean;\n error: string | null;\n remainingTime: number;\n formattedTime: string;\n formattedTimeWithHours: string;\n isTimerRunning: boolean;\n startTimer: () => void;\n pauseTimer: () => void;\n resumeTimer: () => void;\n endSession: () => void;\n extendSession: (minutes: number) => Promise<void>;\n sdk: MarketplaceSDK | null;\n}\n\nexport function useMarketplaceSession(\n options: UseMarketplaceSessionOptions\n): UseMarketplaceSessionReturn {\n const [session, setSession] = useState<SessionData | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [remainingTime, setRemainingTime] = useState(0);\n const [formattedTime, setFormattedTime] = useState('0:00');\n const [formattedTimeWithHours, setFormattedTimeWithHours] = useState('0:00:00');\n const [isTimerRunning, setIsTimerRunning] = useState(false);\n\n const sdkRef = useRef<MarketplaceSDK | null>(null);\n const intervalRef = useRef<number | null>(null);\n\n useEffect(() => {\n const initializeSDK = async () => {\n try {\n const sdk = new MarketplaceSDK({\n jwksUri: options.jwksUri,\n marketplaceUrl: options.marketplaceUrl,\n apiEndpoint: options.apiEndpoint,\n debug: options.debug,\n autoStart: options.autoStart,\n warningThresholdSeconds: options.warningThresholdSeconds,\n customStyles: options.customStyles,\n applicationId: options.applicationId,\n enableHeartbeat: options.enableHeartbeat ?? false,\n heartbeatIntervalSeconds: options.heartbeatIntervalSeconds ?? 30,\n enableTabSync: options.enableTabSync ?? false,\n pauseOnHidden: options.pauseOnHidden ?? false,\n useBackendValidation: options.useBackendValidation ?? false,\n hooks: options.hooks,\n });\n\n sdk.on('onSessionStart', (data) => {\n setSession(data);\n setLoading(false);\n setIsTimerRunning(sdk.isTimerRunning());\n options.onSessionStart?.(data);\n });\n\n sdk.on('onSessionWarning', (data) => {\n options.onSessionWarning?.(data);\n });\n\n sdk.on('onSessionEnd', () => {\n setIsTimerRunning(false);\n options.onSessionEnd?.();\n });\n\n sdk.on('onError', (err) => {\n setError(err.message);\n setLoading(false);\n options.onError?.(err);\n });\n\n sdkRef.current = sdk;\n await sdk.initialize();\n\n intervalRef.current = window.setInterval(() => {\n if (sdkRef.current) {\n setRemainingTime(sdkRef.current.getRemainingTime());\n setFormattedTime(sdkRef.current.getFormattedTime());\n setFormattedTimeWithHours(sdkRef.current.getFormattedTimeWithHours());\n setIsTimerRunning(sdkRef.current.isTimerRunning());\n }\n }, 1000);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n setError(errorMessage);\n setLoading(false);\n }\n };\n\n initializeSDK();\n\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n }\n if (sdkRef.current) {\n sdkRef.current.destroy();\n }\n };\n }, []);\n\n const startTimer = useCallback(() => {\n sdkRef.current?.startTimer();\n setIsTimerRunning(true);\n }, []);\n\n const pauseTimer = useCallback(() => {\n sdkRef.current?.pauseTimer();\n setIsTimerRunning(false);\n }, []);\n\n const resumeTimer = useCallback(() => {\n sdkRef.current?.resumeTimer();\n setIsTimerRunning(true);\n }, []);\n\n const endSession = useCallback(() => {\n sdkRef.current?.endSession();\n setIsTimerRunning(false);\n }, []);\n\n const extendSession = useCallback(async (minutes: number) => {\n if (!sdkRef.current) throw new Error('SDK not initialized');\n await sdkRef.current.extendSession(minutes);\n }, []);\n\n return {\n session,\n loading,\n error,\n remainingTime,\n formattedTime,\n formattedTimeWithHours,\n isTimerRunning,\n startTimer,\n pauseTimer,\n resumeTimer,\n endSession,\n extendSession,\n sdk: sdkRef.current,\n };\n}\n"],"names":["useMarketplaceSession","options","session","setSession","useState","loading","setLoading","error","setError","remainingTime","setRemainingTime","formattedTime","setFormattedTime","formattedTimeWithHours","setFormattedTimeWithHours","isTimerRunning","setIsTimerRunning","sdkRef","useRef","intervalRef","useEffect","sdk","MarketplaceSDK","data","err","errorMessage","startTimer","useCallback","pauseTimer","resumeTimer","endSession","extendSession","minutes"],"mappings":"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"}
|
|
@@ -23,7 +23,6 @@ export interface UseMarketplaceSessionReturn {
|
|
|
23
23
|
resumeTimer: () => void;
|
|
24
24
|
endSession: () => void;
|
|
25
25
|
extendSession: (minutes: number) => Promise<void>;
|
|
26
|
-
completeSession: (actualUsageMinutes?: number) => Promise<void>;
|
|
27
26
|
sdk: MarketplaceSDK | null;
|
|
28
27
|
}
|
|
29
28
|
export declare function useMarketplaceSession(options: UseMarketplaceSessionOptions): UseMarketplaceSessionReturn;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMarketplaceSession.d.ts","sourceRoot":"","sources":["../../../src/adapters/react/useMarketplaceSession.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,4BAA6B,SAAQ,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5E,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC7C,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAChE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,
|
|
1
|
+
{"version":3,"file":"useMarketplaceSession.d.ts","sourceRoot":"","sources":["../../../src/adapters/react/useMarketplaceSession.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,4BAA6B,SAAQ,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5E,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC7C,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAChE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,2BAA2B,CA4H7B"}
|
|
@@ -15,7 +15,6 @@ export declare function useMarketplaceSession(options?: UseMarketplaceSessionOpt
|
|
|
15
15
|
pauseTimer: () => void;
|
|
16
16
|
resumeTimer: () => void;
|
|
17
17
|
extendSession: (additionalMinutes: number) => Promise<void>;
|
|
18
|
-
completeSession: (actualUsageMinutes?: number) => Promise<void>;
|
|
19
18
|
endSession: () => Promise<void>;
|
|
20
19
|
getSessionData: () => SessionData | null;
|
|
21
20
|
getRemainingTime: () => number;
|
|
@@ -32,7 +31,6 @@ export declare function useMarketplaceSession(options?: UseMarketplaceSessionOpt
|
|
|
32
31
|
pauseTimer: () => void;
|
|
33
32
|
resumeTimer: () => void;
|
|
34
33
|
extendSession: (additionalMinutes: number) => Promise<void>;
|
|
35
|
-
completeSession: (actualUsageMinutes?: number) => Promise<void>;
|
|
36
34
|
endSession: () => Promise<void>;
|
|
37
35
|
getSessionData: () => SessionData | null;
|
|
38
36
|
getRemainingTime: () => number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMarketplaceSession.d.ts","sourceRoot":"","sources":["../../../src/adapters/vue/useMarketplaceSession.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAElG,MAAM,WAAW,4BAA6B,SAAQ,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5E,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,4BAAiE
|
|
1
|
+
{"version":3,"file":"useMarketplaceSession.d.ts","sourceRoot":"","sources":["../../../src/adapters/vue/useMarketplaceSession.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAElG,MAAM,WAAW,4BAA6B,SAAQ,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5E,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,4BAAiE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6F/G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeartbeatManager.d.ts","sourceRoot":"","sources":["../../src/core/HeartbeatManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HeartbeatManager.d.ts","sourceRoot":"","sources":["../../src/core/HeartbeatManager.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,qBAAa,gBAAgB;IASzB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,OAAO,CAAC;IAZlB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,MAAM,CAAS;gBAGb,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,GAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,IAAI,aAAA,EAC3C,OAAO,CAAC,GAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,aAAA,EACxC,wBAAwB,GAAE,MAAW,EACrC,KAAK,GAAE,OAAe;IAOxB;;OAEG;IACH,KAAK,IAAI,IAAI;IAkBb;;OAEG;IACH,IAAI,IAAI,IAAI;IASZ;;OAEG;YACW,aAAa;IA6D3B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CActC"}
|
|
@@ -68,10 +68,6 @@ export declare class MarketplaceSDK {
|
|
|
68
68
|
* Phase 2: Extend session
|
|
69
69
|
*/
|
|
70
70
|
extendSession(additionalMinutes: number): Promise<void>;
|
|
71
|
-
/**
|
|
72
|
-
* Phase 2: Complete session
|
|
73
|
-
*/
|
|
74
|
-
completeSession(actualUsageMinutes?: number): Promise<void>;
|
|
75
71
|
/**
|
|
76
72
|
* End session
|
|
77
73
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplaceSDK.d.ts","sourceRoot":"","sources":["../../src/core/MarketplaceSDK.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAgI,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"MarketplaceSDK.d.ts","sourceRoot":"","sources":["../../src/core/MarketplaceSDK.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAgI,MAAM,UAAU,CAAC;AAI3L;;;;;;;GAOG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,aAAa,CAA8B;gBAEvC,MAAM,EAAE,SAAS;IAsD7B;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;IAKpE;;OAEG;YACW,WAAW;IAuCzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAO/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IA+LxC;;OAEG;YACW,mBAAmB;IAkCjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAapC;;OAEG;IACH,UAAU,IAAI,IAAI;IAYlB;;OAEG;IACH,UAAU,IAAI,IAAI;IAMlB;;OAEG;IACH,WAAW,IAAI,IAAI;IAMnB;;OAEG;IACG,aAAa,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqE7D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2DjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0CxB;;OAEG;IACH,cAAc,IAAI,WAAW,GAAG,IAAI;IAIpC;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,yBAAyB,IAAI,MAAM;IAInC;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IA4ErC;;OAEG;IACH,uBAAuB,IAAI,oBAAoB;IAI/C;;OAEG;IACH,OAAO,IAAI,IAAI;CAiBhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PurchaseStateManager.d.ts","sourceRoot":"","sources":["../../src/core/PurchaseStateManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,qBAAqB,EAAqD,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"PurchaseStateManager.d.ts","sourceRoot":"","sources":["../../src/core/PurchaseStateManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,qBAAqB,EAAqD,MAAM,mBAAmB,CAAC;AAG5H;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAA6B;gBAE/B,MAAM,EAAE,0BAA0B;IAO9C;;;OAGG;IACG,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA2B5E;;;OAGG;IACH,OAAO,CAAC,2BAA2B;CAmBpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,eAAO,MAAM,YAAY,YAAY,CAAC"}
|
|
@@ -1787,6 +1787,7 @@ class TimerManager {
|
|
|
1787
1787
|
this.logger.log("Remaining time updated to:", seconds, "seconds");
|
|
1788
1788
|
}
|
|
1789
1789
|
}
|
|
1790
|
+
const SDK_API_BASE = "/v1/sdk";
|
|
1790
1791
|
class HeartbeatManager {
|
|
1791
1792
|
constructor(sessionId, apiEndpoint, token, onSync, onError, heartbeatIntervalSeconds = 30, debug = false) {
|
|
1792
1793
|
this.sessionId = sessionId;
|
|
@@ -1838,7 +1839,7 @@ class HeartbeatManager {
|
|
|
1838
1839
|
this.logger.log("Sending heartbeat...");
|
|
1839
1840
|
try {
|
|
1840
1841
|
const response = await fetch(
|
|
1841
|
-
`${this.apiEndpoint}/sessions/${this.sessionId}/heartbeat`,
|
|
1842
|
+
`${this.apiEndpoint}${SDK_API_BASE}/sessions/${this.sessionId}/heartbeat`,
|
|
1842
1843
|
{
|
|
1843
1844
|
method: "POST",
|
|
1844
1845
|
headers: {
|
|
@@ -2043,7 +2044,7 @@ class PurchaseStateManager {
|
|
|
2043
2044
|
*/
|
|
2044
2045
|
async checkItemPurchaseState(itemId) {
|
|
2045
2046
|
try {
|
|
2046
|
-
const response = await fetch(`${this.config.apiEndpoint}/items/${itemId}/purchase-state`, {
|
|
2047
|
+
const response = await fetch(`${this.config.apiEndpoint}${SDK_API_BASE}/items/${itemId}/purchase-state`, {
|
|
2047
2048
|
method: "GET",
|
|
2048
2049
|
headers: {
|
|
2049
2050
|
"Content-Type": "application/json"
|
|
@@ -2984,7 +2985,7 @@ class MarketplaceSDK {
|
|
|
2984
2985
|
*/
|
|
2985
2986
|
async validateWithBackend(token) {
|
|
2986
2987
|
const response = await fetch(
|
|
2987
|
-
`${this.config.apiEndpoint}/sessions/validate`,
|
|
2988
|
+
`${this.config.apiEndpoint}${SDK_API_BASE}/sessions/validate`,
|
|
2988
2989
|
{
|
|
2989
2990
|
method: "POST",
|
|
2990
2991
|
headers: {
|
|
@@ -3088,15 +3089,16 @@ class MarketplaceSDK {
|
|
|
3088
3089
|
this.logger.info("Extending session by", additionalMinutes, "minutes");
|
|
3089
3090
|
try {
|
|
3090
3091
|
const response = await fetch(
|
|
3091
|
-
`${this.config.apiEndpoint}/sessions/${this.sessionData.sessionId}/
|
|
3092
|
+
`${this.config.apiEndpoint}${SDK_API_BASE}/sessions/${this.sessionData.sessionId}/extend`,
|
|
3092
3093
|
{
|
|
3093
|
-
method: "
|
|
3094
|
+
method: "POST",
|
|
3094
3095
|
headers: {
|
|
3095
3096
|
"Authorization": `Bearer ${this.jwtToken}`,
|
|
3096
3097
|
"Content-Type": "application/json"
|
|
3097
3098
|
},
|
|
3098
3099
|
body: JSON.stringify({
|
|
3099
|
-
|
|
3100
|
+
extensionMinutes: additionalMinutes,
|
|
3101
|
+
idempotencyKey: crypto.randomUUID()
|
|
3100
3102
|
})
|
|
3101
3103
|
}
|
|
3102
3104
|
);
|
|
@@ -3108,9 +3110,9 @@ class MarketplaceSDK {
|
|
|
3108
3110
|
);
|
|
3109
3111
|
}
|
|
3110
3112
|
const data = await response.json();
|
|
3111
|
-
this.sessionData.exp = data.
|
|
3113
|
+
this.sessionData.exp = data.newExpiresAt;
|
|
3112
3114
|
const now = Math.floor(Date.now() / 1e3);
|
|
3113
|
-
const remainingSeconds = data.
|
|
3115
|
+
const remainingSeconds = data.newExpiresAt - now;
|
|
3114
3116
|
this.timer?.updateRemainingTime(remainingSeconds);
|
|
3115
3117
|
this.tabSync?.broadcast("timer_update", { remainingSeconds });
|
|
3116
3118
|
if (this.config.hooks?.onSessionExtend) {
|
|
@@ -3118,7 +3120,7 @@ class MarketplaceSDK {
|
|
|
3118
3120
|
sessionId: this.sessionData.sessionId,
|
|
3119
3121
|
userId: this.sessionData.userId,
|
|
3120
3122
|
additionalMinutes,
|
|
3121
|
-
newExpiresAt: data.
|
|
3123
|
+
newExpiresAt: data.newExpiresAt
|
|
3122
3124
|
};
|
|
3123
3125
|
await this.executeHook("onSessionExtend", this.config.hooks.onSessionExtend, extendContext, false);
|
|
3124
3126
|
}
|
|
@@ -3133,49 +3135,6 @@ class MarketplaceSDK {
|
|
|
3133
3135
|
throw sdkError;
|
|
3134
3136
|
}
|
|
3135
3137
|
}
|
|
3136
|
-
/**
|
|
3137
|
-
* Phase 2: Complete session
|
|
3138
|
-
*/
|
|
3139
|
-
async completeSession(actualUsageMinutes) {
|
|
3140
|
-
if (!this.sessionData || !this.jwtToken) {
|
|
3141
|
-
throw new SDKError("No active session", "NO_SESSION");
|
|
3142
|
-
}
|
|
3143
|
-
this.logger.info("Completing session...");
|
|
3144
|
-
try {
|
|
3145
|
-
const response = await fetch(
|
|
3146
|
-
`${this.config.apiEndpoint}/sessions/${this.sessionData.sessionId}/complete`,
|
|
3147
|
-
{
|
|
3148
|
-
method: "POST",
|
|
3149
|
-
headers: {
|
|
3150
|
-
"Authorization": `Bearer ${this.jwtToken}`,
|
|
3151
|
-
"Content-Type": "application/json"
|
|
3152
|
-
},
|
|
3153
|
-
body: JSON.stringify({
|
|
3154
|
-
actual_usage_minutes: actualUsageMinutes,
|
|
3155
|
-
metadata: {}
|
|
3156
|
-
})
|
|
3157
|
-
}
|
|
3158
|
-
);
|
|
3159
|
-
if (!response.ok) {
|
|
3160
|
-
throw new SDKError(
|
|
3161
|
-
"Session completion failed",
|
|
3162
|
-
"COMPLETION_FAILED",
|
|
3163
|
-
response.status
|
|
3164
|
-
);
|
|
3165
|
-
}
|
|
3166
|
-
const data = await response.json();
|
|
3167
|
-
this.logger.info("Session completed:", data);
|
|
3168
|
-
this.endSession();
|
|
3169
|
-
} catch (error) {
|
|
3170
|
-
this.logger.error("Failed to complete session:", error);
|
|
3171
|
-
const sdkError = error instanceof SDKError ? error : new SDKError(
|
|
3172
|
-
error instanceof Error ? error.message : "Completion failed",
|
|
3173
|
-
"COMPLETION_ERROR"
|
|
3174
|
-
);
|
|
3175
|
-
this.events.onError?.(sdkError);
|
|
3176
|
-
throw sdkError;
|
|
3177
|
-
}
|
|
3178
|
-
}
|
|
3179
3138
|
/**
|
|
3180
3139
|
* End session
|
|
3181
3140
|
*/
|
|
@@ -3305,7 +3264,7 @@ class MarketplaceSDK {
|
|
|
3305
3264
|
onConfirm: async () => {
|
|
3306
3265
|
try {
|
|
3307
3266
|
const response = await fetch(
|
|
3308
|
-
`${this.config.apiEndpoint}/items/${itemId}/purchase`,
|
|
3267
|
+
`${this.config.apiEndpoint}${SDK_API_BASE}/items/${itemId}/purchase`,
|
|
3309
3268
|
{
|
|
3310
3269
|
method: "POST",
|
|
3311
3270
|
headers: {
|