@broxus/tvm-connect
Version:
TypeScript SDK for connecting to Nekoton-compatible wallets using a unified interface.
254 lines (253 loc) • 10.3 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TvmConnect = void 0;
const js_core_1 = require("@broxus/js-core");
const mobx_1 = require("mobx");
const React = __importStar(require("react"));
const ReactDOM = __importStar(require("react-dom/client"));
const react_intl_1 = require("react-intl");
const TvmConnectDialog_1 = require("../components/TvmConnectDialog");
const constants_1 = require("../constants");
const context_1 = require("../context");
const misc_1 = require("../misc");
const services_1 = require("../services");
const stores_1 = require("../stores");
const utils_1 = require("../utils");
class TvmConnect extends js_core_1.AbstractStore {
params;
name = 'TvmConnect';
_root;
_dialog;
_service;
constructor(params) {
super();
this.params = params;
const { getProviderInfo, recentMetaStorageKey, onPreconnect, ...restParams } = { ...params };
const recentMeta = (0, utils_1.getRecentConnectionMeta)(recentMetaStorageKey);
this._service = new services_1.TvmConnectService({
defaultNetworkId: recentMeta?.chainId ? Number(recentMeta.chainId) : undefined,
networks: (0, misc_1.getPredefinedNetworks)(),
providerId: restParams.providerId || (0, misc_1.getPredefinedProviderId)(recentMeta),
providers: restParams.providers || (0, misc_1.getPredefinedProviders)({ getProviderInfo, onPreconnect }),
recentMetaStorageKey,
...restParams,
});
this._dialog = new stores_1.TvmConnectDialogStore(this._service, {
popupType: params?.popupType,
recentMetaStorageKey,
});
(0, mobx_1.makeObservable)(this);
this._render();
}
getDialog() {
return this._dialog;
}
getService() {
return this._service;
}
async connect(params) {
return new Promise((resolve, reject) => {
this._dialog.connect({
...params,
onClose() {
reject(new Error('Connection cancelled. User closed the dialog.'));
},
onConnect(connector) {
resolve(connector);
},
});
});
}
async connectTo(providerConfig, params) {
return new Promise((resolve, reject) => {
this._dialog.connectTo(providerConfig, {
...params,
onClose() {
reject(new Error('Connection cancelled. User closed the dialog.'));
},
onConnect(connector) {
resolve(connector);
},
});
});
}
async disconnect(options) {
await this._service.disconnect(options);
}
async addAsset(address, type = 'tip3_token') {
return this._service.connector?.addAsset(address, type);
}
async changeAccount() {
if (!this._service.provider) {
throw new Error('Provider is not defined');
}
await this._service.provider.changeAccount();
}
async addNetwork(network, switchNetwork) {
if (!this._service.connector) {
throw new Error('Provider is not defined');
}
return this._service.connector.addNetwork(network, switchNetwork);
}
async switchNetwork(networkIdOParams) {
if (!this._service.connector) {
throw new Error('Provider is not defined');
}
return this._service.connector.switchNetwork(networkIdOParams);
}
watch(callback) {
this._watchDisposer = (0, mobx_1.reaction)(() => ({
account: (0, mobx_1.toJS)(this._service.account),
address: this._service.address,
balance: this._service.balance,
chainId: this._service.chainId,
network: this._service.network,
}), callback, { delay: 10, equals: mobx_1.comparer.shallow });
return this;
}
unwatch() {
this._watchDisposer?.();
return this;
}
_render() {
let container = document.getElementById(constants_1.CONTAINER_ID);
if (!container) {
container = document.createElement('div');
container.id = constants_1.CONTAINER_ID;
document.body.appendChild(container);
}
if (!this._root) {
this._root = ReactDOM.createRoot(container, {
identifierPrefix: 'tvm-connect',
});
}
const sharedParams = {
agreementsNote: this.params?.agreementsNote,
popupType: this.params?.popupType,
qrEnabled: this.params?.qrEnabled ?? true,
recentMetaStorageKey: this.params?.recentMetaStorageKey,
};
this._root.render(React.createElement(react_intl_1.IntlProvider, { locale: this.params?.locale || 'en' }, React.createElement(context_1.TvmConnectServiceContext.Provider, { value: this._service }, React.createElement(context_1.SharedParamsContext.Provider, { value: sharedParams }, React.createElement(context_1.TvmConnectDialogStoreContext.Provider, { value: this._dialog }, React.createElement(TvmConnectDialog_1.TvmConnectDialog, {
agreementsNote: sharedParams.agreementsNote,
popupType: sharedParams.popupType,
// eslint-disable-next-line sort-keys
onClose: this._dialog.close,
}))))));
}
_watchDisposer;
}
exports.TvmConnect = TvmConnect;
__decorate([
mobx_1.action.bound,
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", stores_1.TvmConnectDialogStore)
], TvmConnect.prototype, "getDialog", null);
__decorate([
mobx_1.action.bound,
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", services_1.TvmConnectService)
], TvmConnect.prototype, "getService", null);
__decorate([
mobx_1.action.bound,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], TvmConnect.prototype, "connect", null);
__decorate([
mobx_1.action.bound,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], TvmConnect.prototype, "connectTo", null);
__decorate([
mobx_1.action.bound,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], TvmConnect.prototype, "disconnect", null);
__decorate([
mobx_1.action.bound,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, String]),
__metadata("design:returntype", Promise)
], TvmConnect.prototype, "addAsset", null);
__decorate([
mobx_1.action.bound,
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], TvmConnect.prototype, "changeAccount", null);
__decorate([
mobx_1.action.bound,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Boolean]),
__metadata("design:returntype", Promise)
], TvmConnect.prototype, "addNetwork", null);
__decorate([
mobx_1.action.bound,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], TvmConnect.prototype, "switchNetwork", null);
__decorate([
mobx_1.action.bound,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Function]),
__metadata("design:returntype", Object)
], TvmConnect.prototype, "watch", null);
__decorate([
mobx_1.action.bound,
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Object)
], TvmConnect.prototype, "unwatch", null);
__decorate([
mobx_1.action.bound,
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], TvmConnect.prototype, "_render", null);
;