@farcaster/frame-core 0.0.35 → 0.0.36
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/dist/actions/{AddFrame.d.ts → AddMiniApp.d.ts} +10 -10
- package/dist/actions/{AddFrame.js → AddMiniApp.js} +2 -2
- package/dist/actions/index.d.ts +1 -1
- package/dist/actions/index.js +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/solana.d.ts +25 -4
- package/dist/solana.js +3 -1
- package/dist/solanaWire.d.ts +3 -0
- package/dist/solanaWire.js +83 -0
- package/dist/types.d.ts +10 -6
- package/esm/actions/{AddFrame.d.ts → AddMiniApp.d.ts} +10 -10
- package/esm/actions/{AddFrame.js → AddMiniApp.js} +2 -2
- package/esm/actions/index.d.ts +1 -1
- package/esm/actions/index.js +1 -1
- package/esm/index.d.ts +1 -0
- package/esm/index.js +1 -0
- package/esm/solana.d.ts +25 -4
- package/esm/solana.js +2 -0
- package/esm/solanaWire.d.ts +3 -0
- package/esm/solanaWire.js +79 -0
- package/esm/tsconfig.tsbuildinfo +1 -1
- package/esm/types.d.ts +10 -6
- package/package.json +1 -1
- package/src/actions/{AddFrame.ts → AddMiniApp.ts} +9 -9
- package/src/actions/index.ts +1 -1
- package/src/index.ts +1 -0
- package/src/solana.ts +34 -8
- package/src/solanaWire.ts +118 -0
- package/src/types.ts +25 -6
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
import * as Errors from '../errors';
|
|
2
2
|
import type { OneOf } from '../internal/types';
|
|
3
3
|
import type { FrameNotificationDetails } from '../schemas';
|
|
4
|
-
export type
|
|
4
|
+
export type AddMiniAppResult = {
|
|
5
5
|
notificationDetails?: FrameNotificationDetails;
|
|
6
6
|
};
|
|
7
|
-
export type
|
|
7
|
+
export type AddMiniApp = () => Promise<AddMiniAppResult>;
|
|
8
8
|
type InvalidDomainManifestJsonError = {
|
|
9
9
|
type: 'invalid_domain_manifest';
|
|
10
10
|
};
|
|
11
11
|
type RejectedByUserJsonError = {
|
|
12
12
|
type: 'rejected_by_user';
|
|
13
13
|
};
|
|
14
|
-
export type
|
|
15
|
-
export type
|
|
16
|
-
export type
|
|
17
|
-
result:
|
|
14
|
+
export type AddMiniAppJsonError = InvalidDomainManifestJsonError | RejectedByUserJsonError;
|
|
15
|
+
export type AddMiniAppRejectedReason = AddMiniAppJsonError['type'];
|
|
16
|
+
export type AddMiniAppJsonResult = OneOf<{
|
|
17
|
+
result: AddMiniAppResult;
|
|
18
18
|
} | {
|
|
19
|
-
error:
|
|
19
|
+
error: AddMiniAppJsonError;
|
|
20
20
|
}>;
|
|
21
|
-
export type
|
|
21
|
+
export type WireAddMiniApp = () => Promise<AddMiniAppJsonResult>;
|
|
22
22
|
/**
|
|
23
23
|
* Thrown when the frame does not have a valid domain manifest.
|
|
24
24
|
*/
|
|
25
25
|
export declare class InvalidDomainManifest extends Errors.BaseError {
|
|
26
|
-
readonly name = "
|
|
26
|
+
readonly name = "AddMiniApp.InvalidDomainManifest";
|
|
27
27
|
constructor();
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
30
|
* Thrown when add frame action was rejected by the user.
|
|
31
31
|
*/
|
|
32
32
|
export declare class RejectedByUser extends Errors.BaseError {
|
|
33
|
-
readonly name = "
|
|
33
|
+
readonly name = "AddMiniApp.RejectedByUser";
|
|
34
34
|
constructor();
|
|
35
35
|
}
|
|
36
36
|
export {};
|
|
@@ -39,7 +39,7 @@ const Errors = __importStar(require("../errors"));
|
|
|
39
39
|
* Thrown when the frame does not have a valid domain manifest.
|
|
40
40
|
*/
|
|
41
41
|
class InvalidDomainManifest extends Errors.BaseError {
|
|
42
|
-
name = '
|
|
42
|
+
name = 'AddMiniApp.InvalidDomainManifest';
|
|
43
43
|
constructor() {
|
|
44
44
|
super('Invalid domain manifest');
|
|
45
45
|
}
|
|
@@ -49,7 +49,7 @@ exports.InvalidDomainManifest = InvalidDomainManifest;
|
|
|
49
49
|
* Thrown when add frame action was rejected by the user.
|
|
50
50
|
*/
|
|
51
51
|
class RejectedByUser extends Errors.BaseError {
|
|
52
|
-
name = '
|
|
52
|
+
name = 'AddMiniApp.RejectedByUser';
|
|
53
53
|
constructor() {
|
|
54
54
|
super('Add frame rejected by user');
|
|
55
55
|
}
|
package/dist/actions/index.d.ts
CHANGED
package/dist/actions/index.js
CHANGED
|
@@ -33,8 +33,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.ViewToken = exports.ViewProfile = exports.SwapToken = exports.SendToken = exports.SignIn = exports.Ready = exports.ComposeCast = exports.
|
|
37
|
-
exports.
|
|
36
|
+
exports.ViewToken = exports.ViewProfile = exports.SwapToken = exports.SendToken = exports.SignIn = exports.Ready = exports.ComposeCast = exports.AddMiniApp = void 0;
|
|
37
|
+
exports.AddMiniApp = __importStar(require("./AddMiniApp"));
|
|
38
38
|
exports.ComposeCast = __importStar(require("./ComposeCast"));
|
|
39
39
|
exports.Ready = __importStar(require("./Ready"));
|
|
40
40
|
exports.SignIn = __importStar(require("./SignIn"));
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/solana.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
export
|
|
1
|
+
import { Connection as SolanaConnection, type SendOptions as SolanaSendOptions, type Transaction as SolanaTransaction, type VersionedTransaction as SolanaVersionedTransaction } from '@solana/web3.js';
|
|
2
|
+
export { SolanaConnection };
|
|
3
|
+
export type { SolanaSendOptions };
|
|
3
4
|
export type SolanaCombinedTransaction = SolanaTransaction | SolanaVersionedTransaction;
|
|
4
5
|
export type SolanaConnectRequestArguments = {
|
|
5
6
|
method: 'connect';
|
|
@@ -14,7 +15,6 @@ export type SolanaSignAndSendTransactionRequestArguments = {
|
|
|
14
15
|
method: 'signAndSendTransaction';
|
|
15
16
|
params: {
|
|
16
17
|
transaction: SolanaCombinedTransaction;
|
|
17
|
-
connection: SolanaConnection;
|
|
18
18
|
options?: SolanaSendOptions;
|
|
19
19
|
};
|
|
20
20
|
};
|
|
@@ -43,9 +43,30 @@ export interface SolanaWalletProvider {
|
|
|
43
43
|
}>;
|
|
44
44
|
signAndSendTransaction(input: {
|
|
45
45
|
transaction: SolanaCombinedTransaction;
|
|
46
|
-
connection: SolanaConnection;
|
|
47
46
|
}): Promise<{
|
|
48
47
|
signature: string;
|
|
49
48
|
}>;
|
|
50
49
|
}
|
|
51
50
|
export declare const createSolanaWalletProvider: (request: SolanaRequestFn) => SolanaWalletProvider;
|
|
51
|
+
export type SolanaWireSignAndSendTransactionRequestArguments = {
|
|
52
|
+
method: 'signAndSendTransaction';
|
|
53
|
+
params: {
|
|
54
|
+
transaction: string;
|
|
55
|
+
options?: SolanaSendOptions;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
export type SolanaWireSignTransactionRequestArguments = {
|
|
59
|
+
method: 'signTransaction';
|
|
60
|
+
params: {
|
|
61
|
+
transaction: string;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
export type SolanaWireRequestFn = ((request: SolanaConnectRequestArguments) => Promise<{
|
|
65
|
+
publicKey: string;
|
|
66
|
+
}>) & ((request: SolanaSignMessageRequestArguments) => Promise<{
|
|
67
|
+
signature: string;
|
|
68
|
+
}>) & ((request: SolanaWireSignAndSendTransactionRequestArguments) => Promise<{
|
|
69
|
+
signature: string;
|
|
70
|
+
}>) & ((request: SolanaWireSignTransactionRequestArguments) => Promise<{
|
|
71
|
+
signedTransaction: string;
|
|
72
|
+
}>);
|
package/dist/solana.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createSolanaWalletProvider = void 0;
|
|
3
|
+
exports.createSolanaWalletProvider = exports.SolanaConnection = void 0;
|
|
4
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
5
|
+
Object.defineProperty(exports, "SolanaConnection", { enumerable: true, get: function () { return web3_js_1.Connection; } });
|
|
4
6
|
const createSolanaWalletProvider = (request) => ({
|
|
5
7
|
request,
|
|
6
8
|
signMessage: (msg) => request({ method: 'signMessage', params: { message: msg } }),
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { SolanaRequestFn, SolanaWireRequestFn } from './solana';
|
|
2
|
+
export declare function wrapSolanaProviderRequest(requestFn: SolanaRequestFn): SolanaWireRequestFn;
|
|
3
|
+
export declare function unwrapSolanaProviderRequest(wrappedRequestFn: SolanaWireRequestFn): SolanaRequestFn;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wrapSolanaProviderRequest = wrapSolanaProviderRequest;
|
|
4
|
+
exports.unwrapSolanaProviderRequest = unwrapSolanaProviderRequest;
|
|
5
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
6
|
+
function serializeTransaction(transaction) {
|
|
7
|
+
return Buffer.from(transaction.serialize({
|
|
8
|
+
verifySignatures: false,
|
|
9
|
+
})).toString('base64');
|
|
10
|
+
}
|
|
11
|
+
function unserializeTransaction(transaction) {
|
|
12
|
+
const bytes = Uint8Array.from(Buffer.from(transaction, 'base64'));
|
|
13
|
+
return (bytes[0] & 0x80) !== 0
|
|
14
|
+
? web3_js_1.VersionedTransaction.deserialize(bytes)
|
|
15
|
+
: web3_js_1.Transaction.from(bytes);
|
|
16
|
+
}
|
|
17
|
+
function wrapSolanaProviderRequest(requestFn) {
|
|
18
|
+
const wrappedFn = async (request) => {
|
|
19
|
+
if (request.method === 'connect') {
|
|
20
|
+
return await requestFn(request);
|
|
21
|
+
}
|
|
22
|
+
if (request.method === 'signMessage') {
|
|
23
|
+
return await requestFn(request);
|
|
24
|
+
}
|
|
25
|
+
if (request.method === 'signAndSendTransaction') {
|
|
26
|
+
const { transaction, options } = request.params;
|
|
27
|
+
const params = {
|
|
28
|
+
transaction: unserializeTransaction(transaction),
|
|
29
|
+
options,
|
|
30
|
+
};
|
|
31
|
+
return await requestFn({
|
|
32
|
+
method: 'signAndSendTransaction',
|
|
33
|
+
params,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
if (request.method === 'signTransaction') {
|
|
37
|
+
const { transaction } = request.params;
|
|
38
|
+
const params = {
|
|
39
|
+
transaction: unserializeTransaction(transaction),
|
|
40
|
+
};
|
|
41
|
+
const { signedTransaction } = await requestFn({
|
|
42
|
+
method: 'signTransaction',
|
|
43
|
+
params,
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
signedTransaction: serializeTransaction(signedTransaction),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
return wrappedFn;
|
|
51
|
+
}
|
|
52
|
+
function unwrapSolanaProviderRequest(wrappedRequestFn) {
|
|
53
|
+
const unwrappedFn = async (request) => {
|
|
54
|
+
if (request.method === 'connect') {
|
|
55
|
+
return await wrappedRequestFn(request);
|
|
56
|
+
}
|
|
57
|
+
if (request.method === 'signMessage') {
|
|
58
|
+
return await wrappedRequestFn(request);
|
|
59
|
+
}
|
|
60
|
+
if (request.method === 'signAndSendTransaction') {
|
|
61
|
+
const { transaction, options } = request.params;
|
|
62
|
+
const params = {
|
|
63
|
+
transaction: serializeTransaction(transaction),
|
|
64
|
+
};
|
|
65
|
+
return await wrappedRequestFn({
|
|
66
|
+
method: 'signAndSendTransaction',
|
|
67
|
+
params,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
if (request.method === 'signTransaction') {
|
|
71
|
+
const { transaction } = request.params;
|
|
72
|
+
const params = {
|
|
73
|
+
transaction: serializeTransaction(transaction),
|
|
74
|
+
};
|
|
75
|
+
const { signedTransaction } = await wrappedRequestFn({
|
|
76
|
+
method: 'signTransaction',
|
|
77
|
+
params,
|
|
78
|
+
});
|
|
79
|
+
return { signedTransaction: unserializeTransaction(signedTransaction) };
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
return unwrappedFn;
|
|
83
|
+
}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AddMiniApp, ComposeCast, Ready, SendToken, SignIn, SwapToken, ViewProfile, ViewToken } from './actions';
|
|
2
2
|
import type { FrameContext } from './context';
|
|
3
3
|
import type { EventFrameAdded, EventFrameRemoved, EventNotificationsDisabled, EventNotificationsEnabled } from './schemas';
|
|
4
|
-
import type { SolanaRequestFn } from './solana';
|
|
4
|
+
import type { SolanaRequestFn, SolanaWireRequestFn } from './solana';
|
|
5
5
|
import type { Ethereum } from './wallet';
|
|
6
6
|
export type SetPrimaryButtonOptions = {
|
|
7
7
|
text: string;
|
|
@@ -13,6 +13,8 @@ export * from './wallet/ethereum';
|
|
|
13
13
|
export { DEFAULT_READY_OPTIONS, ReadyOptions } from './actions/Ready';
|
|
14
14
|
export type SignInOptions = SignIn.SignInOptions;
|
|
15
15
|
export type SetPrimaryButton = (options: SetPrimaryButtonOptions) => void;
|
|
16
|
+
export type MiniAppHostCapability = 'wallet.getEvmProvider' | 'wallet.getSolanaProvider' | 'actions.ready' | 'actions.openUrl' | 'actions.close' | 'actions.setPrimaryButton' | 'actions.addMiniApp' | 'actions.signIn' | 'actions.viewProfile' | 'actions.composeCast' | 'actions.viewToken' | 'actions.sendToken' | 'actions.swapToken';
|
|
17
|
+
export type GetCapabilities = () => Promise<MiniAppHostCapability[]>;
|
|
16
18
|
export type WireFrameHost = {
|
|
17
19
|
context: FrameContext;
|
|
18
20
|
close: () => void;
|
|
@@ -23,13 +25,14 @@ export type WireFrameHost = {
|
|
|
23
25
|
ethProviderRequest: Ethereum.EthProvideRequest;
|
|
24
26
|
ethProviderRequestV2: Ethereum.RpcTransport;
|
|
25
27
|
eip6963RequestProvider: () => void;
|
|
26
|
-
solanaProviderRequest?:
|
|
27
|
-
addFrame:
|
|
28
|
+
solanaProviderRequest?: SolanaWireRequestFn;
|
|
29
|
+
addFrame: AddMiniApp.WireAddMiniApp;
|
|
28
30
|
viewProfile: ViewProfile.ViewProfile;
|
|
29
31
|
viewToken: ViewToken.ViewToken;
|
|
30
32
|
sendToken: SendToken.SendToken;
|
|
31
33
|
swapToken: SwapToken.SwapToken;
|
|
32
34
|
composeCast: <close extends boolean | undefined = undefined>(options: ComposeCast.Options<close>) => Promise<ComposeCast.Result<close>>;
|
|
35
|
+
getCapabilities: GetCapabilities;
|
|
33
36
|
};
|
|
34
37
|
export type FrameHost = {
|
|
35
38
|
context: FrameContext;
|
|
@@ -46,16 +49,17 @@ export type FrameHost = {
|
|
|
46
49
|
*/
|
|
47
50
|
eip6963RequestProvider: () => void;
|
|
48
51
|
solanaProviderRequest?: SolanaRequestFn;
|
|
49
|
-
addFrame:
|
|
52
|
+
addFrame: AddMiniApp.AddMiniApp;
|
|
50
53
|
viewProfile: ViewProfile.ViewProfile;
|
|
51
54
|
viewToken: ViewToken.ViewToken;
|
|
52
55
|
sendToken: SendToken.SendToken;
|
|
53
56
|
swapToken: SwapToken.SwapToken;
|
|
54
57
|
composeCast: <close extends boolean | undefined = undefined>(options: ComposeCast.Options<close>) => Promise<ComposeCast.Result<close>>;
|
|
58
|
+
getCapabilities: GetCapabilities;
|
|
55
59
|
};
|
|
56
60
|
export type EventFrameAddRejected = {
|
|
57
61
|
event: 'frame_add_rejected';
|
|
58
|
-
reason:
|
|
62
|
+
reason: AddMiniApp.AddMiniAppRejectedReason;
|
|
59
63
|
};
|
|
60
64
|
export type EventPrimaryButtonClicked = {
|
|
61
65
|
event: 'primary_button_clicked';
|
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
import * as Errors from '../errors';
|
|
2
2
|
import type { OneOf } from '../internal/types';
|
|
3
3
|
import type { FrameNotificationDetails } from '../schemas';
|
|
4
|
-
export type
|
|
4
|
+
export type AddMiniAppResult = {
|
|
5
5
|
notificationDetails?: FrameNotificationDetails;
|
|
6
6
|
};
|
|
7
|
-
export type
|
|
7
|
+
export type AddMiniApp = () => Promise<AddMiniAppResult>;
|
|
8
8
|
type InvalidDomainManifestJsonError = {
|
|
9
9
|
type: 'invalid_domain_manifest';
|
|
10
10
|
};
|
|
11
11
|
type RejectedByUserJsonError = {
|
|
12
12
|
type: 'rejected_by_user';
|
|
13
13
|
};
|
|
14
|
-
export type
|
|
15
|
-
export type
|
|
16
|
-
export type
|
|
17
|
-
result:
|
|
14
|
+
export type AddMiniAppJsonError = InvalidDomainManifestJsonError | RejectedByUserJsonError;
|
|
15
|
+
export type AddMiniAppRejectedReason = AddMiniAppJsonError['type'];
|
|
16
|
+
export type AddMiniAppJsonResult = OneOf<{
|
|
17
|
+
result: AddMiniAppResult;
|
|
18
18
|
} | {
|
|
19
|
-
error:
|
|
19
|
+
error: AddMiniAppJsonError;
|
|
20
20
|
}>;
|
|
21
|
-
export type
|
|
21
|
+
export type WireAddMiniApp = () => Promise<AddMiniAppJsonResult>;
|
|
22
22
|
/**
|
|
23
23
|
* Thrown when the frame does not have a valid domain manifest.
|
|
24
24
|
*/
|
|
25
25
|
export declare class InvalidDomainManifest extends Errors.BaseError {
|
|
26
|
-
readonly name = "
|
|
26
|
+
readonly name = "AddMiniApp.InvalidDomainManifest";
|
|
27
27
|
constructor();
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
30
|
* Thrown when add frame action was rejected by the user.
|
|
31
31
|
*/
|
|
32
32
|
export declare class RejectedByUser extends Errors.BaseError {
|
|
33
|
-
readonly name = "
|
|
33
|
+
readonly name = "AddMiniApp.RejectedByUser";
|
|
34
34
|
constructor();
|
|
35
35
|
}
|
|
36
36
|
export {};
|
|
@@ -3,7 +3,7 @@ import * as Errors from '../errors';
|
|
|
3
3
|
* Thrown when the frame does not have a valid domain manifest.
|
|
4
4
|
*/
|
|
5
5
|
export class InvalidDomainManifest extends Errors.BaseError {
|
|
6
|
-
name = '
|
|
6
|
+
name = 'AddMiniApp.InvalidDomainManifest';
|
|
7
7
|
constructor() {
|
|
8
8
|
super('Invalid domain manifest');
|
|
9
9
|
}
|
|
@@ -12,7 +12,7 @@ export class InvalidDomainManifest extends Errors.BaseError {
|
|
|
12
12
|
* Thrown when add frame action was rejected by the user.
|
|
13
13
|
*/
|
|
14
14
|
export class RejectedByUser extends Errors.BaseError {
|
|
15
|
-
name = '
|
|
15
|
+
name = 'AddMiniApp.RejectedByUser';
|
|
16
16
|
constructor() {
|
|
17
17
|
super('Add frame rejected by user');
|
|
18
18
|
}
|
package/esm/actions/index.d.ts
CHANGED
package/esm/actions/index.js
CHANGED
package/esm/index.d.ts
CHANGED
package/esm/index.js
CHANGED
package/esm/solana.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
export
|
|
1
|
+
import { Connection as SolanaConnection, type SendOptions as SolanaSendOptions, type Transaction as SolanaTransaction, type VersionedTransaction as SolanaVersionedTransaction } from '@solana/web3.js';
|
|
2
|
+
export { SolanaConnection };
|
|
3
|
+
export type { SolanaSendOptions };
|
|
3
4
|
export type SolanaCombinedTransaction = SolanaTransaction | SolanaVersionedTransaction;
|
|
4
5
|
export type SolanaConnectRequestArguments = {
|
|
5
6
|
method: 'connect';
|
|
@@ -14,7 +15,6 @@ export type SolanaSignAndSendTransactionRequestArguments = {
|
|
|
14
15
|
method: 'signAndSendTransaction';
|
|
15
16
|
params: {
|
|
16
17
|
transaction: SolanaCombinedTransaction;
|
|
17
|
-
connection: SolanaConnection;
|
|
18
18
|
options?: SolanaSendOptions;
|
|
19
19
|
};
|
|
20
20
|
};
|
|
@@ -43,9 +43,30 @@ export interface SolanaWalletProvider {
|
|
|
43
43
|
}>;
|
|
44
44
|
signAndSendTransaction(input: {
|
|
45
45
|
transaction: SolanaCombinedTransaction;
|
|
46
|
-
connection: SolanaConnection;
|
|
47
46
|
}): Promise<{
|
|
48
47
|
signature: string;
|
|
49
48
|
}>;
|
|
50
49
|
}
|
|
51
50
|
export declare const createSolanaWalletProvider: (request: SolanaRequestFn) => SolanaWalletProvider;
|
|
51
|
+
export type SolanaWireSignAndSendTransactionRequestArguments = {
|
|
52
|
+
method: 'signAndSendTransaction';
|
|
53
|
+
params: {
|
|
54
|
+
transaction: string;
|
|
55
|
+
options?: SolanaSendOptions;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
export type SolanaWireSignTransactionRequestArguments = {
|
|
59
|
+
method: 'signTransaction';
|
|
60
|
+
params: {
|
|
61
|
+
transaction: string;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
export type SolanaWireRequestFn = ((request: SolanaConnectRequestArguments) => Promise<{
|
|
65
|
+
publicKey: string;
|
|
66
|
+
}>) & ((request: SolanaSignMessageRequestArguments) => Promise<{
|
|
67
|
+
signature: string;
|
|
68
|
+
}>) & ((request: SolanaWireSignAndSendTransactionRequestArguments) => Promise<{
|
|
69
|
+
signature: string;
|
|
70
|
+
}>) & ((request: SolanaWireSignTransactionRequestArguments) => Promise<{
|
|
71
|
+
signedTransaction: string;
|
|
72
|
+
}>);
|
package/esm/solana.js
CHANGED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { SolanaRequestFn, SolanaWireRequestFn } from './solana';
|
|
2
|
+
export declare function wrapSolanaProviderRequest(requestFn: SolanaRequestFn): SolanaWireRequestFn;
|
|
3
|
+
export declare function unwrapSolanaProviderRequest(wrappedRequestFn: SolanaWireRequestFn): SolanaRequestFn;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Transaction as SolanaTransaction, VersionedTransaction as SolanaVersionedTransaction, } from '@solana/web3.js';
|
|
2
|
+
function serializeTransaction(transaction) {
|
|
3
|
+
return Buffer.from(transaction.serialize({
|
|
4
|
+
verifySignatures: false,
|
|
5
|
+
})).toString('base64');
|
|
6
|
+
}
|
|
7
|
+
function unserializeTransaction(transaction) {
|
|
8
|
+
const bytes = Uint8Array.from(Buffer.from(transaction, 'base64'));
|
|
9
|
+
return (bytes[0] & 0x80) !== 0
|
|
10
|
+
? SolanaVersionedTransaction.deserialize(bytes)
|
|
11
|
+
: SolanaTransaction.from(bytes);
|
|
12
|
+
}
|
|
13
|
+
export function wrapSolanaProviderRequest(requestFn) {
|
|
14
|
+
const wrappedFn = async (request) => {
|
|
15
|
+
if (request.method === 'connect') {
|
|
16
|
+
return await requestFn(request);
|
|
17
|
+
}
|
|
18
|
+
if (request.method === 'signMessage') {
|
|
19
|
+
return await requestFn(request);
|
|
20
|
+
}
|
|
21
|
+
if (request.method === 'signAndSendTransaction') {
|
|
22
|
+
const { transaction, options } = request.params;
|
|
23
|
+
const params = {
|
|
24
|
+
transaction: unserializeTransaction(transaction),
|
|
25
|
+
options,
|
|
26
|
+
};
|
|
27
|
+
return await requestFn({
|
|
28
|
+
method: 'signAndSendTransaction',
|
|
29
|
+
params,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
if (request.method === 'signTransaction') {
|
|
33
|
+
const { transaction } = request.params;
|
|
34
|
+
const params = {
|
|
35
|
+
transaction: unserializeTransaction(transaction),
|
|
36
|
+
};
|
|
37
|
+
const { signedTransaction } = await requestFn({
|
|
38
|
+
method: 'signTransaction',
|
|
39
|
+
params,
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
signedTransaction: serializeTransaction(signedTransaction),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
return wrappedFn;
|
|
47
|
+
}
|
|
48
|
+
export function unwrapSolanaProviderRequest(wrappedRequestFn) {
|
|
49
|
+
const unwrappedFn = async (request) => {
|
|
50
|
+
if (request.method === 'connect') {
|
|
51
|
+
return await wrappedRequestFn(request);
|
|
52
|
+
}
|
|
53
|
+
if (request.method === 'signMessage') {
|
|
54
|
+
return await wrappedRequestFn(request);
|
|
55
|
+
}
|
|
56
|
+
if (request.method === 'signAndSendTransaction') {
|
|
57
|
+
const { transaction, options } = request.params;
|
|
58
|
+
const params = {
|
|
59
|
+
transaction: serializeTransaction(transaction),
|
|
60
|
+
};
|
|
61
|
+
return await wrappedRequestFn({
|
|
62
|
+
method: 'signAndSendTransaction',
|
|
63
|
+
params,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
if (request.method === 'signTransaction') {
|
|
67
|
+
const { transaction } = request.params;
|
|
68
|
+
const params = {
|
|
69
|
+
transaction: serializeTransaction(transaction),
|
|
70
|
+
};
|
|
71
|
+
const { signedTransaction } = await wrappedRequestFn({
|
|
72
|
+
method: 'signTransaction',
|
|
73
|
+
params,
|
|
74
|
+
});
|
|
75
|
+
return { signedTransaction: unserializeTransaction(signedTransaction) };
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
return unwrappedFn;
|
|
79
|
+
}
|