@pkme/widget-bridge
Version:
TypeScript React bridge client for Secret City Games widget integration across Framer, Figma, and web platforms
84 lines (73 loc) • 2.33 kB
JavaScript
/**
* @pkme/widget-bridge - Main Module (CommonJS)
*/
const { bridge } = require('./bridge.js');
// Import React hooks
const reactHooks = require('./react.js');
module.exports = {
bridge,
BridgeError: class BridgeError extends Error {
constructor(message, code) {
super(message);
this.name = 'BridgeError';
this.code = code;
}
},
MESSAGE_TYPES: {
SAVE_GLOBAL: 'data/saveGlobal',
SAVE_ITEM: 'data/saveItem',
SUBSCRIBE: 'data/subscribe',
UNSUBSCRIBE: 'data/unsubscribe',
GLOBAL_UPDATED: 'data/globalUpdated',
ITEM_UPDATED: 'data/itemUpdated',
ITEM_DELETED: 'data/itemDeleted',
NAVIGATE: 'navigation/navigate',
BACK: 'navigation/back',
GET_CURRENT: 'navigation/getCurrent',
READY: 'app/ready',
CARD_COMPLETED: 'app/cardCompleted',
NAVIGATE_TO_NEXT_CARD: 'app/navigateToNextCard'
},
// Utility functions
navigateToNextCard: async function(params = {}) {
await bridge.complete({ completed: true, ...params });
if (params.nextCardId) {
await bridge.navigate('/games/' + bridge.context?.gameId + '/cards/' + params.nextCardId, params);
}
},
completeCard: async function(completionData = {}) {
const dataToSave = {
completed: true,
completedAt: Date.now(),
...completionData
};
await bridge.setItem(dataToSave);
await bridge.setGlobal({ cardCompletion: dataToSave });
await bridge.send('app/cardCompleted', dataToSave);
if (completionData.nextCardId) {
await this.navigateToNextCard({ completed: true, ...completionData });
}
},
navigateToCard: async function(cardId, cardData = {}) {
await bridge.navigate('/games/' + bridge.context?.gameId + '/cards/' + cardId, {
nextCardId: cardId,
...cardData
});
},
savePuzzleProgress: async function(progress, additionalData = {}) {
await bridge.setItem({
progress,
timestamp: Date.now(),
...additionalData
});
},
updateGlobalGameState: async function(updates) {
await bridge.setGlobal(updates);
},
// Re-export React hooks for Framer compatibility
useBridge: reactHooks.useBridge,
useBridgeData: reactHooks.useBridgeData,
useGlobalData: reactHooks.useGlobalData,
useItemData: reactHooks.useItemData,
useNavigation: reactHooks.useNavigation
};