UNPKG

@aimee-blue/ab-service-kit

Version:
1 lines 3.32 kB
{"version":3,"sources":["../../../src/shared/pubsub/publishAction.ts"],"names":["publishAction","creator","args","publishActionToTopics","topic","multicastAction","topics","length","Error","app","messagePrototype","channel","senderId","timestamp","messageId","traceId","Promise","all","map","message","console","log","type"],"mappings":";;;;;;;AAMA;;AACA;;AACA;;AACA;;AAEO,MAAMA,aAAa,GAAG,OAG3BC,OAH2B,EAI3B,GAAGC,IAJwB,KAKxB;AACH,SAAOC,qBAAqB,CAAC,CAACF,OAAO,CAACG,KAAT,CAAD,EAAkBH,OAAlB,EAA2B,GAAGC,IAA9B,CAA5B;AACD,CAPM;;;;AASA,MAAMG,eAAe,GAAG,OAG7BC,MAH6B,EAI7BL,OAJ6B,EAK7B,GAAGC,IAL0B,KAM1B;AACH,SAAOC,qBAAqB,CAACG,MAAD,EAASL,OAAT,EAAkB,GAAGC,IAArB,CAA5B;AACD,CARM;;;;AAUP,MAAMC,qBAAqB,GAAG,OAG5BG,MAH4B,EAI5BL,OAJ4B,EAK5B,GAAGC,IALyB,KAMzB;AACH,MAAII,MAAM,CAACC,MAAP,KAAkB,CAAtB,EAAyB;AACvB,UAAM,IAAIC,KAAJ,CAAU,uCAAV,CAAN;AACD;;AAED,QAAMC,GAAG,GAAG,MAAM,mBAAlB;AAEA,QAAMC,gBAA6D,GAAG;AACpEC,IAAAA,OAAO,EAAEL,MAAM,CAAC,CAAD,CADqD;AAEpEM,IAAAA,QAAQ,EAAEH,GAF0D;AAGpEI,IAAAA,SAAS,EAAE,qBAHyD;AAIpEC,IAAAA,SAAS,EAAE,iBAJyD;AAKpEC,IAAAA,OAAO,EAAE,iBAL2D;AAMpE,OAAId,OAAO,CAAC,GAAGC,IAAJ;AANyD,GAAtE;AASA,QAAMc,OAAO,CAACC,GAAR,CACJX,MAAM,CAACY,GAAP,CAAW,MAAOd,KAAP,IAAiB;AAC1B,UAAMe,OAAO,GAAG,EACd,GAAGT,gBADW;AAEdC,MAAAA,OAAO,EAAEP;AAFK,KAAhB;AAKA,UAAM,qBAAQA,KAAR,EAAee,OAAf,CAAN;AAEAC,IAAAA,OAAO,CAACC,GAAR,CACG,6BAA4BF,OAAO,CAACG,IAAK,aAAYH,OAAO,CAACR,OAAQ,YAAWQ,OAAO,CAACL,SAAU,cAAaK,OAAO,CAACJ,OAAQ,UAASI,OAAO,CAACP,QAAS,EAD5J;AAGD,GAXD,CADI,CAAN,CAhBG,CA+BH;;AACA,SAAOF,gBAAP;AACD,CAvCD","sourcesContent":["import {\n ITopicBoundActionCreator,\n IActionCreator,\n Channels,\n IAnyAction,\n} from '@aimee-blue/ab-contracts';\nimport { appName } from '../app';\nimport { localNow } from '../time';\nimport { publish } from './pubsub';\nimport { uuid } from '../uuid';\n\nexport const publishAction = async <\n C extends ITopicBoundActionCreator<IAnyAction, string, unknown[]>\n>(\n creator: C,\n ...args: Parameters<C>\n) => {\n return publishActionToTopics([creator.topic], creator, ...args);\n};\n\nexport const multicastAction = async <\n C extends IActionCreator<IAnyAction, unknown[]>\n>(\n topics: string[],\n creator: C,\n ...args: Parameters<C>\n) => {\n return publishActionToTopics(topics, creator, ...args);\n};\n\nconst publishActionToTopics = async <\n C extends IActionCreator<IAnyAction, unknown[]>\n>(\n topics: string[],\n creator: C,\n ...args: Parameters<C>\n) => {\n if (topics.length === 0) {\n throw new Error('Need at least one topic to publish to');\n }\n\n const app = await appName();\n\n const messagePrototype: Channels.IPubSubMessageShape<ReturnType<C>> = {\n channel: topics[0],\n senderId: app,\n timestamp: localNow(),\n messageId: uuid(),\n traceId: uuid(),\n ...(creator(...args) as ReturnType<C>),\n };\n\n await Promise.all(\n topics.map(async (topic) => {\n const message = {\n ...messagePrototype,\n channel: topic,\n };\n\n await publish(topic, message);\n\n console.log(\n `Published message of type ${message.type} to topic ${message.channel} with id ${message.messageId} (trace id ${message.traceId}) from ${message.senderId}`\n );\n })\n );\n\n // messages only differ by channel, so we shouldn't rely on that\n return messagePrototype;\n};\n"],"file":"publishAction.js"}