{"version":3,"sources":["../../../src/readable/activity/token.ts"],"names":["formatTokenValue"],"mappings":";;;;AA+BO,SAAS,KACf,CAAA,IAAA,EACA,OAAU,GAAA,EAAA,EACV,IACQ,EAAA;AACR,EAAO,OAAA,EAAE,IAAM,EAAA,OAAA,EAAS,IAAK,EAAA,CAAA;AAC9B,CAAA;AAEa,MAAA,UAAA,GAAa,UAAU,GAAG,EAAA;AAE1B,MAAA,cAAA,GAAiB,KAAM,CAAA,WAAA,EAAa,IAAI,EAAA;AAE9C,SAAS,IAAA,CAAK,MAAiB,EAAA,GAAA,GAAM,UAAqB,EAAA;AAChE,EAAA,OAAO,MACL,CAAA,MAAA,CAAO,CAAC,GAAA,EAAK,CAAM,KAAA;AACnB,IAAI,GAAA,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AACf,IAAO,OAAA,GAAA,CAAA;AAAA,GACL,EAAA,EAAa,CAAA,CACf,MAAM,CAAC,CAAA,CAAA;AACV,CAAA;AAEO,SAAS,UAAU,CAAkB,EAAA;AAC3C,EAAO,OAAA,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA;AACvB,CAAA;AAEO,SAAS,UAAU,CAAkB,EAAA;AAC3C,EAAO,OAAA,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA;AACvB,CAAA;AAEO,SAAS,WAAW,CAA8B,EAAA;AACxD,EAAO,OAAA,KAAA,CAAM,OAAS,EAAA,CAAA,IAAK,EAAE,CAAA,CAAA;AAC9B,CAAA;AAEO,SAAS,aAAa,CAA8B,EAAA;AAC1D,EAAO,OAAA,KAAA,CAAM,SAAW,EAAA,CAAA,IAAK,EAAE,CAAA,CAAA;AAChC,CAAA;AAEO,SAAS,UAAU,CAAW,EAAA;AACpC,EAAO,OAAA,KAAA,CAAM,QAAQ,IAAI,IAAA,CAAK,IAAI,GAAI,CAAA,CAAE,QAAQ,CAAA,CAAA;AACjD,CAAA;AAEO,SAAS,UAAU,CAA8B,EAAA;AACvD,EAAO,OAAA,KAAA,CAAM,SAAW,EAAA,CAAA,IAAK,EAAE,CAAA,CAAA;AAChC,CAAA;AAEO,SAAS,WAAA,CACf,CACA,EAAA,IAAA,EACA,OACC,EAAA;AACD,EAAA,IAAI,CAAC,IAAM,EAAA,OAAO,KAAM,CAAA,SAAA,EAAW,KAAK,EAAE,CAAA,CAAA;AAC1C,EAAO,OAAA,KAAA,CAAM,SAAW,EAAA,CAAA,IAAK,EAAI,EAAA,EAAE,SAAS,IAAM,EAAA,OAAA,EAAS,OAAW,IAAA,EAAA,EAAI,CAAA,CAAA;AAC3E,CAAA;AAUA,MAAM,cACL,GAAA,gFAAA,CAAA;AAEM,SAAS,WAAW,CAAqC,EAAA;AAC/D,EAAA,IAAI,CAAC,CAAG,EAAA,OAAO,CAAC,KAAM,CAAA,QAAA,EAAU,GAAG,CAAC,CAAA,CAAA;AACpC,EAAA,IAAI,EAAE,KAAU,KAAA,cAAA;AACf,IAAO,OAAA,CAAC,MAAM,QAAU,EAAA,UAAU,GAAG,KAAM,CAAA,QAAA,EAAU,CAAE,CAAA,MAAM,CAAC,CAAA,CAAA;AAC/D,EAAO,OAAA;AAAA,IACN,KAAA,CAAM,aAAe,EAAA,CAAA,CAAE,KAAK,CAAA;AAAA,IAC5B,KAAA,CAAM,UAAUA,yBAAiB,CAAA,CAAA,CAAE,OAAO,CAAE,CAAA,QAAQ,KAAK,GAAG,CAAA;AAAA,IAC5D,KAAA,CAAM,QAAU,EAAA,CAAA,CAAE,MAAM,CAAA;AAAA,GACzB,CAAA;AACD,CAAA;AAEO,SAAS,cAAc,CAAsB,EAAA;AACnD,EAAA,IAAI,QAAW,GAAA,EAAA,CAAA;AACf,EAAA,IAAI,EAAE,QAAU,EAAA;AACf,IAAA,QAAA,GAAW,CAAE,CAAA,QAAA,CAAA;AACb,IAAA,OAAO,CAAC,SAAU,CAAA,IAAI,GAAG,KAAM,CAAA,UAAA,EAAY,QAAQ,CAAC,CAAA,CAAA;AAAA,GACrD;AACA,EAAA,OAAO,EAAC,CAAA;AACT,CAAA;AAEO,SAAS,UAAU,CAAW,EAAA;AACpC,EAAI,IAAA,CAAA,CAAE,QAAQ,QAAU,EAAA;AACvB,IAAA,OAAO,UAAU,EAAE,CAAA,CAAA;AAAA,GACpB;AAEA,EAAA,IAAI,EAAE,QAAU,EAAA;AACf,IAAA,IACC,OAAW,IAAA,CAAA,CAAE,QACb,IAAA,CAAA,CAAE,QAAS,CAAA,KAAA,IACX,EAAE,CAAA,CAAE,QAAa,KAAA,MAAA,IAAU,CAAE,CAAA,QAAA,CAAS,KACrC,CAAA,EAAA;AACD,MAAA,OAAO,KAAM,CAAA,MAAA,EAAQ,CAAE,CAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,KACtC;AAEA,IAAA,IAAI,MAAU,IAAA,CAAA,CAAE,QAAY,IAAA,CAAA,CAAE,SAAS,IAAM,EAAA;AAC5C,MAAA,OAAO,KAAM,CAAA,MAAA,EAAQ,CAAE,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAAA,KACrC;AAEA,IACC,IAAA,QAAA,IAAY,EAAE,QACd,IAAA,CAAA,CAAE,SAAS,MACX,IAAA,MAAA,IAAU,EAAE,QAAS,CAAA,MAAA;AAAA;AAAA,IAGrB,CAAA,CAAE,QAAS,CAAA,MAAA,CAAO,IACjB,EAAA;AAED,MAAA,OAAO,KAAM,CAAA,MAAA,EAAQ,CAAE,CAAA,QAAA,CAAS,OAAO,IAAI,CAAA,CAAA;AAAA,KAC5C;AAAA,GACD;AAEA,EAAO,OAAA,KAAA,CAAM,QAAQ,EAAE,CAAA,CAAA;AACxB,CAAA;AAEO,SAAS,UAAA,CAAW,MAAc,IAAsB,EAAA;AAC9D,EAAA,MAAM,MAAM,IAAM,EAAA,OAAA,CAAA;AAClB,EAAA,IAAI,GAAK,EAAA;AACR,IAAO,OAAA,CAAC,MAAM,YAAc,EAAA,GAAG,GAAG,KAAM,CAAA,MAAA,EAAQ,IAAM,EAAA,IAAI,CAAC,CAAA,CAAA;AAAA,GAC5D;AACA,EAAA,OAAO,CAAC,KAAA,CAAM,MAAQ,EAAA,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA;AAClC","file":"token.cjs","sourcesContent":["import type { Action, Activity } from \"@rss3/api-core\";\n\nimport { formatTokenValue } from \"../number/index.js\";\n\nexport type TokenType =\n\t| \"text\" // plain text\n\t| \"html\" // html text\n\t| \"number\" // number value, such as token exchange rate\n\t| \"image\" // image url\n\t| \"symbolImage\" // symbol image url\n\t| \"assetImage\" // asset image url\n\t| \"symbol\" // short name for a token, such as BTC, ETH\n\t| \"address\" // wallet address or txn address, such as https://help.coinbase.com/en/coinbase/getting-started/crypto-education/what-is-a-transaction-hash-hash-id\n\t| \"name\" // name for NFT, etc\n\t| \"platform\" // platform name\n\t| \"network\" // network name\n\t| \"separator\" // separator for actions\n\t| \"time\" // time\n\t| \"unknown\"; // unknown data type to tokenize\n\nexport type Token = {\n\ttype: TokenType;\n\tcontent: string;\n\tmeta?: {\n\t\taddress?: string | null;\n\t\tnetwork?: string | null;\n\t\tid?: string | null;\n\t\tpreview?: string;\n\t};\n};\n\nexport function token(\n\ttype: Token[\"type\"],\n\tcontent = \"\",\n\tmeta?: Token[\"meta\"],\n): Token {\n\treturn { type, content, meta };\n}\n\nexport const tokenSpace = tokenText(\" \");\n\nexport const tokenSeparator = token(\"separator\", \"; \");\n\nexport function join(tokens: Token[], sep = tokenSpace): Token[] {\n\treturn tokens\n\t\t.reduce((acc, t) => {\n\t\t\tacc.push(sep, t);\n\t\t\treturn acc;\n\t\t}, [] as Token[])\n\t\t.slice(1);\n}\n\nexport function tokenText(t: string): Token {\n\treturn token(\"text\", t);\n}\n\nexport function tokenName(t: string): Token {\n\treturn token(\"name\", t);\n}\n\nexport function tokenImage(t: string | null | undefined) {\n\treturn token(\"image\", t || \"\");\n}\n\nexport function tokenNetwork(t: string | null | undefined) {\n\treturn token(\"network\", t || \"\");\n}\n\nexport function tokenTime(t: number) {\n\treturn token(\"time\", new Date(t * 1000).toJSON());\n}\n\nexport function tokenAddr(t: string | null | undefined) {\n\treturn token(\"address\", t || \"\");\n}\n\nexport function tokenHandle(\n\tt: string | null | undefined,\n\taddr: string | null | undefined,\n\tnetwork: string | null | undefined,\n) {\n\tif (!addr) return token(\"address\", t || \"\");\n\treturn token(\"address\", t || \"\", { address: addr, network: network || \"\" });\n}\n\nexport type TokenMetadata = {\n\tsymbol?: string;\n\tdecimals?: number;\n\timage?: string;\n\tvalue?: string | null;\n};\n\n// maximum value of uint256\nconst INFINITY_VALUE =\n\t\"115792089237316195423570985008687907853269984665640564039457584007913129639935\";\n\nexport function tokenValue(t: TokenMetadata | null | undefined) {\n\tif (!t) return [token(\"number\", \"0\")];\n\tif (t.value === INFINITY_VALUE)\n\t\treturn [token(\"number\", \"infinite\"), token(\"symbol\", t.symbol)];\n\treturn [\n\t\ttoken(\"symbolImage\", t.image),\n\t\ttoken(\"number\", formatTokenValue(t.value, t.decimals) || \"0\"),\n\t\ttoken(\"symbol\", t.symbol),\n\t];\n}\n\nexport function tokenPlatform(t: Activity | Action) {\n\tlet platform = \"\";\n\tif (t.platform) {\n\t\tplatform = t.platform;\n\t\treturn [tokenText(\"on\"), token(\"platform\", platform)];\n\t}\n\treturn [];\n}\n\nexport function tokenPost(t: Action) {\n\tif (t.tag !== \"social\") {\n\t\treturn tokenText(\"\");\n\t}\n\n\tif (t.metadata) {\n\t\tif (\n\t\t\t\"title\" in t.metadata &&\n\t\t\tt.metadata.title &&\n\t\t\t!(t.platform === \"Lens\" && t.metadata.title)\n\t\t) {\n\t\t\treturn token(\"html\", t.metadata.title);\n\t\t}\n\n\t\tif (\"body\" in t.metadata && t.metadata.body) {\n\t\t\treturn token(\"html\", t.metadata.body);\n\t\t}\n\n\t\tif (\n\t\t\t\"target\" in t.metadata &&\n\t\t\tt.metadata.target &&\n\t\t\t\"body\" in t.metadata.target &&\n\t\t\t// FIXME: remove ts-ignore after GI fixing the type\n\t\t\t// @ts-ignore target is not null\n\t\t\tt.metadata.target.body\n\t\t) {\n\t\t\t// @ts-ignore target is not null\n\t\t\treturn token(\"html\", t.metadata.target.body);\n\t\t}\n\t}\n\n\treturn token(\"html\", \"\");\n}\n\nexport function tokenAsset(name: string, meta?: Token[\"meta\"]) {\n\tconst img = meta?.preview;\n\tif (img) {\n\t\treturn [token(\"assetImage\", img), token(\"name\", name, meta)];\n\t}\n\treturn [token(\"name\", name, meta)];\n}\n"]}