From 2506f1c555a0eaebb9a5c2674762984fd9fb4a92 Mon Sep 17 00:00:00 2001 From: Kristen Hewell Garrett Date: Tue, 1 Oct 2024 12:44:48 -0400 Subject: [PATCH] Initial SDK impl --- .changeset/fresh-clocks-smash.md | 5 ++++ .github/workflows/release.yml | 39 ++++++++++++++++++++++++++++++ .gitignore | 2 ++ package.json | 10 ++++++-- packages/sdk/README.md | 1 + packages/sdk/package.json | 20 ++++++++++++++++ packages/sdk/src/constants.ts | 1 + packages/sdk/src/index.ts | 41 ++++++++++++++++++++++++++++++++ packages/sdk/tsconfig.json | 13 ++++++++++ yarn.lock | 29 ++++++++++++++++++++++ 10 files changed, 159 insertions(+), 2 deletions(-) create mode 100644 .changeset/fresh-clocks-smash.md create mode 100644 .github/workflows/release.yml create mode 100644 packages/sdk/README.md create mode 100644 packages/sdk/package.json create mode 100644 packages/sdk/src/constants.ts create mode 100644 packages/sdk/src/index.ts create mode 100644 packages/sdk/tsconfig.json diff --git a/.changeset/fresh-clocks-smash.md b/.changeset/fresh-clocks-smash.md new file mode 100644 index 0000000..215caff --- /dev/null +++ b/.changeset/fresh-clocks-smash.md @@ -0,0 +1,5 @@ +--- +"@phantom/wallet-sdk": patch +--- + +Initial implementation diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..4a72b17 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,39 @@ +name: Release + +on: + push: + branches: + - main + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +jobs: + release: + name: Release + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v3 + + - name: Setup Node.js 20.x + uses: actions/setup-node@v3 + with: + node-version: 20.x + + - name: Install Dependencies + run: yarn + + - name: Create Release Pull Request or Publish to npm + id: changesets + uses: changesets/action@v1 + with: + # This expects you to have a script called release which does a build for your packages and calls changeset publish + publish: yarn release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Send a Slack notification if a publish happens + if: steps.changesets.outputs.published == 'true' + # You can do something when a publish happens. + run: my-slack-bot send-notification --message "A new version of ${GITHUB_REPOSITORY} was published!" diff --git a/.gitignore b/.gitignore index 870eb6a..8b8db57 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ #!.yarn/cache .pnp.* + +dist diff --git a/package.json b/package.json index e835f28..42c0a5f 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,16 @@ { "name": "@phantom/sdk-monorepo", + "private": true, "packageManager": "yarn@4.2.2", - "packages": [ + "scripts": { + "build": "yarn workspaces foreach --all run build", + "release": "yarn build && yarn changeset version" + }, + "workspaces": [ "packages/*" ], "dependencies": { - "@changesets/cli": "^2.27.8" + "@changesets/cli": "^2.27.8", + "typescript": "^5.6.2" } } diff --git a/packages/sdk/README.md b/packages/sdk/README.md new file mode 100644 index 0000000..5b247c1 --- /dev/null +++ b/packages/sdk/README.md @@ -0,0 +1 @@ +@phantom/wallet-sdk diff --git a/packages/sdk/package.json b/packages/sdk/package.json new file mode 100644 index 0000000..cd598ec --- /dev/null +++ b/packages/sdk/package.json @@ -0,0 +1,20 @@ +{ + "name": "@phantom/wallet-sdk", + "version": "0.0.0", + "type": "module", + "exports": { + ".": { + "import": "./dist/index.js" + } + }, + "packageManager": "yarn@4.2.2", + "scripts": { + "build": "tsc --build" + }, + "packages": [ + "packages/*" + ], + "devDependencies": { + "typescript": "^5.6.2" + } +} diff --git a/packages/sdk/src/constants.ts b/packages/sdk/src/constants.ts new file mode 100644 index 0000000..2dc0773 --- /dev/null +++ b/packages/sdk/src/constants.ts @@ -0,0 +1 @@ +export const DEFAULT_EMBEDDED_ORIGIN = /^https:\/\/.*\.phantom\.app$/; diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts new file mode 100644 index 0000000..6b560ab --- /dev/null +++ b/packages/sdk/src/index.ts @@ -0,0 +1,41 @@ +import { DEFAULT_EMBEDDED_ORIGIN } from "./constants"; + +export interface PhantomWalletOptions { + embeddedOrigin?: string | RegExp; +} + +const isValidOrigin = (origin: string, embeddedOrigin: string | RegExp) => + typeof embeddedOrigin === "string" + ? origin === embeddedOrigin + : embeddedOrigin.test(origin); + +export function createPhantom(opts: PhantomWalletOptions = {}) { + const embeddedOrigin = opts.embeddedOrigin ?? DEFAULT_EMBEDDED_ORIGIN; + + const iframe = document.createElement("iframe"); + + iframe.src = "/src/wallet/index.html"; + iframe.setAttribute("frameborder", "0"); + iframe.setAttribute("marginwidth", "0"); + iframe.setAttribute("marginheight", "0"); + iframe.style.position = "fixed"; + iframe.style.bottom = "0"; + iframe.style.right = "0"; + iframe.style.width = "0"; + iframe.style.height = "0"; + + window.addEventListener("message", (event) => { + if (!isValidOrigin(event.origin, embeddedOrigin)) { + return; + } + + iframe.style.width = `${event.data.width}px`; + iframe.style.height = `${event.data.height}px`; + }); + + document.body.appendChild(iframe); + + return () => { + document.body.removeChild(iframe); + }; +} diff --git a/packages/sdk/tsconfig.json b/packages/sdk/tsconfig.json new file mode 100644 index 0000000..6430861 --- /dev/null +++ b/packages/sdk/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es2016", + "module": "ES2022", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "declaration": true, + "outDir": "dist" + }, + "include": ["src"] +} diff --git a/yarn.lock b/yarn.lock index aa92917..e9cd694 100644 --- a/yarn.lock +++ b/yarn.lock @@ -308,6 +308,15 @@ __metadata: resolution: "@phantom/sdk-monorepo@workspace:." dependencies: "@changesets/cli": "npm:^2.27.8" + typescript: "npm:^5.6.2" + languageName: unknown + linkType: soft + +"@phantom/wallet-sdk@workspace:packages/sdk": + version: 0.0.0-use.local + resolution: "@phantom/wallet-sdk@workspace:packages/sdk" + dependencies: + typescript: "npm:^5.6.2" languageName: unknown linkType: soft @@ -954,6 +963,26 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^5.6.2": + version: 5.6.2 + resolution: "typescript@npm:5.6.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/3ed8297a8c7c56b7fec282532503d1ac795239d06e7c4966b42d4330c6cf433a170b53bcf93a130a7f14ccc5235de5560df4f1045eb7f3550b46ebed16d3c5e5 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.6.2#optional!builtin": + version: 5.6.2 + resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=b45daf" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/e6c1662e4852e22fe4bbdca471dca3e3edc74f6f1df043135c44a18a7902037023ccb0abdfb754595ca9028df8920f2f8492c00fc3cbb4309079aae8b7de71cd + languageName: node + linkType: hard + "universalify@npm:^0.1.0": version: 0.1.2 resolution: "universalify@npm:0.1.2"