From cc050653dd2a8408da264250e6410d9140cb4208 Mon Sep 17 00:00:00 2001 From: aaroncox Date: Thu, 24 Sep 2026 23:14:31 -0700 Subject: [PATCH 1/5] Upload chain logos from the monorepo --- .github/workflows/assets.yml | 33 ++++++++++++++++++++ packages/common/assets/chain/xprnetwork.png | Bin 0 -> 46194 bytes 2 files changed, 33 insertions(+) create mode 100644 .github/workflows/assets.yml create mode 100644 packages/common/assets/chain/xprnetwork.png diff --git a/.github/workflows/assets.yml b/.github/workflows/assets.yml new file mode 100644 index 00000000..2d24531b --- /dev/null +++ b/.github/workflows/assets.yml @@ -0,0 +1,33 @@ +name: Assets + +on: + push: + branches: [dev] + paths: + - 'packages/common/assets/**' + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: assets + cancel-in-progress: false + +jobs: + upload: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: 22 + - name: Upload chain logos to R2 + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + run: | + for file in packages/common/assets/chain/*.png; do + npx --yes wrangler@4.139.0 r2 object put "wharfkit/chain/$(basename "$file")" \ + --file "$file" --content-type image/png --remote + done diff --git a/packages/common/assets/chain/xprnetwork.png b/packages/common/assets/chain/xprnetwork.png new file mode 100644 index 0000000000000000000000000000000000000000..14e89dfbbf48d7917dc273bc09907e1cb6ae0b71 GIT binary patch literal 46194 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%0DGeRafJNZtQ@t@3PIiBSx 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 SeIRH60000 Date: Thu, 24 Sep 2026 23:16:20 -0700 Subject: [PATCH 2/5] Upload chain logos through the R2 S3 endpoint --- .github/workflows/assets.yml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/workflows/assets.yml b/.github/workflows/assets.yml index 2d24531b..73286942 100644 --- a/.github/workflows/assets.yml +++ b/.github/workflows/assets.yml @@ -19,15 +19,14 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 - with: - node-version: 22 - name: Upload chain logos to R2 env: - CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} - CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: auto + AWS_REQUEST_CHECKSUM_CALCULATION: when_required + AWS_RESPONSE_CHECKSUM_VALIDATION: when_required run: | - for file in packages/common/assets/chain/*.png; do - npx --yes wrangler@4.139.0 r2 object put "wharfkit/chain/$(basename "$file")" \ - --file "$file" --content-type image/png --remote - done + aws s3 cp packages/common/assets/chain/ s3://wharfkit/chain/ \ + --recursive --exclude '*' --include '*.png' --content-type image/png \ + --endpoint-url "https://${{ secrets.CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com" From 10612b53f0e4bc519b7f2ba1435cee78d6160566 Mon Sep 17 00:00:00 2001 From: aaroncox Date: Mon, 28 Sep 2026 11:14:20 -0700 Subject: [PATCH 3/5] Pass wallet data into the Anchor transports so restored sessions can sign --- packages/wallet-plugin-anchor/src/index.ts | 27 ++--- .../src/transports/native.ts | 20 ++-- .../src/transports/types.ts | 2 - .../src/transports/web.ts | 8 +- .../test/tests/handoff.ts | 43 +++++--- .../wallet-plugin-anchor/test/tests/native.ts | 12 +- .../wallet-plugin-anchor/test/tests/router.ts | 103 +++++++++++++++++- .../wallet-plugin-anchor/test/tests/web.ts | 29 ++--- 8 files changed, 175 insertions(+), 69 deletions(-) diff --git a/packages/wallet-plugin-anchor/src/index.ts b/packages/wallet-plugin-anchor/src/index.ts index 1e1398ce..29da1f19 100644 --- a/packages/wallet-plugin-anchor/src/index.ts +++ b/packages/wallet-plugin-anchor/src/index.ts @@ -88,13 +88,8 @@ export class WalletPluginAnchor extends AbstractWalletPlugin { this.webAuthenticatorUrls = options?.webAuthenticatorUrls || {} this.webFallbackDelayMs = options?.webFallbackDelayMs ?? DEFAULT_WEB_FALLBACK_DELAY_MS - // SessionKit.restore() reassigns `this.data`, so transports must read it live. - const currentData = () => this.data const transportOptions: TransportOptions = { id: this.id, - get data() { - return currentData() - }, buoyUrl: this.buoyUrl, buoyWs: this.buoyWs, ...options?.transport, @@ -187,7 +182,7 @@ export class WalletPluginAnchor extends AbstractWalletPlugin { // Native-only chain: the question has no second answer, so never ask it. if (!webUrl) { preopened?.close() - return await this.native.login(context, bundle, t) + return await this.native.login(this.data, context, bundle, t) } const forcedMode = perCall.mode ?? this.loginModeOverride @@ -208,7 +203,7 @@ export class WalletPluginAnchor extends AbstractWalletPlugin { writeMode(this.data, mode) if (mode === 'web') { - return await this.web.login(context, bundle, webUrl, popup) + return await this.web.login(this.data, context, bundle, webUrl, popup) } // Freshly chosen: no immediate switch link, but still recover from a silent deep link. return await this.loginWithSwitch(context, bundle, t, webUrl, 'app', false) @@ -236,8 +231,8 @@ export class WalletPluginAnchor extends AbstractWalletPlugin { try { return mode === 'web' && webUrl - ? await this.web.login(context, bundle, webUrl, popup) - : await this.native.login(context, bundle, t) + ? await this.web.login(this.data, context, bundle, webUrl, popup) + : await this.native.login(this.data, context, bundle, t) } catch (error) { if (!(error instanceof AnchorRequestCancelledError)) { throw error @@ -286,12 +281,14 @@ export class WalletPluginAnchor extends AbstractWalletPlugin { const primary = mode === 'app' - ? this.native.login(context, bundle, t, { + ? this.native.login(this.data, context, bundle, t, { immediate, delayMs: this.webFallbackDelayMs, onSelect: () => switchTo(), }) - : this.web.login(context, bundle, webUrl, preopened, {onSelect: () => switchTo()}) + : this.web.login(this.data, context, bundle, webUrl, preopened, { + onSelect: () => switchTo(), + }) // The loser of the race is abandoned; swallow its eventual rejection. primary.catch(() => undefined) @@ -304,8 +301,8 @@ export class WalletPluginAnchor extends AbstractWalletPlugin { const next: AnchorMode = mode === 'app' ? 'web' : 'app' writeMode(this.data, next) return next === 'web' - ? this.web.login(context, alternateBundle, webUrl, popup) - : this.native.login(context, alternateBundle, t) + ? this.web.login(this.data, context, alternateBundle, webUrl, popup) + : this.native.login(this.data, context, alternateBundle, t) } /** The browser popup opens inside the click handler, before this promise resolves. */ @@ -375,10 +372,10 @@ export class WalletPluginAnchor extends AbstractWalletPlugin { `This session signs in the browser, but there is no Anchor web authenticator for chain ${context.chain?.id}.` ) } - return this.web.sign(resolved, context, webUrl) + return this.web.sign(this.data, resolved, context, webUrl) } - return this.native.sign(resolved, context) + return this.native.sign(this.data, resolved, context) } } diff --git a/packages/wallet-plugin-anchor/src/transports/native.ts b/packages/wallet-plugin-anchor/src/transports/native.ts index 899c342f..bd37dedd 100644 --- a/packages/wallet-plugin-anchor/src/transports/native.ts +++ b/packages/wallet-plugin-anchor/src/transports/native.ts @@ -12,6 +12,7 @@ import { ResolvedSigningRequest, Serializer, TransactContext, + WalletPluginData, WalletPluginLoginResponse, WalletPluginSignResponse, } from '@wharfkit/session' @@ -42,6 +43,7 @@ export class NativeTransport { constructor(private options: TransportOptions) {} async login( + data: WalletPluginData, context: LoginContext, bundle: IdentityRequestBundle, t: Translator, @@ -139,18 +141,18 @@ export class NativeTransport { callbackResponse.link_key && callbackResponse.link_name ) { - this.options.data.requestKey = requestKey - this.options.data.privateKey = privateKey - this.options.data.signerKey = PublicKey.from(callbackResponse.link_key) - this.options.data.channelUrl = callbackResponse.link_ch - this.options.data.channelName = callbackResponse.link_name + data.requestKey = requestKey + data.privateKey = privateKey + data.signerKey = PublicKey.from(callbackResponse.link_key) + data.channelUrl = callbackResponse.link_ch + data.channelName = callbackResponse.link_name try { if (callbackResponse.link_meta) { const metadata = JSON.parse(callbackResponse.link_meta) - this.options.data.sameDevice = metadata.sameDevice - this.options.data.launchUrl = metadata.launchUrl - this.options.data.triggerUrl = metadata.triggerUrl + data.sameDevice = metadata.sameDevice + data.launchUrl = metadata.launchUrl + data.triggerUrl = metadata.triggerUrl } } catch { // link_meta is advisory; a malformed value must not fail the login @@ -183,6 +185,7 @@ export class NativeTransport { } async sign( + data: WalletPluginData, resolved: ResolvedSigningRequest, context: TransactContext ): Promise { @@ -190,7 +193,6 @@ export class NativeTransport { throw new Error('No UI available') } - const data = this.options.data const t = context.ui.getTranslate(this.options.id) const expiration = resolved.transaction.expiration.toDate() diff --git a/packages/wallet-plugin-anchor/src/transports/types.ts b/packages/wallet-plugin-anchor/src/transports/types.ts index be0f2982..0adcfd49 100644 --- a/packages/wallet-plugin-anchor/src/transports/types.ts +++ b/packages/wallet-plugin-anchor/src/transports/types.ts @@ -20,8 +20,6 @@ export interface IdentityRequestBundle { /** Everything a transport needs from the plugin that owns it. */ export interface TransportOptions { id: string - /** The plugin's persisted storage — shared by reference across transports. */ - data: Record buoyUrl: string buoyWs?: WebSocket // Overridable so tests can substitute them; ESM namespaces cannot be stubbed in place. diff --git a/packages/wallet-plugin-anchor/src/transports/web.ts b/packages/wallet-plugin-anchor/src/transports/web.ts index 3e531732..512fa0fb 100644 --- a/packages/wallet-plugin-anchor/src/transports/web.ts +++ b/packages/wallet-plugin-anchor/src/transports/web.ts @@ -8,6 +8,7 @@ import { ResolvedSigningRequest, TransactContext, UserInterface, + WalletPluginData, WalletPluginLoginResponse, WalletPluginSignResponse, } from '@wharfkit/session' @@ -65,6 +66,7 @@ export class WebTransport { } async login( + data: WalletPluginData, context: LoginContext, bundle: IdentityRequestBundle, baseUrl: string, @@ -82,8 +84,8 @@ export class WebTransport { switchOffer ) - this.options.data.encryptionKey = String(bundle.privateKey) - this.options.data.messageKey = payload.link_key + data.encryptionKey = String(bundle.privateKey) + data.messageKey = payload.link_key if (!payload.cid) { throw new Error('Login failed: No chain ID returned') @@ -110,11 +112,11 @@ export class WebTransport { } async sign( + data: WalletPluginData, resolved: ResolvedSigningRequest, context: TransactContext, baseUrl: string ): Promise { - const data = this.options.data if (!data.encryptionKey || !data.messageKey) { throw new Error('No request keys available - please login first') } diff --git a/packages/wallet-plugin-anchor/test/tests/handoff.ts b/packages/wallet-plugin-anchor/test/tests/handoff.ts index 3abb41ad..2e4e1aa3 100644 --- a/packages/wallet-plugin-anchor/test/tests/handoff.ts +++ b/packages/wallet-plugin-anchor/test/tests/handoff.ts @@ -35,10 +35,9 @@ function makeSameDeviceData() { } } -function makeTransport(data: Record, overrides: Record = {}) { +function makeTransport(overrides: Record = {}) { return new NativeTransport({ id: 'anchor', - data, buoyUrl: 'https://cb.anchor.link', ...overrides, }) @@ -112,8 +111,10 @@ suite('native signing handoff', function () { resolveSend = () => resolve(undefined as any) }) ) - const transport = makeTransport(makeSameDeviceData(), {send: sendStub}) - transport.sign(makeResolved(), makeTransactContext(makeMockUI())).catch(() => undefined) + const transport = makeTransport({send: sendStub}) + transport + .sign(makeSameDeviceData(), makeResolved(), makeTransactContext(makeMockUI())) + .catch(() => undefined) await settle() assert.equal(sendStub.callCount, 1, 'the sealed request was sent') @@ -134,13 +135,13 @@ suite('native signing handoff', function () { }) ) - const transport = makeTransport(makeSameDeviceData(), { + const transport = makeTransport({ send: sendStub, generateReturnUrl: returnUrlStub, waitForCallback: callbackStub, }) const signing = transport - .sign(makeResolved(), makeTransactContext(makeMockUI())) + .sign(makeSameDeviceData(), makeResolved(), makeTransactContext(makeMockUI())) .catch(() => undefined) await settle() @@ -170,12 +171,14 @@ suite('native signing handoff', function () { const returnUrlStub = sinon.stub().returns('googlechrome://') const callbackStub = sinon.stub().returns(new Promise(() => {})) - const transport = makeTransport(makeSameDeviceData(), { + const transport = makeTransport({ send: sendStub, generateReturnUrl: returnUrlStub, waitForCallback: callbackStub, }) - transport.sign(makeResolved(), makeTransactContext(makeMockUI())).catch(() => undefined) + transport + .sign(makeSameDeviceData(), makeResolved(), makeTransactContext(makeMockUI())) + .catch(() => undefined) await settle() assert.equal(callbackStub.callCount, 1, 'connects right away') @@ -187,11 +190,15 @@ suite('native signing handoff', function () { const returnUrlStub = sinon.stub().returns(RETURN_URL) const callbackStub = sinon.stub().returns(new Promise(() => {})) - const transport = makeTransport( - {...makeSameDeviceData(), sameDevice: false}, - {send: sendStub, generateReturnUrl: returnUrlStub, waitForCallback: callbackStub} - ) - transport.sign(makeResolved(), makeTransactContext(makeMockUI())).catch(() => undefined) + const data = {...makeSameDeviceData(), sameDevice: false} + const transport = makeTransport({ + send: sendStub, + generateReturnUrl: returnUrlStub, + waitForCallback: callbackStub, + }) + transport + .sign(data, makeResolved(), makeTransactContext(makeMockUI())) + .catch(() => undefined) await settle() assert.equal(callbackStub.callCount, 1, 'connects right away') @@ -214,11 +221,13 @@ suite('native signing handoff', function () { return pending }) as typeof ui.prompt - const transport = makeTransport(makeSameDeviceData(), {send: sendStub}) + const transport = makeTransport({send: sendStub}) let message = '' - await transport.sign(makeResolved(), makeTransactContext(ui)).catch((error) => { - message = error.message - }) + await transport + .sign(makeSameDeviceData(), makeResolved(), makeTransactContext(ui)) + .catch((error) => { + message = error.message + }) assert.equal(message, 'buoy unavailable', 'the delivery error surfaces') assert.equal(cancelCount, 1, 'the prompt was cancelled') diff --git a/packages/wallet-plugin-anchor/test/tests/native.ts b/packages/wallet-plugin-anchor/test/tests/native.ts index 1e9cec50..2cd5fc45 100644 --- a/packages/wallet-plugin-anchor/test/tests/native.ts +++ b/packages/wallet-plugin-anchor/test/tests/native.ts @@ -43,12 +43,11 @@ suite('native transport', function () { const ui = makeMockUI() const transport = new NativeTransport({ id: 'anchor', - data: {}, buoyUrl: 'https://cb.anchor.link', }) // Never resolves in this test — we only assert on what was rendered. transport - .login(makeLoginContext(ui), makeBundle(), ui.getTranslate()) + .login({}, makeLoginContext(ui), makeBundle(), ui.getTranslate()) .catch(() => undefined) const args = ui.lastPrompt() @@ -62,11 +61,10 @@ suite('native transport', function () { const ui = makeMockUI() const transport = new NativeTransport({ id: 'anchor', - data: {}, buoyUrl: 'https://cb.anchor.link', }) transport - .login(makeLoginContext(ui), makeBundle(), ui.getTranslate()) + .login({}, makeLoginContext(ui), makeBundle(), ui.getTranslate()) .catch(() => undefined) assert.equal(window.location.href, 'esr://same-device') }) @@ -76,11 +74,10 @@ suite('native transport', function () { let selected = false const transport = new NativeTransport({ id: 'anchor', - data: {}, buoyUrl: 'https://cb.anchor.link', }) transport - .login(makeLoginContext(ui), makeBundle(), ui.getTranslate(), { + .login({}, makeLoginContext(ui), makeBundle(), ui.getTranslate(), { delayMs: 10, onSelect: () => (selected = true), }) @@ -102,11 +99,10 @@ suite('native transport', function () { const ui = makeMockUI() const transport = new NativeTransport({ id: 'anchor', - data: {}, buoyUrl: 'https://cb.anchor.link', }) transport - .login(makeLoginContext(ui), makeBundle(), ui.getTranslate()) + .login({}, makeLoginContext(ui), makeBundle(), ui.getTranslate()) .catch(() => undefined) await new Promise((resolve) => setTimeout(resolve, 30)) assert.equal(ui.prompts.length, 1) diff --git a/packages/wallet-plugin-anchor/test/tests/router.ts b/packages/wallet-plugin-anchor/test/tests/router.ts index 37f2c62e..4cf74753 100644 --- a/packages/wallet-plugin-anchor/test/tests/router.ts +++ b/packages/wallet-plugin-anchor/test/tests/router.ts @@ -1,5 +1,5 @@ import {assert} from 'chai' -import {ChainDefinition, LoginContext} from '@wharfkit/session' +import {ChainDefinition, LoginContext, SessionKit} from '@wharfkit/session' import {ResolvedSigningRequest} from '@wharfkit/signing-request' import {APIClient, PermissionLevel, PrivateKey} from '@wharfkit/antelope' import * as buoy from '@greymass/buoy' @@ -79,6 +79,16 @@ function makeTransactContext(ui: any, chain: ChainDefinition) { const sessionKey = PrivateKey.generate('K1') const walletKey = PrivateKey.generate('K1') +/** The harness has no browser storage, so the kit persists into a map. */ +function memoryStorage() { + const store = new Map() + return { + write: async (key: string, value: string) => void store.set(key, value), + read: async (key: string) => store.get(key) ?? null, + remove: async (key: string) => void store.delete(key), + } +} + /** Let the router's `await createIdentityRequest(...)` settle before asserting. */ function settle() { return new Promise((resolve) => setTimeout(resolve, 200)) @@ -888,3 +898,94 @@ suite('caller-opened popup', function () { assert.isTrue((popup as any).closed) }) }) + +suite('restored session', function () { + this.timeout(10 * 1000) + + test('a restored web session signs with the keys assigned to the clone', async function () { + ;(window.open as any).calls.length = 0 + const ui = makeMockUI() + const registered = new WalletPluginAnchor() + const restored = registered.clone() as WalletPluginAnchor + restored.data = { + mode: 'web', + encryptionKey: String(sessionKey), + messageKey: String(walletKey.toPublic()), + } + + const resolved = await makeMockResolvedSigningRequest() + restored.sign(resolved, makeTransactContext(ui, jungle4)).catch(() => undefined) + await settle() + + assert.equal((window.open as any).calls.length, 1, 'popup opened from the clone keys') + assert.include( + (window.open as any).calls[0], + 'https://jungle4.anchorwallet.io/sign?sealed=' + ) + }) + + test('a restored native session signs over the channel assigned to the clone', async function () { + const ui = makeMockUI() + const sendStub = sinon.stub().resolves(undefined as any) + const callbackStub = sinon.stub().returns(new Promise(() => undefined)) + const registered = new WalletPluginAnchor({ + transport: {send: sendStub, waitForCallback: callbackStub}, + }) + const restored = registered.clone() as WalletPluginAnchor + restored.data = { + channelUrl: 'https://cb.anchor.link/laptop-channel', + channelName: 'laptop', + privateKey: String(sessionKey), + signerKey: String(walletKey.toPublic()), + } + + const resolved = await makeMockResolvedSigningRequest() + restored.sign(resolved, makeTransactContext(ui, jungle4)).catch(() => undefined) + await settle() + + assert.equal(sendStub.callCount, 1, 'the sealed request was sent from the clone channel') + assert.equal(sendStub.firstCall.args[1].channel, 'laptop-channel') + }) +}) + +suite('restored session through the kit', function () { + this.timeout(10 * 1000) + + test('a session the kit restores signs with its stored keys', async function () { + ;(window.open as any).calls.length = 0 + const ui = makeMockUI() + const registered = new WalletPluginAnchor() + const kit = new SessionKit( + {appName: 'unittest', chains: [jungle4], ui, walletPlugins: [registered]}, + {storage: memoryStorage()} + ) + const session = await kit.restore({ + chain: jungle4.id, + actor: 'wharfkit1131', + permission: 'test', + walletPlugin: { + id: 'anchor', + data: { + mode: 'web', + encryptionKey: String(sessionKey), + messageKey: String(walletKey.toPublic()), + }, + }, + }) + assert.isDefined(session) + assert.notStrictEqual(session!.walletPlugin, registered, 'the kit hands back a clone') + assert.deepEqual(registered.data, {}, 'the registered instance is untouched') + + const resolved = await makeMockResolvedSigningRequest() + session!.walletPlugin + .sign(resolved, makeTransactContext(ui, jungle4)) + .catch(() => undefined) + await settle() + + assert.equal((window.open as any).calls.length, 1, 'popup opened from the restored keys') + assert.include( + (window.open as any).calls[0], + 'https://jungle4.anchorwallet.io/sign?sealed=' + ) + }) +}) diff --git a/packages/wallet-plugin-anchor/test/tests/web.ts b/packages/wallet-plugin-anchor/test/tests/web.ts index a29b6fef..37f40a9b 100644 --- a/packages/wallet-plugin-anchor/test/tests/web.ts +++ b/packages/wallet-plugin-anchor/test/tests/web.ts @@ -48,7 +48,6 @@ suite('web transport', function () { const ui = makeMockUI() const transport = new WebTransport({ id: 'anchor', - data: {}, buoyUrl: 'https://cb.anchor.link', }) const url = transport.loginUrl( @@ -66,7 +65,6 @@ suite('web transport', function () { ;(window.open as any).calls.length = 0 const transport = new WebTransport({ id: 'anchor', - data: {}, buoyUrl: 'https://cb.anchor.link', }) const popup = transport.openWindow('https://jungle4.anchorwallet.io/sign?esr=x') @@ -79,14 +77,19 @@ suite('web transport', function () { const ui = makeMockUI() const transport = new WebTransport({ id: 'anchor', - data: {}, buoyUrl: 'https://cb.anchor.link', }) const preOpened = transport.openWindow('https://jungle4.anchorwallet.io/sign?esr=x') assert.equal((window.open as any).calls.length, 1) transport - .login(makeLoginContext(ui), makeBundle(), 'https://jungle4.anchorwallet.io', preOpened) + .login( + {}, + makeLoginContext(ui), + makeBundle(), + 'https://jungle4.anchorwallet.io', + preOpened + ) .catch(() => undefined) await new Promise((resolve) => setTimeout(resolve, 10)) @@ -101,7 +104,6 @@ suite('web transport', function () { const ui = makeMockUI() const transport = new WebTransport({ id: 'anchor', - data: {}, buoyUrl: 'https://cb.anchor.link', }) // A blocked popup is `null`, which is exactly what openWindow returns on failure. @@ -109,7 +111,7 @@ suite('web transport', function () { ;(window as any).open = () => null try { transport - .login(makeLoginContext(ui), makeBundle(), 'https://jungle4.anchorwallet.io') + .login({}, makeLoginContext(ui), makeBundle(), 'https://jungle4.anchorwallet.io') .catch(() => undefined) await new Promise((resolve) => setTimeout(resolve, 10)) const args = ui.lastPrompt()! @@ -132,11 +134,11 @@ suite('web transport', function () { const ui = makeMockUI() const transport = new WebTransport({ id: 'anchor', - data: {}, buoyUrl: 'https://cb.anchor.link', waitForCallback: callback, }) const response = await transport.login( + {}, makeLoginContext(ui), makeBundle(), 'https://jungle4.anchorwallet.io' @@ -152,12 +154,12 @@ suite('web transport', function () { ;(window.open as any).calls.length = 0 const dappKey = PrivateKey.generate('K1') const walletKey = PrivateKey.generate('K1') + const data = { + encryptionKey: String(dappKey), + messageKey: String(walletKey.toPublic()), + } const transport = new WebTransport({ id: 'anchor', - data: { - encryptionKey: String(dappKey), - messageKey: String(walletKey.toPublic()), - }, buoyUrl: 'https://cb.anchor.link', }) @@ -178,7 +180,7 @@ suite('web transport', function () { } as any let signError: any - transport.sign(resolved, context, 'https://jungle4.anchorwallet.io').catch((e) => { + transport.sign(data, resolved, context, 'https://jungle4.anchorwallet.io').catch((e) => { signError = e }) await new Promise((resolve) => setTimeout(resolve, 20)) @@ -199,12 +201,11 @@ suite('web transport', function () { test('sign refuses to run before a web login has stored keys', async function () { const transport = new WebTransport({ id: 'anchor', - data: {}, buoyUrl: 'https://cb.anchor.link', }) let message = '' try { - await transport.sign({} as any, {} as any, 'https://jungle4.anchorwallet.io') + await transport.sign({}, {} as any, {} as any, 'https://jungle4.anchorwallet.io') } catch (error: any) { message = error.message } From 176d85e0400b42dc1138102cca2c342ac689e040 Mon Sep 17 00:00:00 2001 From: aaroncox Date: Mon, 28 Sep 2026 11:14:20 -0700 Subject: [PATCH 4/5] Document the sharing contract of AbstractWalletPlugin.clone --- packages/session/src/wallet.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/session/src/wallet.ts b/packages/session/src/wallet.ts index 217c1796..10a6330a 100644 --- a/packages/session/src/wallet.ts +++ b/packages/session/src/wallet.ts @@ -188,6 +188,7 @@ export abstract class AbstractWalletPlugin implements WalletPlugin { data: this.data, } } + /** Shallow copy with fresh data and metadata; every other field must be safe to share. */ clone(): WalletPlugin { const cloned = Object.create(Object.getPrototypeOf(this)) Object.assign(cloned, this) From 8c683b9f474d31823a7cbea539c8718cb8f3dbbc Mon Sep 17 00:00:00 2001 From: aaroncox Date: Mon, 28 Sep 2026 11:17:48 -0700 Subject: [PATCH 5/5] Version 4.0.2 --- bun.lock | 102 +++++++++--------- package.json | 2 +- packages/abicache/package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- packages/account/package.json | 2 +- packages/actionstream/package.json | 2 +- packages/antelope/package.json | 2 +- packages/atomicassets/package.json | 2 +- packages/bundle/README.md | 14 +-- packages/bundle/package.json | 2 +- packages/cli/package.json | 2 +- packages/common/package.json | 2 +- packages/conformance/package.json | 2 +- packages/contract/package.json | 2 +- packages/hyperion/package.json | 2 +- packages/light-api/package.json | 2 +- packages/mock-data/package.json | 2 +- packages/msigs/package.json | 2 +- packages/protocol-esr/package.json | 2 +- packages/protocol-scatter/package.json | 2 +- packages/resources/package.json | 2 +- packages/roborovski/package.json | 2 +- packages/sealed-messages/package.json | 2 +- packages/session/package.json | 2 +- packages/signing-request/package.json | 2 +- packages/svelte-components/package.json | 2 +- packages/token/package.json | 2 +- .../transact-plugin-autocorrect/package.json | 2 +- .../transact-plugin-cosigner/package.json | 2 +- .../transact-plugin-explorerlink/package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- packages/transact-plugin-mock/package.json | 2 +- .../transact-plugin-msig-propose/package.json | 2 +- .../package.json | 2 +- packages/wallet-plugin-anchor/package.json | 2 +- packages/wallet-plugin-cleos/package.json | 2 +- .../wallet-plugin-cloudwallet/package.json | 2 +- .../wallet-plugin-gatewallet/package.json | 2 +- packages/wallet-plugin-imtoken/package.json | 2 +- packages/wallet-plugin-metamask/package.json | 2 +- packages/wallet-plugin-mimic/package.json | 2 +- packages/wallet-plugin-mock/package.json | 2 +- packages/wallet-plugin-paycash/package.json | 2 +- .../wallet-plugin-privatekey/package.json | 2 +- packages/wallet-plugin-scatter/package.json | 2 +- packages/wallet-plugin-tacklebox/package.json | 2 +- .../wallet-plugin-tokenpocket/package.json | 2 +- .../package.json | 2 +- packages/web-renderer/package.json | 2 +- packages/web-ui/package.json | 2 +- packages/webauthn/package.json | 2 +- 54 files changed, 110 insertions(+), 110 deletions(-) diff --git a/bun.lock b/bun.lock index dd8a84f3..b35e4c24 100644 --- a/bun.lock +++ b/bun.lock @@ -32,7 +32,7 @@ }, "packages/abicache": { "name": "@wharfkit/abicache", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", "@wharfkit/signing-request": "workspace:*", @@ -44,7 +44,7 @@ }, "packages/account": { "name": "@wharfkit/account", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", "@wharfkit/common": "workspace:*", @@ -60,7 +60,7 @@ }, "packages/account-creation-plugin-anchor": { "name": "@wharfkit/account-creation-plugin-anchor", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/session": "workspace:*", }, @@ -71,7 +71,7 @@ }, "packages/account-creation-plugin-jungle4": { "name": "@wharfkit/account-creation-plugin-jungle4", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/session": "workspace:*", }, @@ -82,7 +82,7 @@ }, "packages/account-creation-plugin-metamask": { "name": "@wharfkit/account-creation-plugin-metamask", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@metamask/providers": "^17.0.0", "@wharfkit/session": "workspace:*", @@ -94,7 +94,7 @@ }, "packages/actionstream": { "name": "@wharfkit/actionstream", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", }, @@ -105,7 +105,7 @@ }, "packages/antelope": { "name": "@wharfkit/antelope", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@noble/curves": "^2.2.0", "@noble/hashes": "^2.2.0", @@ -115,7 +115,7 @@ }, "packages/atomicassets": { "name": "@wharfkit/atomicassets", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", "@wharfkit/common": "workspace:*", @@ -128,7 +128,7 @@ }, "packages/bundle": { "name": "@wharfkit/bundle", - "version": "4.0.1", + "version": "4.0.2", "devDependencies": { "@wharfkit/account": "workspace:*", "@wharfkit/antelope": "workspace:*", @@ -154,7 +154,7 @@ }, "packages/cli": { "name": "@wharfkit/cli", - "version": "4.0.1", + "version": "4.0.2", "bin": { "wharfkit": "./lib/cli.js", }, @@ -178,7 +178,7 @@ }, "packages/common": { "name": "@wharfkit/common", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", }, @@ -189,7 +189,7 @@ }, "packages/conformance": { "name": "@wharfkit/conformance", - "version": "4.0.1", + "version": "4.0.2", "devDependencies": { "@greymass/vert": "^3.0.0", "@types/bun": "^1.0.4", @@ -200,7 +200,7 @@ }, "packages/contract": { "name": "@wharfkit/contract", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/abicache": "workspace:*", "@wharfkit/antelope": "workspace:*", @@ -214,7 +214,7 @@ }, "packages/hyperion": { "name": "@wharfkit/hyperion", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", }, @@ -224,7 +224,7 @@ }, "packages/light-api": { "name": "@wharfkit/light-api", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", }, @@ -234,7 +234,7 @@ }, "packages/mock-data": { "name": "@wharfkit/mock-data", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", "@wharfkit/session": "workspace:*", @@ -243,7 +243,7 @@ }, "packages/msigs": { "name": "@wharfkit/msigs", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", }, @@ -253,7 +253,7 @@ }, "packages/protocol-esr": { "name": "@wharfkit/protocol-esr", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@greymass/buoy": "catalog:", "@wharfkit/sealed-messages": "workspace:*", @@ -272,7 +272,7 @@ }, "packages/protocol-scatter": { "name": "@wharfkit/protocol-scatter", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", "@wharfkit/session": "workspace:*", @@ -287,7 +287,7 @@ }, "packages/resources": { "name": "@wharfkit/resources", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", "bn.js": "catalog:", @@ -299,7 +299,7 @@ }, "packages/roborovski": { "name": "@wharfkit/roborovski", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", }, @@ -309,7 +309,7 @@ }, "packages/sealed-messages": { "name": "@wharfkit/sealed-messages", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@greymass/miniaes": "^1.0.0", "@wharfkit/antelope": "workspace:*", @@ -320,7 +320,7 @@ }, "packages/session": { "name": "@wharfkit/session", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/abicache": "workspace:*", "@wharfkit/antelope": "workspace:*", @@ -337,14 +337,14 @@ }, "packages/signing-request": { "name": "@wharfkit/signing-request", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", }, }, "packages/svelte-components": { "name": "@wharfkit/svelte-components", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@lucide/svelte": "^0.516.0", "@melt-ui/svelte": "^0.86.6", @@ -391,7 +391,7 @@ }, "packages/token": { "name": "@wharfkit/token", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", "@wharfkit/contract": "workspace:*", @@ -402,7 +402,7 @@ }, "packages/transact-plugin-autocorrect": { "name": "@wharfkit/transact-plugin-autocorrect", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/resources": "workspace:*", "@wharfkit/session": "workspace:*", @@ -415,7 +415,7 @@ }, "packages/transact-plugin-cosigner": { "name": "@wharfkit/transact-plugin-cosigner", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/session": "workspace:*", }, @@ -427,7 +427,7 @@ }, "packages/transact-plugin-explorerlink": { "name": "@wharfkit/transact-plugin-explorerlink", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/session": "workspace:*", }, @@ -439,7 +439,7 @@ }, "packages/transact-plugin-finality-callback": { "name": "@wharfkit/transact-plugin-finality-callback", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/session": "workspace:*", }, @@ -450,7 +450,7 @@ }, "packages/transact-plugin-finality-checker": { "name": "@wharfkit/transact-plugin-finality-checker", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/session": "workspace:*", }, @@ -462,7 +462,7 @@ }, "packages/transact-plugin-mock": { "name": "@wharfkit/transact-plugin-mock", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/session": "workspace:*", }, @@ -474,7 +474,7 @@ }, "packages/transact-plugin-msig-propose": { "name": "@wharfkit/transact-plugin-msig-propose", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/session": "workspace:*", }, @@ -486,7 +486,7 @@ }, "packages/transact-plugin-resource-provider": { "name": "@wharfkit/transact-plugin-resource-provider", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/resources": "workspace:*", "@wharfkit/session": "workspace:*", @@ -501,7 +501,7 @@ }, "packages/wallet-plugin-anchor": { "name": "@wharfkit/wallet-plugin-anchor", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@greymass/buoy": "catalog:", "@wharfkit/antelope": "workspace:*", @@ -522,7 +522,7 @@ }, "packages/wallet-plugin-cleos": { "name": "@wharfkit/wallet-plugin-cleos", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/session": "workspace:*", }, @@ -533,7 +533,7 @@ }, "packages/wallet-plugin-cloudwallet": { "name": "@wharfkit/wallet-plugin-cloudwallet", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/session": "workspace:*", }, @@ -544,7 +544,7 @@ }, "packages/wallet-plugin-gatewallet": { "name": "@wharfkit/wallet-plugin-gatewallet", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/protocol-scatter": "workspace:*", "@wharfkit/session": "workspace:*", @@ -557,7 +557,7 @@ }, "packages/wallet-plugin-imtoken": { "name": "@wharfkit/wallet-plugin-imtoken", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/protocol-scatter": "workspace:*", "@wharfkit/session": "workspace:*", @@ -570,7 +570,7 @@ }, "packages/wallet-plugin-metamask": { "name": "@wharfkit/wallet-plugin-metamask", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@metamask/providers": "^17.0.0", "@wharfkit/session": "workspace:*", @@ -582,7 +582,7 @@ }, "packages/wallet-plugin-mimic": { "name": "@wharfkit/wallet-plugin-mimic", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/session": "workspace:*", }, @@ -593,7 +593,7 @@ }, "packages/wallet-plugin-mock": { "name": "@wharfkit/wallet-plugin-mock", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/session": "workspace:*", }, @@ -605,7 +605,7 @@ }, "packages/wallet-plugin-paycash": { "name": "@wharfkit/wallet-plugin-paycash", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/protocol-esr": "workspace:*", "@wharfkit/session": "workspace:*", @@ -617,7 +617,7 @@ }, "packages/wallet-plugin-privatekey": { "name": "@wharfkit/wallet-plugin-privatekey", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/session": "workspace:*", }, @@ -629,7 +629,7 @@ }, "packages/wallet-plugin-scatter": { "name": "@wharfkit/wallet-plugin-scatter", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/protocol-scatter": "workspace:*", "@wharfkit/session": "workspace:*", @@ -641,7 +641,7 @@ }, "packages/wallet-plugin-tacklebox": { "name": "@wharfkit/wallet-plugin-tacklebox", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@greymass/buoy": "catalog:", "@wharfkit/protocol-esr": "workspace:*", @@ -656,7 +656,7 @@ }, "packages/wallet-plugin-tokenpocket": { "name": "@wharfkit/wallet-plugin-tokenpocket", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/protocol-scatter": "workspace:*", "@wharfkit/session": "workspace:*", @@ -668,7 +668,7 @@ }, "packages/wallet-plugin-web-authenticator": { "name": "@wharfkit/wallet-plugin-web-authenticator", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@greymass/buoy": "catalog:", "@wharfkit/antelope": "workspace:*", @@ -687,7 +687,7 @@ }, "packages/web-renderer": { "name": "@wharfkit/web-renderer", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/session": "workspace:*", }, @@ -738,7 +738,7 @@ }, "packages/web-ui": { "name": "@wharfkit/web-ui", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/common": "workspace:*", "@wharfkit/session": "workspace:*", @@ -770,7 +770,7 @@ }, "packages/webauthn": { "name": "@wharfkit/webauthn", - "version": "4.0.1", + "version": "4.0.2", "dependencies": { "@wharfkit/antelope": "workspace:*", "cborg": "^4.5.8", diff --git a/package.json b/package.json index ed40c7f5..5eb31cff 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "wharfkit-js", "private": true, - "version": "4.0.1", + "version": "4.0.2", "workspaces": { "packages": [ "packages/*" diff --git a/packages/abicache/package.json b/packages/abicache/package.json index a7dcab34..ec0781f4 100644 --- a/packages/abicache/package.json +++ b/packages/abicache/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/abicache", "description": "ABI Caching Mechanism for use in Session and Contract Kits", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "license": "BSD-3-Clause", "engines": { diff --git a/packages/account-creation-plugin-anchor/package.json b/packages/account-creation-plugin-anchor/package.json index 9bd353e0..c2781ab7 100644 --- a/packages/account-creation-plugin-anchor/package.json +++ b/packages/account-creation-plugin-anchor/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/account-creation-plugin-anchor", "description": "An account creation plugin using the Greymass account creation service", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/account-creation-plugin-anchor", "license": "BSD-3-Clause", "engines": { diff --git a/packages/account-creation-plugin-jungle4/package.json b/packages/account-creation-plugin-jungle4/package.json index 78834099..30b37410 100644 --- a/packages/account-creation-plugin-jungle4/package.json +++ b/packages/account-creation-plugin-jungle4/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/account-creation-plugin-jungle4", "description": "Plugin to create a Jungle4 Testnet acccount.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/account-creation-plugin-jungle4", "license": "BSD-3-Clause", "engines": { diff --git a/packages/account-creation-plugin-metamask/package.json b/packages/account-creation-plugin-metamask/package.json index 1eaae9ce..700715a4 100644 --- a/packages/account-creation-plugin-metamask/package.json +++ b/packages/account-creation-plugin-metamask/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/account-creation-plugin-metamask", "description": "A MetaMask plugin to create EOS accounts using Metamask public keys.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/account-creation-plugin-metamask", "license": "BSD-3-Clause", "engines": { diff --git a/packages/account/package.json b/packages/account/package.json index 12df116e..5a07ee99 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/account", "description": "Account kit for Wharf Kit", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/docs/account-kit", "license": "BSD-3-Clause", "engines": { diff --git a/packages/actionstream/package.json b/packages/actionstream/package.json index d43cfeaa..5a015d9d 100644 --- a/packages/actionstream/package.json +++ b/packages/actionstream/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/actionstream", "description": "Client library for subscribing to Roborovski action streams", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "license": "BSD-3-Clause", "engines": { diff --git a/packages/antelope/package.json b/packages/antelope/package.json index 2044e163..6f303c10 100644 --- a/packages/antelope/package.json +++ b/packages/antelope/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/antelope", "description": "Library for working with Antelope powered blockchains.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/docs/antelope", "license": "BSD-3-Clause", "engines": { diff --git a/packages/atomicassets/package.json b/packages/atomicassets/package.json index 05878b98..7a919a15 100644 --- a/packages/atomicassets/package.json +++ b/packages/atomicassets/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/atomicassets", "description": "AtomicAsset library for Wharf", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "license": "BSD-3-Clause", "engines": { diff --git a/packages/bundle/README.md b/packages/bundle/README.md index 432aec5f..303008bb 100644 --- a/packages/bundle/README.md +++ b/packages/bundle/README.md @@ -5,7 +5,7 @@ A prepackaged bundle of common Wharf libraries, built as a self-contained IIFE ( ## Usage ```html - + ``` @@ -30,7 +30,7 @@ Both URLs above name an exact version and the full file path. jsDelivr serves th Use `https://cdn.jsdelivr.net/npm/@wharfkit/bundle@4/dist/wharf.bundle.js` if you want patch releases without editing the page. The trade is that the bytes are no longer the package's own and no longer eligible for Subresource Integrity. -To add an `integrity` attribute, take the hash for the exact version from `https://data.jsdelivr.com/v1/packages/npm/@wharfkit/bundle@4.0.1?structure=flat`, and pair it with `crossorigin="anonymous"`, which SRI requires. An `integrity` attribute on a ` ``` -Mixing versions across imports, or adding a package still on the `1.x` line, splits it again. esm.sh takes an explicit pin against that: `?deps=@wharfkit/antelope@4.0.1` on each top-level URL rewrites the antelope import to one concrete build and propagates into every transitive `@wharfkit/*` request, so it costs one query parameter per import rather than one entry per transitive package. jsDelivr's `+esm` route has no query-parameter equivalent, and its output carries jsDelivr's own warning against pairing it with Subresource Integrity. +Mixing versions across imports, or adding a package still on the `1.x` line, splits it again. esm.sh takes an explicit pin against that: `?deps=@wharfkit/antelope@4.0.2` on each top-level URL rewrites the antelope import to one concrete build and propagates into every transitive `@wharfkit/*` request, so it costs one query parameter per import rather than one entry per transitive package. jsDelivr's `+esm` route has no query-parameter equivalent, and its output carries jsDelivr's own warning against pairing it with Subresource Integrity. The bundle stays the recommended browser artifact. It is the only one that guarantees a single antelope without a resolver. ## Examples -`public/bundle.html` and `public/esm.html` are runnable examples of both forms, loading the built files next to them. `make` copies them into `dist/`, so open them from there after a build. The same pages ship in the package, at `https://cdn.jsdelivr.net/npm/@wharfkit/bundle@4.0.1/dist/bundle.html` and `.../dist/esm.html`. +`public/bundle.html` and `public/esm.html` are runnable examples of both forms, loading the built files next to them. `make` copies them into `dist/`, so open them from there after a build. The same pages ship in the package, at `https://cdn.jsdelivr.net/npm/@wharfkit/bundle@4.0.2/dist/bundle.html` and `.../dist/esm.html`. ## Types diff --git a/packages/bundle/package.json b/packages/bundle/package.json index 894ad132..148c3e95 100644 --- a/packages/bundle/package.json +++ b/packages/bundle/package.json @@ -1,6 +1,6 @@ { "name": "@wharfkit/bundle", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "description": "A prepackaged bundle of common Wharf libraries re-exported for IIFE or ESM", "license": "BSD-3-Clause", diff --git a/packages/cli/package.json b/packages/cli/package.json index 149ecf13..1c1e30f1 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@wharfkit/cli", - "version": "4.0.1", + "version": "4.0.2", "license": "BSD-3-Clause", "homepage": "https://wharfkit.com/docs/utilities/cli", "description": "Command line utilities for Wharf", diff --git a/packages/common/package.json b/packages/common/package.json index 9fd8e8ea..e077e428 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/common", "description": "Common data and functions shared across WharfKit packages", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/docs/utilities/common-library", "license": "BSD-3-Clause", "engines": { diff --git a/packages/conformance/package.json b/packages/conformance/package.json index a8917e35..51a30cfd 100644 --- a/packages/conformance/package.json +++ b/packages/conformance/package.json @@ -1,6 +1,6 @@ { "name": "@wharfkit/conformance", - "version": "4.0.1", + "version": "4.0.2", "type": "module", "license": "BSD-3-Clause", "engines": { diff --git a/packages/contract/package.json b/packages/contract/package.json index f9b05567..323825d6 100644 --- a/packages/contract/package.json +++ b/packages/contract/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/contract", "description": "ContractKit for Wharf", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/docs/contract-kit", "license": "BSD-3-Clause", "engines": { diff --git a/packages/hyperion/package.json b/packages/hyperion/package.json index 00d3e02d..29cf8423 100644 --- a/packages/hyperion/package.json +++ b/packages/hyperion/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/hyperion", "description": "API Client to access Hyperion API endpoints", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "license": "BSD-3-Clause", "engines": { diff --git a/packages/light-api/package.json b/packages/light-api/package.json index 99792eb8..b5d32b7d 100644 --- a/packages/light-api/package.json +++ b/packages/light-api/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/light-api", "description": "API Client to access Light API endpoints", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "license": "BSD-3-Clause", "engines": { diff --git a/packages/mock-data/package.json b/packages/mock-data/package.json index 312bfdb1..d0bf99ea 100644 --- a/packages/mock-data/package.json +++ b/packages/mock-data/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/mock-data", "description": "Sample data for usage in tests throughout @wharfkit", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "license": "BSD-3-Clause", "engines": { diff --git a/packages/msigs/package.json b/packages/msigs/package.json index fec46193..23797cdf 100644 --- a/packages/msigs/package.json +++ b/packages/msigs/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/msigs", "description": "API Client to access Roborovski msigs API endpoints", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "license": "BSD-3-Clause", "engines": { diff --git a/packages/protocol-esr/package.json b/packages/protocol-esr/package.json index 3ddb52b0..4ea11072 100644 --- a/packages/protocol-esr/package.json +++ b/packages/protocol-esr/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/protocol-esr", "description": "Abstract methods useful to all ESR-based wallet plugins", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "license": "BSD-3-Clause", "engines": { diff --git a/packages/protocol-scatter/package.json b/packages/protocol-scatter/package.json index 2d0b1007..9a659935 100644 --- a/packages/protocol-scatter/package.json +++ b/packages/protocol-scatter/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/protocol-scatter", "description": "Abstract methods useful to all Scatter-based wallet plugins", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "license": "BSD-3-Clause", "engines": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 79315c7f..02cd99de 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/resources", "description": "Library to assist in Antelope-blockchain resource calculations.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "license": "BSD-3-Clause", "engines": { diff --git a/packages/roborovski/package.json b/packages/roborovski/package.json index a3aeb583..e0e01d14 100644 --- a/packages/roborovski/package.json +++ b/packages/roborovski/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/roborovski", "description": "API Client to access Roborovski API endpoints", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "license": "BSD-3-Clause", "engines": { diff --git a/packages/sealed-messages/package.json b/packages/sealed-messages/package.json index 1576871e..d16f9bab 100644 --- a/packages/sealed-messages/package.json +++ b/packages/sealed-messages/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/sealed-messages", "description": "", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "license": "BSD-3-Clause", "engines": { diff --git a/packages/session/package.json b/packages/session/package.json index b6849884..cf5436af 100644 --- a/packages/session/package.json +++ b/packages/session/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/session", "description": "Create account-based sessions, perform transactions, and allow users to login using Antelope-based blockchains.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/docs/session-kit", "license": "BSD-3-Clause", "engines": { diff --git a/packages/signing-request/package.json b/packages/signing-request/package.json index 4be7bfa2..666b0028 100644 --- a/packages/signing-request/package.json +++ b/packages/signing-request/package.json @@ -1,6 +1,6 @@ { "name": "@wharfkit/signing-request", - "version": "4.0.1", + "version": "4.0.2", "description": "Signing Request (ESR / EEP-7) encoder and decoder for Antelope blockchains", "homepage": "https://wharfkit.com/docs/utilities/signing-request-library", "license": "BSD-3-Clause", diff --git a/packages/svelte-components/package.json b/packages/svelte-components/package.json index d1b28703..22f821eb 100644 --- a/packages/svelte-components/package.json +++ b/packages/svelte-components/package.json @@ -1,6 +1,6 @@ { "name": "@wharfkit/svelte-components", - "version": "4.0.1", + "version": "4.0.2", "description": "Svelte 5 and Tailwind v4 component library for Antelope applications", "license": "BSD-3-Clause", "repository": { diff --git a/packages/token/package.json b/packages/token/package.json index a935e90d..1e229e56 100644 --- a/packages/token/package.json +++ b/packages/token/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/token", "description": "Library to work with Antelope-blockchain system tokens.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "license": "BSD-3-Clause", "engines": { diff --git a/packages/transact-plugin-autocorrect/package.json b/packages/transact-plugin-autocorrect/package.json index 59e54ffb..be19a157 100644 --- a/packages/transact-plugin-autocorrect/package.json +++ b/packages/transact-plugin-autocorrect/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/transact-plugin-autocorrect", "description": "A plugin to correct common issues users experience while performing transactions.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/transact-plugin-autocorrect", "license": "BSD-3-Clause", "engines": { diff --git a/packages/transact-plugin-cosigner/package.json b/packages/transact-plugin-cosigner/package.json index 345e2611..11c2a9fd 100644 --- a/packages/transact-plugin-cosigner/package.json +++ b/packages/transact-plugin-cosigner/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/transact-plugin-cosigner", "description": "Automatically cosign transactions to assume resource costs using a noop action.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/transact-plugin-cosigner", "license": "BSD-3-Clause", "engines": { diff --git a/packages/transact-plugin-explorerlink/package.json b/packages/transact-plugin-explorerlink/package.json index 074f18ab..5a035973 100644 --- a/packages/transact-plugin-explorerlink/package.json +++ b/packages/transact-plugin-explorerlink/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/transact-plugin-explorerlink", "description": "A transact plugin to display a link to a block explorer after a transaction is broadcast.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/transact-plugin-explorerlink", "license": "BSD-3-Clause", "engines": { diff --git a/packages/transact-plugin-finality-callback/package.json b/packages/transact-plugin-finality-callback/package.json index 086f6f97..a7202f91 100644 --- a/packages/transact-plugin-finality-callback/package.json +++ b/packages/transact-plugin-finality-callback/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/transact-plugin-finality-callback", "description": "A template to create plugins for use with @wharfkit/session transact method.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/transact-plugin-finality-callback", "license": "BSD-3-Clause", "engines": { diff --git a/packages/transact-plugin-finality-checker/package.json b/packages/transact-plugin-finality-checker/package.json index 6242a9eb..4b2abbc7 100644 --- a/packages/transact-plugin-finality-checker/package.json +++ b/packages/transact-plugin-finality-checker/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/transact-plugin-finality-checker", "description": "A template to create plugins for use with @wharfkit/session transact method.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/transact-plugin-finality-checker", "license": "BSD-3-Clause", "engines": { diff --git a/packages/transact-plugin-mock/package.json b/packages/transact-plugin-mock/package.json index f6dfac63..887726f8 100644 --- a/packages/transact-plugin-mock/package.json +++ b/packages/transact-plugin-mock/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/transact-plugin-mock", "description": "A mock TransactPlugin to simulate specific events.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/transact-plugin-mock", "license": "BSD-3-Clause", "engines": { diff --git a/packages/transact-plugin-msig-propose/package.json b/packages/transact-plugin-msig-propose/package.json index f4492c7f..6c78c81f 100644 --- a/packages/transact-plugin-msig-propose/package.json +++ b/packages/transact-plugin-msig-propose/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/transact-plugin-msig-propose", "description": "A template to create plugins for use with @wharfkit/session transact method.", - "version": "4.0.1", + "version": "4.0.2", "private": true, "license": "BSD-3-Clause", "engines": { diff --git a/packages/transact-plugin-resource-provider/package.json b/packages/transact-plugin-resource-provider/package.json index 18bab4eb..b11f2f4b 100644 --- a/packages/transact-plugin-resource-provider/package.json +++ b/packages/transact-plugin-resource-provider/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/transact-plugin-resource-provider", "description": "Plugin to automatically provide network resources for transactions using the Resource Provider implementation standard.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/transact-plugin-resource-provider", "license": "BSD-3-Clause", "engines": { diff --git a/packages/wallet-plugin-anchor/package.json b/packages/wallet-plugin-anchor/package.json index b0285fbd..286d3f44 100644 --- a/packages/wallet-plugin-anchor/package.json +++ b/packages/wallet-plugin-anchor/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/wallet-plugin-anchor", "description": "An Anchor plugin for use with @wharfkit/session.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/wallet-plugin-anchor", "license": "BSD-3-Clause", "engines": { diff --git a/packages/wallet-plugin-cleos/package.json b/packages/wallet-plugin-cleos/package.json index b12ac738..21a592f6 100644 --- a/packages/wallet-plugin-cleos/package.json +++ b/packages/wallet-plugin-cleos/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/wallet-plugin-cleos", "description": "A template to create wallet plugins for use with @wharfkit/session.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/wallet-plugin-cleos", "license": "BSD-3-Clause", "engines": { diff --git a/packages/wallet-plugin-cloudwallet/package.json b/packages/wallet-plugin-cloudwallet/package.json index ce4de17e..173eaebc 100644 --- a/packages/wallet-plugin-cloudwallet/package.json +++ b/packages/wallet-plugin-cloudwallet/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/wallet-plugin-cloudwallet", "description": "A WalletPlugin for My Cloud Wallet for use within the @wharfkit/session.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/wallet-plugin-cloudwallet", "license": "BSD-3-Clause", "engines": { diff --git a/packages/wallet-plugin-gatewallet/package.json b/packages/wallet-plugin-gatewallet/package.json index b9bd9cbb..77383c0e 100644 --- a/packages/wallet-plugin-gatewallet/package.json +++ b/packages/wallet-plugin-gatewallet/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/wallet-plugin-gatewallet", "description": "A template to create wallet plugins for use with @wharfkit/session.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/wallet-plugin-gatewallet", "license": "BSD-3-Clause", "engines": { diff --git a/packages/wallet-plugin-imtoken/package.json b/packages/wallet-plugin-imtoken/package.json index 4cfc8782..c09cd800 100644 --- a/packages/wallet-plugin-imtoken/package.json +++ b/packages/wallet-plugin-imtoken/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/wallet-plugin-imtoken", "description": "A template to create wallet plugins for use with @wharfkit/session.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/wallet-plugin-imtoken", "license": "BSD-3-Clause", "engines": { diff --git a/packages/wallet-plugin-metamask/package.json b/packages/wallet-plugin-metamask/package.json index b3458b23..6f0934bc 100644 --- a/packages/wallet-plugin-metamask/package.json +++ b/packages/wallet-plugin-metamask/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/wallet-plugin-metamask", "description": "A MetaMask plugin for use with @wharfkit/session.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/wallet-plugin-metamask", "license": "BSD-3-Clause", "engines": { diff --git a/packages/wallet-plugin-mimic/package.json b/packages/wallet-plugin-mimic/package.json index 227bfb9f..ff775fcc 100644 --- a/packages/wallet-plugin-mimic/package.json +++ b/packages/wallet-plugin-mimic/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/wallet-plugin-mimic", "description": "A template to create wallet plugins for use with @wharfkit/session.", - "version": "4.0.1", + "version": "4.0.2", "private": true, "license": "BSD-3-Clause", "engines": { diff --git a/packages/wallet-plugin-mock/package.json b/packages/wallet-plugin-mock/package.json index 6f0d1972..4b662b12 100644 --- a/packages/wallet-plugin-mock/package.json +++ b/packages/wallet-plugin-mock/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/wallet-plugin-mock", "description": "A mock wallet for developers to use while building web applications.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/wallet-plugin-mock", "license": "BSD-3-Clause", "engines": { diff --git a/packages/wallet-plugin-paycash/package.json b/packages/wallet-plugin-paycash/package.json index 777e12ab..b80592e7 100644 --- a/packages/wallet-plugin-paycash/package.json +++ b/packages/wallet-plugin-paycash/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/wallet-plugin-paycash", "description": "A Wharf wallet plugin for the PayCash wallet", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/wallet-plugin-paycash", "license": "BSD-3-Clause", "engines": { diff --git a/packages/wallet-plugin-privatekey/package.json b/packages/wallet-plugin-privatekey/package.json index 0be3530c..3a5de10e 100644 --- a/packages/wallet-plugin-privatekey/package.json +++ b/packages/wallet-plugin-privatekey/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/wallet-plugin-privatekey", "description": "A template to create wallet plugins for use with @wharfkit/session.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/wallet-plugin-privatekey", "license": "BSD-3-Clause", "engines": { diff --git a/packages/wallet-plugin-scatter/package.json b/packages/wallet-plugin-scatter/package.json index 603188ce..cfb02b02 100644 --- a/packages/wallet-plugin-scatter/package.json +++ b/packages/wallet-plugin-scatter/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/wallet-plugin-scatter", "description": "A WalletPlugin for the Scatter wallet for use within the @wharfkit/session.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/wallet-plugin-scatter", "license": "BSD-3-Clause", "engines": { diff --git a/packages/wallet-plugin-tacklebox/package.json b/packages/wallet-plugin-tacklebox/package.json index c7b14f9d..f2b00c0b 100644 --- a/packages/wallet-plugin-tacklebox/package.json +++ b/packages/wallet-plugin-tacklebox/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/wallet-plugin-tacklebox", "description": "A TackleBox plugin for use with @wharfkit/session.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/wallet-plugin-tacklebox", "license": "BSD-3-Clause", "engines": { diff --git a/packages/wallet-plugin-tokenpocket/package.json b/packages/wallet-plugin-tokenpocket/package.json index eabe13f7..cf091595 100644 --- a/packages/wallet-plugin-tokenpocket/package.json +++ b/packages/wallet-plugin-tokenpocket/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/wallet-plugin-tokenpocket", "description": "A WalletPlugin for the TokenPocket wallet for use within the @wharfkit/session.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/wallet-plugin-tokenpocket", "license": "BSD-3-Clause", "engines": { diff --git a/packages/wallet-plugin-web-authenticator/package.json b/packages/wallet-plugin-web-authenticator/package.json index 1d0b9b4f..c6c1855b 100644 --- a/packages/wallet-plugin-web-authenticator/package.json +++ b/packages/wallet-plugin-web-authenticator/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/wallet-plugin-web-authenticator", "description": "A Web Authenticator wallet plugin for use with @wharfkit/session.", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com/plugins/wallet-plugin-web-authenticator", "license": "BSD-3-Clause", "engines": { diff --git a/packages/web-renderer/package.json b/packages/web-renderer/package.json index ac1b6993..84e569b0 100644 --- a/packages/web-renderer/package.json +++ b/packages/web-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@wharfkit/web-renderer", - "version": "4.0.1", + "version": "4.0.2", "description": "", "license": "BSD-3-Clause", "engines": { diff --git a/packages/web-ui/package.json b/packages/web-ui/package.json index 4cd63565..083b31e1 100644 --- a/packages/web-ui/package.json +++ b/packages/web-ui/package.json @@ -1,6 +1,6 @@ { "name": "@wharfkit/web-ui", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "description": "Modern embedded UI renderer for WharfKit SessionKit", "type": "module", diff --git a/packages/webauthn/package.json b/packages/webauthn/package.json index 5e66dc39..caec2681 100644 --- a/packages/webauthn/package.json +++ b/packages/webauthn/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/webauthn", "description": "WebAuthn helpers for antelope core", - "version": "4.0.1", + "version": "4.0.2", "homepage": "https://wharfkit.com", "license": "BSD-3-Clause", "engines": {