UNPKG

@causalfoundry/js-sdk

Version:

Causal Foundry WEB SDK (JS/TS)

119 lines (108 loc) 4.17 kB
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 // } // ] // }; }