@causalfoundry/js-sdk
Version:
Causal Foundry WEB SDK (JS/TS)
119 lines (108 loc) • 4.17 kB
text/typescript
import {NetworkProxy} from "../../../drivers/network/typings"
import {IStorage} from "../../../drivers/storage/typings"
import {ActionAPIResponse, INudgesRepository, NudgeResponseItem} from "./typings"
import {NudgeScreenType} from "../../commonTypes";
import {getLocalStorageUserId} from "../../../drivers/CfSystem";
const SHOWN_NUDGES = 'cfLog-shown-nudges'
export default class NudgesRepository implements INudgesRepository {
private apiURL
private networkDriver
private storageDriver
public constructor(url: string, bsNetwork: NetworkProxy, storageDriver: IStorage) {
this.apiURL = url
this.networkDriver = bsNetwork
this.storageDriver = storageDriver
}
public markNudgeAsShown = (nudgeId: string): void => {
const shownNudges = JSON.parse(this.storageDriver.get(SHOWN_NUDGES)) || []
shownNudges.push(nudgeId)
this.storageDriver.save(SHOWN_NUDGES, JSON.stringify(shownNudges))
}
public haveBeenAlreadyShown = (nudgeId: string): boolean => {
const shownNudges = JSON.parse(this.storageDriver.get(SHOWN_NUDGES)) || []
return shownNudges.includes(nudgeId)
}
public getNudges = async (userId: string, nudgeScreenType: NudgeScreenType): Promise<NudgeResponseItem[]> => {
const userIdValue = userId || getLocalStorageUserId()
if (!userIdValue) {
return []
}
const requestObject = {
render_method: "in_app_message",
type: "message",
delivery_mode: "one-off",
user_id: userIdValue,
...(nudgeScreenType !== NudgeScreenType.None
? {attr: {render_page: nudgeScreenType}}
: {})
};
// await this.networkDriver.send(`${this.apiURL}`, requestObject)
// return getPayload().data
const response = await this.networkDriver.send(`${this.apiURL}`, requestObject)
if (!response || !response.data || !response.data.data) {
return []
}
return response.data.data
}
}
function getPayload(): ActionAPIResponse {
return {
data: [
{
payload: {
type: "message",
render_method: "in_app_message",
delivery_mode: "one-off",
content: {
body: "and some text here",
title: "some text here"
},
attr: {
"cta_type": "redirect",
"cta_id": "11"
},
tags: null,
internal: {
inv_id: 44,
action_id: 32,
ref_time: "2025-10-14T15:32:00Z",
expired_at: "2026-10-16T15:32:00Z",
followup_of_ref: "0001-01-01T00:00:00Z",
template_vals: null
}
},
error: null
}
]
}
// return {
// data: [
// {
// payload: {
// type: "message",
// render_method: "in_app_message",
// content: {
// body: "Hello World of Kenkai",
// title: "Hello World"
// },
// attr: {
// render_page: "home",
// cta_type: "redirect",
// cta_id: "ABCD"
// },
// internal: {
// inv_id: 9,
// ref_time: "2025-09-02T16:43:00Z",
// action_id: 2,
// expired_at: "2025-09-14T16:43:00Z",
// model_class: "",
// model_id: 0,
// followup_of: 0,
// followup_of_ref: "0001-01-01T00:00:00Z"
// }
// },
// error: null
// }
// ]
// };
}