agentsclimarketplace

1shot wallet

Skill 1Shot-API/skills/1shot-wallet

1Shot API skills for coding agents

Install
npx -y skills add 1Shot-API/skills --skill 1shot-wallet

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Integrate the 1Shot embedded wallet (OWS Host Layer) with @1shotapi/ows-provider. Use when embedding wallet.1shotapi.com, wiring OWSProxy, EIP-1193, credentials, or custom RPC such as setStyle for theming the 1Shot Branding Layer.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

9.4 KB, as published. Nobody here has run it

1Shot Embedded Wallet (Host integration)

Teach an agent how to embed the 1Shot Wallet Branding Layer from a Host Layer app using @1shotapi/ows-provider.

Host (your dapp)          @1shotapi/ows-provider → OWSProxy
  └── Branding iframe     https://wallet.1shotapi.com/
        └── Signing       https://wallet.1shotapi.com/signer/  (same origin)

Install

npm install @1shotapi/ows-provider @1shotapi/ows-types

Minimal setup

import { OWSProxy } from "@1shotapi/ows-provider";

const WALLET_URL = "https://wallet.1shotapi.com/";

const container = document.getElementById("wallet-container")!;
const proxy = await OWSProxy.create(container, WALLET_URL);

// Optional: theme / copy before showing the flyout
await proxy.rpc("setStyle", {
  copy: { productName: "Acme Wallet", tagline: "Powered by 1Shot" },
  theme: { primary: "oklch(0.45 0.18 250)" },
});

proxy.showWallet();

// EIP-1193
const accounts = await proxy.ethereum.request({ method: "eth_requestAccounts" });

