diff --git a/package.json b/package.json index 640002a..d2ef845 100644 --- a/package.json +++ b/package.json @@ -56,5 +56,8 @@ "@lavamoat/preinstall-always-fail": false, "sharp": true } + }, + "dependencies": { + "@metamask/snaps-sdk": "^6.2.1" } } diff --git a/packages/snap/package.json b/packages/snap/package.json index aa818de..e528bf3 100644 --- a/packages/snap/package.json +++ b/packages/snap/package.json @@ -27,7 +27,7 @@ "test": "jest" }, "dependencies": { - "@metamask/snaps-sdk": "^6.1.1", + "@metamask/snaps-sdk": "^6.2.1", "buffer": "^6.0.3" }, "devDependencies": { @@ -37,8 +37,8 @@ "@metamask/eslint-config-jest": "^12.1.0", "@metamask/eslint-config-nodejs": "^12.1.0", "@metamask/eslint-config-typescript": "^12.1.0", - "@metamask/snaps-cli": "^6.2.1", - "@metamask/snaps-jest": "^8.2.0", + "@metamask/snaps-cli": "^6.3.0", + "@metamask/snaps-jest": "^8.3.0", "@typescript-eslint/eslint-plugin": "^5.42.1", "@typescript-eslint/parser": "^5.42.1", "eslint": "^8.45.0", diff --git a/packages/snap/snap.manifest.json b/packages/snap/snap.manifest.json index 89c177c..5592600 100644 --- a/packages/snap/snap.manifest.json +++ b/packages/snap/snap.manifest.json @@ -7,7 +7,7 @@ "url": "https://github.com/MetaMask/template-snap-monorepo.git" }, "source": { - "shasum": "EKgxZg2D/EjYdJAZFj9iHIxGTkDUSJtPKd7uXQAYdvk=", + "shasum": "NCyrhjLIV9HDo3dA6L3cHYrGyv1hZJ8fmx39gwTbMaI=", "location": { "npm": { "filePath": "dist/bundle.js", diff --git a/packages/snap/src/index.tsx b/packages/snap/src/index.tsx index 0878a8d..3aa2d2e 100644 --- a/packages/snap/src/index.tsx +++ b/packages/snap/src/index.tsx @@ -1,11 +1,9 @@ -import { - type OnHomePageHandler, - type OnInstallHandler, - type OnRpcRequestHandler, - type OnTransactionHandler, - type OnUpdateHandler, - type OnUserInputHandler, +import type { + OnRpcRequestHandler, + OnUserInputHandler, + OnTransactionHandler, } from '@metamask/snaps-sdk'; +import { type OnHomePageHandler } from '@metamask/snaps-sdk'; import { calculateScore } from './api'; import { @@ -13,7 +11,6 @@ import { renderMainUiWithError, renderMainUiWithLoading, renderMainUiWithScore, - renderPromptNextSteps, renderTransactionUi, } from './ui'; import { convertCAIP2ToHex, getAccount, getChainId } from './utils'; @@ -25,20 +22,6 @@ export const onRpcRequest: OnRpcRequestHandler = async ({ request }) => { } }; -export const onInstall: OnInstallHandler = async () => { - await snap.request({ - method: 'snap_dialog', - params: await renderPromptNextSteps(), - }); -}; - -export const onUpdate: OnUpdateHandler = async () => { - await snap.request({ - method: 'snap_dialog', - params: await renderPromptNextSteps(), - }); -}; - export const onHomePage: OnHomePageHandler = async () => { const [account, chainId] = await Promise.all([getAccount(), getChainId()]); @@ -79,12 +62,7 @@ export const onUserInput: OnUserInputHandler = async ({ id, event }) => { method: 'snap_updateInterface', params: { id, - ui: renderMainUiWithScore( - score, - scoreName, - url, - `https://nomis.cc/api/snap/score?chainId=${chainId}&address=${account}`, - ), + ui: renderMainUiWithScore(score, scoreName, url), }, }); } catch { diff --git a/packages/snap/src/types.ts b/packages/snap/src/types.ts index 0cb6135..464c220 100644 --- a/packages/snap/src/types.ts +++ b/packages/snap/src/types.ts @@ -1,9 +1,12 @@ +/* eslint-disable @typescript-eslint/naming-convention */ export type Holder = { isHolder: boolean; score: number; scoreName: string; url: string; image: string; + tokenId: string; + updated_ms: string; }; export type Score = { diff --git a/packages/snap/src/ui.tsx b/packages/snap/src/ui.tsx index cbe89b4..102934d 100644 --- a/packages/snap/src/ui.tsx +++ b/packages/snap/src/ui.tsx @@ -1,92 +1,105 @@ -import type { DialogParams } from '@metamask/snaps-sdk'; +/* eslint-disable @typescript-eslint/naming-convention */ +/* eslint-disable camelcase */ +import { getImageComponent } from '@metamask/snaps-sdk'; import { - button, - divider, - form, - getImageComponent, - heading, - panel, - spinner, - text, -} from '@metamask/snaps-sdk'; + Box, + Button, + Divider, + Form, + Heading, + Image, + Link, + Row, + Spinner, + Text, +} from '@metamask/snaps-sdk/jsx'; import { getScore } from './api'; -export const renderPromptNextSteps = async () => { - return { - type: 'alert', - content: panel([ - heading('After install heading'), - text('After install text'), - ]), - } as DialogParams; -}; - export const renderMainUi = async (account: string, chainId: string) => { - const { score, scoreName, url, image } = await getScore(chainId, account); - - const displayData: Parameters[0] = [ - heading(`${scoreName} Score: ${score || 'unknown'}`), - divider(), - form({ - name: 'calculate-score', - children: [ - button({ - value: 'Calculate score', - buttonType: 'submit', - }), - ], - }), - text(`[Mint your score](https://nomis.cc${url})`), - ]; - - if (image) { - displayData.splice(1, 0, await getImageComponent(image, { width: 400 })); - } - - return panel(displayData); + const { score, scoreName, url, image, tokenId, updated_ms } = await getScore( + chainId, + account, + ); + + const imageSrc = await getImageComponent(image, { width: 400 }); + + return ( + + {`${scoreName} Score: ${score || 'unknown'}`} + + + {score > 0 && ( + + {String(score)} + + )} + {score > 0 && ( + + {String(tokenId)} + + )} + {score > 0 && ( + + {new Date(updated_ms).toLocaleString('en-Us')} + + )} + + + Mint your score + +
+ +
+
+
+ ); }; export const renderMainUiWithLoading = () => { - return panel([heading('Please wait...'), spinner()]); + return ( + + Calculating score... + + + ); }; export const renderMainUiWithScore = ( score: number, scoreName: string, url: string, - link: string, ) => { - return panel([ - heading(`${scoreName} Score: ${Number((score * 100).toFixed(2))}`), - text(`[Mint your score](https://nomis.cc${url})`), - text(link), - divider(), - form({ - name: 'back', - children: [ - button({ - value: 'Back', - buttonType: 'submit', - }), - ], - }), - ]); + return ( + + {`${scoreName} Score: ${Number( + (score * 100).toFixed(2), + )}`} + +
+ +
+ + Mint score + +
+
+ ); }; export const renderMainUiWithError = () => { - return panel([ - heading('Failed to calculate score'), - form({ - name: 'back', - children: [ - button({ - value: 'Back', - buttonType: 'submit', - }), - ], - }), - ]); + return ( + + Failed to calculate score +
+ +
+
+ ); }; export const renderTransactionUi = async ( @@ -100,51 +113,61 @@ export const renderTransactionUi = async ( ]); if (recipientData.isHolder) { - const displayData: Parameters[0] = [ - heading( - `Recipient ${recipientData.scoreName} Score: ${recipientData.score}`, - ), - divider(), - text(`[Get your score](https://nomis.cc${recipientData.url})`), - ]; - - if (recipientData.image) { - displayData.splice( - 1, - 0, - await getImageComponent(recipientData.image, { width: 400 }), - ); - } + const imageSrc = await getImageComponent(recipientData.image, { + width: 400, + }); return { - content: panel(displayData), + content: ( + + + Recipient {recipientData.scoreName} Score:{' '} + {String(recipientData.score)} + + + + + + Get your score + + + + ), }; } if (!senderData.isHolder) { return { - content: panel([ - heading(`Get your ${senderData.scoreName} Score`), - text(`[Get Score](https://nomis.cc${senderData.url})`), - ]), + content: ( + + Get your ${senderData.scoreName} Score + + + + Get your score + + + + ), }; } - const displayData: Parameters[0] = [ - heading(`Your ${senderData.scoreName} Score: ${senderData.score}`), - divider(), - text(`[Update your score](https://nomis.cc${senderData.url})`), - ]; - - if (senderData.image) { - displayData.splice( - 1, - 0, - await getImageComponent(senderData.image, { width: 400 }), - ); - } + const imageSrc = await getImageComponent(senderData.image, { width: 400 }); return { - content: panel(displayData), + content: ( + + + Your {senderData.scoreName} Score: {String(senderData.score)} + + + + + + Update your score + + + + ), }; }; diff --git a/packages/snap/tsconfig.json b/packages/snap/tsconfig.json index ef0c834..d8aa786 100644 --- a/packages/snap/tsconfig.json +++ b/packages/snap/tsconfig.json @@ -5,5 +5,5 @@ "jsx": "react-jsx", "jsxImportSource": "@metamask/snaps-sdk" }, - "include": ["**/*.ts", "**/*.tsx"] + "include": ["**/*.ts", "**/*.tsx", "src/ui.tsx", "src/index.tsx"] } diff --git a/yarn.lock b/yarn.lock index 0ba1170..c97b31a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2987,7 +2987,7 @@ __metadata: languageName: node linkType: hard -"@metamask/snaps-cli@npm:^6.2.1": +"@metamask/snaps-cli@npm:^6.3.0": version: 6.3.0 resolution: "@metamask/snaps-cli@npm:6.3.0" dependencies: @@ -3102,7 +3102,7 @@ __metadata: languageName: node linkType: hard -"@metamask/snaps-jest@npm:^8.2.0": +"@metamask/snaps-jest@npm:^8.3.0": version: 8.3.0 resolution: "@metamask/snaps-jest@npm:8.3.0" dependencies: @@ -3162,7 +3162,7 @@ __metadata: languageName: node linkType: hard -"@metamask/snaps-sdk@npm:^6.1.0, @metamask/snaps-sdk@npm:^6.1.1, @metamask/snaps-sdk@npm:^6.2.0, @metamask/snaps-sdk@npm:^6.2.1": +"@metamask/snaps-sdk@npm:^6.1.0, @metamask/snaps-sdk@npm:^6.2.0, @metamask/snaps-sdk@npm:^6.2.1": version: 6.2.1 resolution: "@metamask/snaps-sdk@npm:6.2.1" dependencies: @@ -16629,6 +16629,7 @@ __metadata: "@metamask/eslint-config-jest": ^12.1.0 "@metamask/eslint-config-nodejs": ^12.1.0 "@metamask/eslint-config-typescript": ^12.1.0 + "@metamask/snaps-sdk": ^6.2.1 "@typescript-eslint/eslint-plugin": ^5.42.1 "@typescript-eslint/parser": ^5.42.1 eslint: ^8.45.0 @@ -17191,9 +17192,9 @@ __metadata: "@metamask/eslint-config-jest": ^12.1.0 "@metamask/eslint-config-nodejs": ^12.1.0 "@metamask/eslint-config-typescript": ^12.1.0 - "@metamask/snaps-cli": ^6.2.1 - "@metamask/snaps-jest": ^8.2.0 - "@metamask/snaps-sdk": ^6.1.1 + "@metamask/snaps-cli": ^6.3.0 + "@metamask/snaps-jest": ^8.3.0 + "@metamask/snaps-sdk": ^6.2.1 "@typescript-eslint/eslint-plugin": ^5.42.1 "@typescript-eslint/parser": ^5.42.1 buffer: ^6.0.3