@xrpl-wallet-kit/adapter-crossmark 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,64 @@
1
+ # @xrpl-wallet-kit/adapter-crossmark
2
+
3
+ Crossmark adapter for XRPL Wallet Kit.
4
+
5
+ Crossmark is an XRPL browser extension wallet. This adapter wraps `@crossmarkio/sdk` and maps Crossmark connection, message signing, and transaction methods into the XRPL Wallet Kit adapter contract.
6
+
7
+ ## Capabilities
8
+
9
+ - `connect`
10
+ - `signMessage`
11
+ - `signAndSubmit`
12
+ - `payments`
13
+ - `nftOffers`
14
+
15
+ ## Install
16
+
17
+ ```bash
18
+ npm install @xrpl-wallet-kit/adapter-crossmark
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ ```ts
24
+ import { createWalletKit } from "@xrpl-wallet-kit/client";
25
+ import { createCrossmarkAdapter } from "@xrpl-wallet-kit/adapter-crossmark";
26
+
27
+ const kit = createWalletKit({
28
+ adapters: [createCrossmarkAdapter()]
29
+ });
30
+ ```
31
+
32
+ When using `@xrpl-wallet-kit/client` defaults, Crossmark is already included.
33
+
34
+ ## Runtime Notes
35
+
36
+ - Requires the Crossmark browser extension.
37
+ - Availability checks require the SDK install signal and `signInAndWait`.
38
+ - `connect()` uses Crossmark sign-in and returns the selected XRPL account.
39
+ - `restoreSession()` is passive-only. It reads the current SDK address from `sync.getAddress()` or the SDK session snapshot and restores only when it matches the stored session address.
40
+ - `restoreSession()` never calls `signInAndWait()` because sign-in opens an interactive wallet flow.
41
+ - `signAndSubmit()` chooses the Crossmark method by `methodHint` and normalizes transaction results with `normalizeTxResult()`.
42
+ - Provider-specific errors should still surface as rejected/canceled/timeout messages so the UI can recover cleanly.
43
+
44
+ ## Auto Reconnect
45
+
46
+ Crossmark restore uses SDK state that is already available after reload. The adapter first checks `sync.getAddress()`, then falls back to the SDK session snapshot address. If neither address exists, or the address differs from the stored session, restore returns `null`.
47
+
48
+ This keeps Crossmark aligned with the core adapter contract: core manages storage and events, while the adapter proves whether the current wallet provider still owns the stored account. Interactive sign-in remains part of `connect()`, not `restoreSession()`.
49
+
50
+ ## Testing
51
+
52
+ Pass a mock provider for isolated tests:
53
+
54
+ ```ts
55
+ import { assertWalletAdapter } from "@xrpl-wallet-kit/core";
56
+ import { createCrossmarkAdapter } from "@xrpl-wallet-kit/adapter-crossmark";
57
+
58
+ assertWalletAdapter(createCrossmarkAdapter({ provider: mockCrossmark }));
59
+ ```
60
+
61
+ ## Links
62
+
63
+ - Crossmark: https://crossmark.io
64
+ - XRPL Wallet Kit: https://github.com/XRPDomains/xrpl-wallet-kit
@@ -0,0 +1,94 @@
1
+ import { BaseWalletAdapter } from "@xrpl-wallet-kit/core";
2
+ import type { ConnectOptions, SignAndSubmitRequest, SignMessageRequest, WalletCapabilities, WalletMetadata, WalletSession } from "@xrpl-wallet-kit/core";
3
+ export declare const CROSSMARK_ICON = "data:image/png;base64,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";
4
+ export interface CrossmarkProvider {
5
+ sync?: {
6
+ isInstalled(): boolean | undefined;
7
+ isConnected?: () => boolean | undefined;
8
+ getAddress?: () => string | undefined;
9
+ getNetwork?: () => unknown;
10
+ };
11
+ session?: {
12
+ address?: string;
13
+ };
14
+ methods?: {
15
+ signInAndWait?: (hex?: string) => Promise<{
16
+ response?: {
17
+ data?: unknown;
18
+ } | null;
19
+ } | null>;
20
+ signAndSubmitAndWait?: (tx: unknown) => Promise<unknown>;
21
+ };
22
+ }
23
+ export interface CrossmarkAdapterOptions {
24
+ provider?: CrossmarkProvider;
25
+ }
26
+ export declare class CrossmarkAdapter extends BaseWalletAdapter {
27
+ private options;
28
+ metadata: WalletMetadata;
29
+ capabilities: WalletCapabilities;
30
+ constructor(options?: CrossmarkAdapterOptions);
31
+ isAvailable(): boolean;
32
+ connect(options: ConnectOptions): Promise<{
33
+ account: {
34
+ address: string;
35
+ publicKey: string | undefined;
36
+ network: import("@xrpl-wallet-kit/core").WalletNetwork | undefined;
37
+ networkType: "MAINNET" | "TESTNET" | "DEVNET" | "CUSTOM" | undefined;
38
+ };
39
+ raw: {
40
+ response?: {
41
+ data?: unknown;
42
+ } | null;
43
+ } | null;
44
+ }>;
45
+ restoreSession(session: WalletSession): Promise<{
46
+ account: {
47
+ address: string;
48
+ publicKey?: string;
49
+ network?: import("@xrpl-wallet-kit/core").WalletNetwork;
50
+ networkType?: string;
51
+ activationStatus?: "active" | "unfunded" | "unknown";
52
+ };
53
+ session: {
54
+ account: {
55
+ address: string;
56
+ publicKey?: string;
57
+ network?: import("@xrpl-wallet-kit/core").WalletNetwork;
58
+ networkType?: string;
59
+ activationStatus?: "active" | "unfunded" | "unknown";
60
+ };
61
+ adapterId: string;
62
+ wallet?: WalletMetadata;
63
+ connectedAt: number;
64
+ expiresAt?: number;
65
+ balance?: import("@xrpl-wallet-kit/core").WalletSessionBalance;
66
+ metadata?: Record<string, unknown>;
67
+ };
68
+ raw: {
69
+ address: string;
70
+ network: unknown;
71
+ };
72
+ } | null>;
73
+ signMessage(request: SignMessageRequest): Promise<{
74
+ signatureKind: "signature";
75
+ proof: string;
76
+ signature: string;
77
+ publicKey: string | undefined;
78
+ raw: {
79
+ response?: {
80
+ data?: unknown;
81
+ } | null;
82
+ } | null;
83
+ }>;
84
+ signAndSubmit(request: SignAndSubmitRequest): Promise<import("@xrpl-wallet-kit/core").TxResult>;
85
+ private getProvider;
86
+ private hasInjectedProvider;
87
+ private requireMethod;
88
+ private resolvePassiveAddress;
89
+ private resolvePassiveNetwork;
90
+ private randomHex;
91
+ private pickString;
92
+ }
93
+ export declare function createCrossmarkAdapter(options?: CrossmarkAdapterOptions): CrossmarkAdapter;
94
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAA6D,MAAM,uBAAuB,CAAC;AACrH,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEzJ,eAAO,MAAM,cAAc,+gWAA+gW,CAAC;AAE3iW,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE;QACL,WAAW,IAAI,OAAO,GAAG,SAAS,CAAC;QACnC,WAAW,CAAC,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC;QACxC,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;QACtC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;KAC5B,CAAC;IACF,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,QAAQ,CAAC,EAAE;gBAAE,IAAI,CAAC,EAAE,OAAO,CAAA;aAAE,GAAG,IAAI,CAAA;SAAE,GAAG,IAAI,CAAC,CAAC;QAC3F,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC1D,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAKD,qBAAa,gBAAiB,SAAQ,iBAAiB;IAIzC,OAAO,CAAC,OAAO;IAH3B,QAAQ,EAAE,cAAc,CAAwG;IAChI,YAAY,EAAE,kBAAkB,CAA8F;gBAE1G,OAAO,GAAE,uBAA4B;IAEzD,WAAW,IAAI,OAAO;IAKhB,OAAO,CAAC,OAAO,EAAE,cAAc;;;;;;;;uBAvBoB;gBAAE,IAAI,CAAC,EAAE,OAAO,CAAA;aAAE,GAAG,IAAI;;;IAgC5E,cAAc,CAAC,OAAO,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAYrC,WAAW,CAAC,OAAO,EAAE,kBAAkB;;;;;;uBA5CY;gBAAE,IAAI,CAAC,EAAE,OAAO,CAAA;aAAE,GAAG,IAAI;;;IA8E5E,aAAa,CAAC,OAAO,EAAE,oBAAoB;IAKjD,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,UAAU;CAInB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,uBAAuB,oBAA2C"}
package/dist/index.js ADDED
@@ -0,0 +1,126 @@
1
+ import CrossmarkSdk from "@crossmarkio/sdk";
2
+ import { BaseWalletAdapter, createWalletError, normalizeTxResult, pickPath, utf8ToHex } from "@xrpl-wallet-kit/core";
3
+ export const CROSSMARK_ICON = "data:image/png;base64,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";
4
+ export class CrossmarkAdapter extends BaseWalletAdapter {
5
+ constructor(options = {}) {
6
+ super();
7
+ this.options = options;
8
+ this.metadata = { id: "crossmark", name: "Crossmark", type: "extension", group: "Extensions", icon: CROSSMARK_ICON };
9
+ this.capabilities = { connect: true, signMessage: true, signAndSubmit: true, nftOffers: true, payments: true };
10
+ }
11
+ isAvailable() {
12
+ const provider = this.getProvider(false);
13
+ return Boolean(provider?.sync?.isInstalled?.() && provider.methods?.signInAndWait);
14
+ }
15
+ async connect(options) {
16
+ const signInAndWait = this.requireMethod("signInAndWait");
17
+ const result = await signInAndWait(this.randomHex());
18
+ const address = this.pickString(result, ["response.data.address", "response.address", "address"]);
19
+ if (!address)
20
+ throw new Error("Crossmark did not return an XRPL address");
21
+ const publicKey = this.pickString(result, ["response.data.publicKey", "response.data.public_key", "response.publicKey", "publicKey"]);
22
+ return { account: { address, publicKey, network: options.network, networkType: options.network?.networkType }, raw: result };
23
+ }
24
+ async restoreSession(session) {
25
+ if (!await this.waitForAvailability(this.hasInjectedProvider() ? 0 : 2500))
26
+ return null;
27
+ const provider = this.getProvider(false);
28
+ const address = this.resolvePassiveAddress(provider);
29
+ if (!address || address !== session.account.address)
30
+ return null;
31
+ return {
32
+ account: { ...session.account, address },
33
+ session: { ...session, account: { ...session.account, address } },
34
+ raw: { address, network: this.resolvePassiveNetwork(provider) }
35
+ };
36
+ }
37
+ async signMessage(request) {
38
+ const signInAndWait = this.requireMethod("signInAndWait");
39
+ const result = await signInAndWait(utf8ToHex(request.message));
40
+ const signature = this.pickString(result, [
41
+ "response.data.signature",
42
+ "response.data.signedMessage",
43
+ "response.data.signed_message",
44
+ "response.data.resp.signature",
45
+ "response.data.resp.signedMessage",
46
+ "response.signature",
47
+ "response.signedMessage",
48
+ "signature",
49
+ "signedMessage"
50
+ ]);
51
+ if (typeof signature !== "string" || !signature)
52
+ throw createWalletError.signRejected(result);
53
+ const publicKey = this.pickString(result, [
54
+ "response.data.publicKey",
55
+ "response.data.public_key",
56
+ "response.data.resp.publicKey",
57
+ "response.data.resp.public_key",
58
+ "response.publicKey",
59
+ "response.public_key",
60
+ "publicKey",
61
+ "public_key"
62
+ ]);
63
+ return {
64
+ signatureKind: "signature",
65
+ proof: signature,
66
+ signature,
67
+ publicKey: publicKey ?? request.account?.publicKey,
68
+ raw: result
69
+ };
70
+ }
71
+ async signAndSubmit(request) {
72
+ const signAndSubmitAndWait = this.requireMethod("signAndSubmitAndWait");
73
+ return normalizeTxResult(await signAndSubmitAndWait(request.txJson));
74
+ }
75
+ getProvider(required = true) {
76
+ const provider = this.options.provider ?? CrossmarkSdk;
77
+ if (!provider && required)
78
+ throw new Error("Please install Crossmark Extension");
79
+ return provider;
80
+ }
81
+ hasInjectedProvider() {
82
+ return Object.prototype.hasOwnProperty.call(this.options, "provider");
83
+ }
84
+ requireMethod(method) {
85
+ const provider = this.getProvider();
86
+ const handler = provider?.methods?.[method];
87
+ if (typeof handler !== "function")
88
+ throw new Error(`Crossmark provider is missing ${String(method)}()`);
89
+ return handler;
90
+ }
91
+ resolvePassiveAddress(provider) {
92
+ try {
93
+ const address = provider?.sync?.getAddress?.();
94
+ if (address)
95
+ return address;
96
+ }
97
+ catch {
98
+ // Fall back to the SDK session snapshot below.
99
+ }
100
+ return provider?.session?.address;
101
+ }
102
+ resolvePassiveNetwork(provider) {
103
+ try {
104
+ return provider?.sync?.getNetwork?.();
105
+ }
106
+ catch {
107
+ return undefined;
108
+ }
109
+ }
110
+ randomHex() {
111
+ const bytes = new Uint8Array(32);
112
+ if (globalThis.crypto?.getRandomValues) {
113
+ globalThis.crypto.getRandomValues(bytes);
114
+ }
115
+ else {
116
+ for (let index = 0; index < bytes.length; index += 1)
117
+ bytes[index] = Math.floor(Math.random() * 256);
118
+ }
119
+ return [...bytes].map((byte) => byte.toString(16).padStart(2, "0")).join("");
120
+ }
121
+ pickString(source, paths) {
122
+ const value = pickPath(source, paths);
123
+ return typeof value === "string" && value.trim() ? value : undefined;
124
+ }
125
+ }
126
+ export function createCrossmarkAdapter(options) { return new CrossmarkAdapter(options); }
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@xrpl-wallet-kit/adapter-crossmark",
3
+ "version": "0.1.0",
4
+ "description": "Crossmark adapter for XRPL Wallet Kit.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc -p tsconfig.json"
21
+ },
22
+ "dependencies": {
23
+ "@crossmarkio/sdk": "^0.4.0",
24
+ "@xrpl-wallet-kit/core": "0.1.0"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/XRPDomains/xrpl-wallet-kit.git"
32
+ },
33
+ "homepage": "https://github.com/XRPDomains/xrpl-wallet-kit#readme",
34
+ "bugs": {
35
+ "url": "https://github.com/XRPDomains/xrpl-wallet-kit/issues"
36
+ },
37
+ "keywords": [
38
+ "xrpl",
39
+ "wallet",
40
+ "wallet-adapter",
41
+ "wallet-kit",
42
+ "xrp-ledger",
43
+ "web3",
44
+ "adapter"
45
+ ]
46
+ }