Local / HTTPS notes

  • Passkeys require a secure-context ancestor chain. The Host page must be HTTPS (or localhost) when the wallet iframe is HTTPS.
  • Dev wallet URL: your ngrok or local Vite origin root (e.g. https://….ngrok-free.app/).
  • Production wallet URL: https://wallet.1shotapi.com/ (Signing Layer at /signer/ on the same origin — do not embed /signer/ from the host).

Custom RPC — setStyle

1Shot-specific method registered on the Branding Layer. Call via:

await proxy.rpc("setStyle", options);

options is a partial merge (safe to call repeatedly):

FieldTypePurpose
theme.primarystring (CSS color)--primary
theme.primaryForegroundstring--primary-foreground
theme.background / foregroundstringpage colors
theme.muted / mutedForegroundstringsecondary text
theme.border / accent / accentForegroundstringchrome
theme.radiusstring--radius (e.g. "0.625rem")
theme.fontSansstring--font-sans
copy.productNamestringtitles / chrome
copy.taglinestringsupporting line
copy.connect.titlestringconnect modal title
copy.connect.bodystringconnect modal body
copy.connect.rejectLabelstringReject button
copy.connect.continueLabelstringContinue button
copy.walletSetup.titlestringsetup modal title
copy.walletSetup.bodystringsetup modal body
copy.walletSetup.cancelLabelstringCancel button
copy.walletSetup.loginLabelstringLogin with passkey
copy.walletSetup.createLabelstringCreate account
copy.passkeyName.titlestringpasskey name modal title
copy.passkeyName.bodystringpasskey name modal body
copy.passkeyName.fieldLabelstringinput label
copy.passkeyName.placeholderstringinput placeholder
copy.passkeyName.emptyErrorstringempty-name validation error
copy.passkeyName.cancelLabelstringCancel button
copy.passkeyName.continueLabelstringContinue button
copy.personalSign.titlestringpersonal_sign modal title
copy.personalSign.accountLabelstringAccount field label
copy.personalSign.messageLabelstringMessage field label
copy.personalSign.rejectLabelstringReject button
copy.personalSign.signLabelstringSign button
copy.typedData.titlestringEIP-712 modal title
copy.typedData.accountLabelstringAccount field label
copy.typedData.primaryTypeLabelstringPrimary type label
copy.typedData.domainLabelstringDomain label
copy.typedData.messageLabelstringMessage label
copy.typedData.rejectLabelstringReject button
copy.typedData.signLabelstringSign button
copy.credentialOffer.titlestringoffer modal title
copy.credentialOffer.bodystringsupports {issuerName} {issuerId}
copy.credentialOffer.offeredHeadingstringoffered list heading
copy.credentialOffer.passkeyNotestringpasskey hint
copy.credentialOffer.rejectLabelstringReject button
copy.credentialOffer.acceptLabelstringAccept button
copy.credentialPresentation.titlestringpresentation modal title
copy.credentialPresentation.bodystringsupports {verifierName} {verifierId}
copy.credentialPresentation.credentialDetailstringsupports {credentialType} {credentialIssuer}
copy.credentialPresentation.claimsHeadingstringclaims list heading
copy.credentialPresentation.passkeyNotestringpasskey hint
copy.credentialPresentation.rejectLabelstringReject button
copy.credentialPresentation.shareLabelstringShare button
copy.credentials.tabLabelstringCredentials tab label
copy.credentials.emptyCountLabelstringzero-count summary
copy.credentials.countLabelstringsupports {count}
copy.credentials.refreshLabelstringRefresh button
copy.credentials.loadingBodystringloading state
copy.credentials.emptyBodystringempty-state text
copy.credentials.loadFailedErrorstringlist load failure
copy.credentials.refreshFailedErrorstringrelayer refresh failure
copy.credentials.notFoundErrorstringdetail not in cache
copy.credentials.openFailedErrorstringdetail open failure
copy.credentials.typeColumnstringType column header
copy.credentials.issuerColumnstringIssuer column header
copy.credentials.issuedColumnstringIssued column header
copy.credentials.viewLabelstringView button
copy.credentials.detailFallbackTitlestringdetail title fallback
copy.credentials.detailDescriptionstringdetail dialog description
copy.credentials.issuerLabelstringIssuer field label
copy.credentials.formatLabelstringFormat field label
copy.credentials.issuedLabelstringIssued field label
copy.credentials.validUntilLabelstringValid until label
copy.credentials.idLabelstringId field label
copy.credentials.claimsHeadingstringClaims section heading
copy.credentials.claimsLoadingstringclaims loading text
copy.credentials.claimsEmptystringno claims text
copy.credentials.closeLabelstringClose button
copy.createBackup.titlestringcreate backup modal title
copy.createBackup.bodystringsupports {minLength}
copy.createBackup.passphrasePromptstringSigning Layer passphrase label ({minLength})
copy.createBackup.continueLabelstringSigning Layer continue
copy.createBackup.cancelLabelstringCancel button
copy.createBackup.closeLabelstringClose button
copy.createBackup.copyLabelstringCopy button
copy.createBackup.copiedLabelstringafter successful copy
copy.createBackup.copyFailedLabelstringcopy failure
copy.createBackup.doneLabelstringDone button
copy.createBackup.encryptedLabelstringresult ciphertext label
copy.createBackup.passwordTooShortErrorstringshort passphrase error
copy.createBackup.cancelledErrorstringpasskey cancelled
copy.createBackup.failedErrorstringgeneric failure
copy.restoreBackup.titlestringrestore backup modal title
copy.restoreBackup.bodystringrestore prompt body
copy.restoreBackup.passphraseLabelstringSigning Layer passphrase label
copy.restoreBackup.restoreLabelstringSigning Layer restore button
copy.restoreBackup.cancelLabelstringCancel button
copy.restoreBackup.closeLabelstringClose button
copy.restoreBackup.doneLabelstringDone button
copy.restoreBackup.successBodystringsuccess message
copy.restoreBackup.decryptFailedErrorstringbad passphrase error
copy.restoreBackup.cancelledErrorstringpasskey cancelled
copy.restoreBackup.failedErrorstringgeneric failure
darkbooleantoggles html.dark

Returns { ok: true, productName: string } with the resolved product name after merge.

Unknown keys are rejected (Zod .strict()).

See also README.md in this repository.

Other Host APIs

APIUse
proxy.ethereum.request(...)EIP-1193 (accounts, sign, chain, …)
proxy.credentials.*OID4 offer / present (when enabled in wallet)
proxy.showWallet() / hideWallet()Host-driven flyout without an EIP-1193 call
proxy.rpc(method, params)Custom Branding RPC (setStyle, …)

Hard rules

  • Never embed the Signing Layer iframe from the Host — always Host → Branding → Signing.
  • Prefer the published wallet URL in production; point at a local Branding origin only while developing this repo.
  • Theme with setStyle; do not ask integrators to fork CSS for basic brand colors / product name.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.