diff --git a/ts/.yarn/install-state.gz b/ts/.yarn/install-state.gz index d99ea50..68e99ca 100644 Binary files a/ts/.yarn/install-state.gz and b/ts/.yarn/install-state.gz differ diff --git a/ts/package.json b/ts/package.json index 7285801..8757b8b 100644 --- a/ts/package.json +++ b/ts/package.json @@ -39,6 +39,7 @@ "pino-logfmt": "^0.1.1", "pino-pretty": "^13.0.0", "postgres": "^3.4.5", + "superjson": "^2.2.2", "ts-markdown-builder": "^0.4.0", "why-is-node-running": "^3.2.2", "znv": "^0.4.0", diff --git a/ts/src/activities/discord.ts b/ts/src/activities/discord.ts index f51199f..ebd46de 100644 --- a/ts/src/activities/discord.ts +++ b/ts/src/activities/discord.ts @@ -50,5 +50,4 @@ export const reply_to_interaction = async (props: { return await bot.helpers.sendInteractionResponse(ref.id, ref.token, { type, data }, { withResponse: options?.withResponse }) - } diff --git a/ts/src/payload-converter/adapter.ts b/ts/src/payload-converter/adapter.ts new file mode 100644 index 0000000..d02f173 --- /dev/null +++ b/ts/src/payload-converter/adapter.ts @@ -0,0 +1,61 @@ +import { + EncodingType, + METADATA_ENCODING_KEY, + Payload, + PayloadConverterError, + PayloadConverterWithEncoding, +} from '@temporalio/common'; +import { decode, encode } from '@temporalio/common/lib/encoding'; +import { errorMessage } from '@temporalio/common/lib/type-helpers'; +import superjson from 'superjson'; + + + +/** + * Converts between values and [superjson](https://github.com/flightcontrolhq/superjson) Payloads. + */ +export class SuperJsonPayloadConverter implements PayloadConverterWithEncoding { + // Use 'json/plain' so that Payloads are displayed in the UI + public encodingType = 'json/plain' as EncodingType; + + public toPayload(value: unknown): Payload | undefined { + if (value === undefined) return undefined; + let ejson; + try { + ejson = superjson.stringify(value); + } catch (e) { + throw new UnsupportedSuperJsonTypeError( + `Can't run superjson.stringify on this value: ${value}. Either convert it (or its properties) to superjson-serializable values (see https://docs.meteor.com/api/ejson.html ), or create a custom data converter. superjson.stringify error message: ${ + errorMessage( + e, + ) + }`, + e as Error, + ); + } + + return { + metadata: { + [METADATA_ENCODING_KEY]: encode('json/plain'), + // Include an additional metadata field to indicate that this is an superjson payload + format: encode('extended'), + }, + data: encode(ejson), + }; + } + + public fromPayload<T>(content: Payload): T { + return content.data ? superjson.parse<T>(decode(content.data)) : {} as T; + } +} + +export class UnsupportedSuperJsonTypeError extends PayloadConverterError { + public readonly name: string = 'UnsupportedJsonTypeError'; + + constructor( + message: string | undefined, + public readonly cause?: Error, + ) { + super(message ?? undefined); + } +} diff --git a/ts/src/payload-converter/index.ts b/ts/src/payload-converter/index.ts new file mode 100644 index 0000000..2a24a1f --- /dev/null +++ b/ts/src/payload-converter/index.ts @@ -0,0 +1,10 @@ +import { + CompositePayloadConverter, + UndefinedPayloadConverter, +} from '@temporalio/common'; +import { SuperJsonPayloadConverter } from './adapter'; + +export const payloadConverter = new CompositePayloadConverter( + new UndefinedPayloadConverter(), + new SuperJsonPayloadConverter(), +); diff --git a/ts/src/services/temporal/index.ts b/ts/src/services/temporal/index.ts index 52241e4..6abbcc1 100644 --- a/ts/src/services/temporal/index.ts +++ b/ts/src/services/temporal/index.ts @@ -12,6 +12,9 @@ c.bind({ const client = new Client({ connection, namespace: config.TEMPORAL_NAMESPACE, + dataConverter: { + payloadConverterPath: require.resolve('../../payload-converter'), + }, }); process.on('exit', () => { console.log('closing temporal client'); diff --git a/ts/src/workflows/discord.ts b/ts/src/workflows/discord.ts new file mode 100644 index 0000000..080e84e --- /dev/null +++ b/ts/src/workflows/discord.ts @@ -0,0 +1,37 @@ + +import { proxyActivities } from '@temporalio/workflow'; +import type * as activities from '#/activities'; +import { InteractionData, InteractionTypes } from 'discordeno'; +import { c } from '#/di'; +import { Bot } from '#/bot'; + +const { } = proxyActivities<typeof activities>({ + startToCloseTimeout: '1 minute', +}); + + + + +interface HandleInteractionCreatePayload { + ref: activities.InteractionRef +} + + + + +const workflowHandleApplicationCommand = async ( + { }: HandleInteractionCreatePayload, +) => { + const bot = await c.getAsync(Bot) + +} + +export const workflowHandleInteractionCreate = async ( + payload: HandleInteractionCreatePayload, +) => { + const {ref } = payload + + if(ref.type === InteractionTypes.ApplicationCommand) { + await workflowHandleApplicationCommand(payload) + } +} diff --git a/ts/src/workflows/index.ts b/ts/src/workflows/index.ts index 3dd55ff..c1ba240 100644 --- a/ts/src/workflows/index.ts +++ b/ts/src/workflows/index.ts @@ -2,6 +2,7 @@ * @file Automatically generated by barrelsby. */ +export * from "./discord"; export * from "./guilds"; export * from "./items"; export * from "./players"; diff --git a/ts/yarn.lock b/ts/yarn.lock index f81523b..d2ec3f2 100644 --- a/ts/yarn.lock +++ b/ts/yarn.lock @@ -1355,6 +1355,7 @@ __metadata: pino-pretty: "npm:^13.0.0" postgres: "npm:^3.4.5" rollup: "npm:^4.34.8" + superjson: "npm:^2.2.2" ts-markdown-builder: "npm:^0.4.0" typescript: "npm:5.7.3" why-is-node-running: "npm:^3.2.2" @@ -1734,6 +1735,15 @@ __metadata: languageName: node linkType: hard +"copy-anything@npm:^3.0.2": + version: 3.0.5 + resolution: "copy-anything@npm:3.0.5" + dependencies: + is-what: "npm:^4.1.8" + checksum: 10c0/01eadd500c7e1db71d32d95a3bfaaedcb839ef891c741f6305ab0461398056133de08f2d1bf4c392b364e7bdb7ce498513896e137a7a183ac2516b065c28a4fe + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" @@ -2575,6 +2585,13 @@ __metadata: languageName: node linkType: hard +"is-what@npm:^4.1.8": + version: 4.1.16 + resolution: "is-what@npm:4.1.16" + checksum: 10c0/611f1947776826dcf85b57cfb7bd3b3ea6f4b94a9c2f551d4a53f653cf0cb9d1e6518846648256d46ee6c91d114b6d09d2ac8a07306f7430c5900f87466aae5b + languageName: node + linkType: hard + "isarray@npm:^2.0.5": version: 2.0.5 resolution: "isarray@npm:2.0.5" @@ -3959,6 +3976,15 @@ __metadata: languageName: node linkType: hard +"superjson@npm:^2.2.2": + version: 2.2.2 + resolution: "superjson@npm:2.2.2" + dependencies: + copy-anything: "npm:^3.0.2" + checksum: 10c0/aa49ebe6653e963020bc6a1ed416d267dfda84cfcc3cbd3beffd75b72e44eb9df7327215f3e3e77528f6e19ad8895b16a4964fdcd56d1799d14350db8c92afbc + languageName: node + linkType: hard + "supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0"