38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import * as functions from 'firebase-functions'
|
|
import { applyEntitlementSync, EntitlementState } from './entitlementLogic'
|
|
|
|
/**
|
|
* Callable function that forces a re-sync of entitlements for the
|
|
* authenticated caller.
|
|
*
|
|
* Request body: { } (auth context supplies uid)
|
|
* Response: EntitlementState
|
|
*
|
|
* The client can invoke this after a purchase/restore or when local
|
|
* entitlement state appears stale. In production this should fetch the
|
|
* latest entitlement state from RevenueCat; for now it computes the
|
|
* state from the existing Firestore document and rewrites it, ensuring
|
|
* consistent field shapes.
|
|
*/
|
|
export const syncEntitlement = functions.https.onCall(async (data, context) => {
|
|
if (!context.auth?.uid) {
|
|
throw new functions.https.HttpsError(
|
|
'unauthenticated',
|
|
'Caller must be authenticated.'
|
|
)
|
|
}
|
|
|
|
const userId = context.auth.uid
|
|
|
|
try {
|
|
const state = await applyEntitlementSync(userId)
|
|
return state satisfies EntitlementState
|
|
} catch (err) {
|
|
console.error('[syncEntitlement] failed:', err)
|
|
throw new functions.https.HttpsError(
|
|
'internal',
|
|
'Entitlement sync failed.'
|
|
)
|
|
}
|
|
})
|