sats-connect 0.1.1 → 0.1.3

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 CHANGED
@@ -1 +1,3 @@
1
- # sats-connect
1
+ # Sats Connect
2
+
3
+ Sats connect is a simple javascript library that connects apps to Bitcoin wallets like Xverse to retrieve user wallet addresses and sign transactions (PSBTs).
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './src/address/index';
2
- export * from './src/provider/bitcoin.provider';
3
- export * from './src/auth';
2
+ export * from './src/provider';
3
+ export * from './src/call';
4
+ export * from './src/transactions/signTransaction';
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './src/address/index';
2
- export * from './src/provider/bitcoin.provider';
3
- export * from './src/auth';
2
+ export * from './src/provider';
3
+ export * from './src/call';
4
+ export * from './src/transactions/signTransaction';
4
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,oCAAoC,CAAC"}
@@ -1,3 +1,3 @@
1
1
  import { GetAddressOptions } from './types';
2
- export declare const openRequestAddressPopup: (options: GetAddressOptions) => Promise<void>;
2
+ export declare const getAddress: (options: GetAddressOptions) => Promise<void>;
3
3
  export * from './types';
@@ -34,21 +34,26 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
34
34
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
35
  }
36
36
  };
37
- export var openRequestAddressPopup = function (options) { return __awaiter(void 0, void 0, void 0, function () {
38
- var _a, message, network, purpose, provider, addressResponse, error_1;
37
+ import { createUnsecuredToken } from 'jsontokens';
38
+ export var getAddress = function (options) { return __awaiter(void 0, void 0, void 0, function () {
39
+ var _a, message, network, purposes, provider, request, addressResponse, error_1;
39
40
  var _b, _c;
40
41
  return __generator(this, function (_d) {
41
42
  switch (_d.label) {
42
43
  case 0:
43
- _a = options.payload, message = _a.message, network = _a.network, purpose = _a.purpose;
44
+ _a = options.payload, message = _a.message, network = _a.network, purposes = _a.purposes;
44
45
  provider = window.BitcoinProvider;
45
46
  if (!provider) {
46
47
  throw new Error('No Bitcoin Wallet installed');
47
48
  }
49
+ if (!purposes) {
50
+ throw new Error('Address purposes are required');
51
+ }
48
52
  _d.label = 1;
49
53
  case 1:
50
54
  _d.trys.push([1, 3, , 4]);
51
- return [4 /*yield*/, provider.getAddress(purpose, message, network)];
55
+ request = createUnsecuredToken(options.payload);
56
+ return [4 /*yield*/, provider.getAddress(request)];
52
57
  case 2:
53
58
  addressResponse = _d.sent();
54
59
  (_b = options.onFinish) === null || _b === void 0 ? void 0 : _b.call(options, addressResponse);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/address/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAM,CAAC,IAAM,uBAAuB,GAAG,UAAO,OAA0B;;;;;;gBAChE,KAAgC,OAAO,CAAC,OAAO,EAA7C,OAAO,aAAA,EAAE,OAAO,aAAA,EAAE,OAAO,aAAA,CAAqB;gBAChD,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC;gBACxC,IAAI,CAAC,QAAQ,EAAE;oBACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;iBAChD;;;;gBAEyB,qBAAM,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAA;;gBAAtE,eAAe,GAAG,SAAoD;gBAC5E,MAAA,OAAO,CAAC,QAAQ,wDAAG,eAAe,CAAC,CAAC;;;;gBAEpC,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,OAAK,CAAC,CAAC;gBAC/D,MAAA,OAAO,CAAC,QAAQ,uDAAI,CAAC;;;;;KAExB,CAAC;AAEF,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/address/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,oBAAoB,EAAQ,MAAM,YAAY,CAAC;AAGxD,MAAM,CAAC,IAAM,UAAU,GAAG,UAAO,OAA0B;;;;;;gBACnD,KAAiC,OAAO,CAAC,OAAO,EAA9C,OAAO,aAAA,EAAE,OAAO,aAAA,EAAE,QAAQ,cAAA,CAAqB;gBACjD,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC;gBACxC,IAAI,CAAC,QAAQ,EAAE;oBACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;iBAChD;gBACD,IAAG,CAAC,QAAQ,EAAE;oBACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;iBAClD;;;;gBAEO,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAA0B,CAAC,CAAC;gBACjD,qBAAM,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAA;;gBAApD,eAAe,GAAG,SAAkC;gBAC1D,MAAA,OAAO,CAAC,QAAQ,wDAAG,eAAe,CAAC,CAAC;;;;gBAEpC,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,OAAK,CAAC,CAAC;gBAC/D,MAAA,OAAO,CAAC,QAAQ,uDAAI,CAAC;;;;;KAExB,CAAC;AAEF,cAAc,SAAS,CAAC"}
@@ -1,16 +1,27 @@
1
- import { BitcoinNetwork, Purpose } from '../provider/bitcoin.provider';
2
- interface GetAddressPayload {
3
- purpose: Purpose;
1
+ import { BitcoinNetwork } from '../provider';
2
+ export declare enum AddressPurposes {
3
+ PAYMENT = "payment",
4
+ ORDINALS = "ordinals"
5
+ }
6
+ export interface Purpose {
7
+ derivation_path?: string;
8
+ purpose: AddressPurposes;
9
+ }
10
+ export interface GetAddressPayload {
11
+ purposes: Array<Purpose>;
4
12
  message: string;
5
13
  network: BitcoinNetwork;
6
14
  }
7
- export interface GetAddressResponse {
15
+ export interface Address {
8
16
  address: string;
9
- network: string;
17
+ publicKey: string;
18
+ purpose: Purpose;
19
+ }
20
+ export interface GetAddressResponse {
21
+ addresses: Array<Address>;
10
22
  }
11
23
  export interface GetAddressOptions {
12
24
  onFinish: (response: GetAddressResponse) => void;
13
25
  onCancel: () => void;
14
26
  payload: GetAddressPayload;
15
27
  }
16
- export {};
@@ -1,2 +1,6 @@
1
- export {};
1
+ export var AddressPurposes;
2
+ (function (AddressPurposes) {
3
+ AddressPurposes["PAYMENT"] = "payment";
4
+ AddressPurposes["ORDINALS"] = "ordinals";
5
+ })(AddressPurposes || (AddressPurposes = {}));
2
6
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/address/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/address/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;AACvB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B"}
@@ -0,0 +1,16 @@
1
+ import { BitcoinNetwork } from '../provider';
2
+ export interface CallWalletPayload {
3
+ method: string;
4
+ network: BitcoinNetwork;
5
+ params?: Array<any>;
6
+ }
7
+ export interface CallWalletOptions {
8
+ onFinish: (response: Record<string, any>) => void;
9
+ onCancel: () => void;
10
+ payload: CallWalletPayload;
11
+ }
12
+ export declare enum CallMethod {
13
+ SIGN_TRANSACTION = "signTransaction",
14
+ GET_ADDRESS = "getAddress"
15
+ }
16
+ export declare const callWalletPopup: (options: CallWalletOptions) => Promise<void>;
@@ -0,0 +1,75 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { createUnsecuredToken } from 'jsontokens';
38
+ export var CallMethod;
39
+ (function (CallMethod) {
40
+ CallMethod["SIGN_TRANSACTION"] = "signTransaction";
41
+ CallMethod["GET_ADDRESS"] = "getAddress";
42
+ })(CallMethod || (CallMethod = {}));
43
+ export var callWalletPopup = function (options) { return __awaiter(void 0, void 0, void 0, function () {
44
+ var provider, method, request, callResponse, error_1;
45
+ var _a, _b;
46
+ return __generator(this, function (_c) {
47
+ switch (_c.label) {
48
+ case 0:
49
+ provider = window.BitcoinProvider;
50
+ method = options.payload.method;
51
+ if (!provider) {
52
+ throw new Error('No Bitcoin Wallet installed');
53
+ }
54
+ if (!method) {
55
+ throw new Error('A wallet method is required');
56
+ }
57
+ request = createUnsecuredToken(options.payload);
58
+ _c.label = 1;
59
+ case 1:
60
+ _c.trys.push([1, 3, , 4]);
61
+ return [4 /*yield*/, provider.call(request)];
62
+ case 2:
63
+ callResponse = _c.sent();
64
+ (_a = options.onFinish) === null || _a === void 0 ? void 0 : _a.call(options, callResponse);
65
+ return [3 /*break*/, 4];
66
+ case 3:
67
+ error_1 = _c.sent();
68
+ console.error('[Connect] Error during call request', error_1);
69
+ (_b = options.onCancel) === null || _b === void 0 ? void 0 : _b.call(options);
70
+ return [3 /*break*/, 4];
71
+ case 4: return [2 /*return*/];
72
+ }
73
+ });
74
+ }); };
75
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/call/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,oBAAoB,EAAQ,MAAM,YAAY,CAAC;AAexD,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,kDAAoC,CAAA;IACpC,wCAA0B,CAAA;AAC5B,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAED,MAAM,CAAC,IAAM,eAAe,GAAG,UAAO,OAA0B;;;;;;gBACxD,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC;gBAChC,MAAM,GAAK,OAAO,CAAC,OAAO,OAApB,CAAqB;gBACnC,IAAI,CAAC,QAAQ,EAAE;oBACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;iBAChD;gBACD,IAAG,CAAC,MAAM,EAAE;oBACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;iBAChD;gBACK,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAA0B,CAAC,CAAC;;;;gBAElD,qBAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAA;;gBAA3C,YAAY,GAAG,SAA4B;gBACjD,MAAA,OAAO,CAAC,QAAQ,wDAAG,YAAY,CAAC,CAAC;;;;gBAEjC,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,OAAK,CAAC,CAAC;gBAC5D,MAAA,OAAO,CAAC,QAAQ,uDAAI,CAAC;;;;;KAExB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { SignTransactionResponse } from '../transactions/signTransaction';
2
+ import { GetAddressResponse } from '../address';
3
+ export interface BitcoinNetwork {
4
+ type: string;
5
+ address: string;
6
+ }
7
+ export interface BitcoinProvider {
8
+ getAddress: (request: string) => Promise<GetAddressResponse>;
9
+ call: (request: string) => Promise<Record<string, any>>;
10
+ signTransaction: (request: string) => Promise<SignTransactionResponse>;
11
+ }
12
+ declare global {
13
+ interface Window {
14
+ BitcoinProvider?: BitcoinProvider;
15
+ }
16
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/provider/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { BitcoinNetwork } from '../provider';
2
+ export interface InputToSign {
3
+ address: string;
4
+ signingIndexes: Array<number>;
5
+ sigHash?: number;
6
+ }
7
+ export interface SignTransactionPayload {
8
+ network: BitcoinNetwork;
9
+ message: string;
10
+ psbtBase64: string;
11
+ broadcast?: boolean;
12
+ inputsToSign: InputToSign[];
13
+ }
14
+ export interface SignTransactionOptions {
15
+ payload: SignTransactionPayload;
16
+ onFinish: (response: any) => void;
17
+ onCancel: () => void;
18
+ }
19
+ export interface SignTransactionResponse {
20
+ psbtBase64: string;
21
+ txId?: string;
22
+ }
23
+ export declare const signTransaction: (options: SignTransactionOptions) => Promise<void>;
@@ -0,0 +1,70 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { createUnsecuredToken } from 'jsontokens';
38
+ export var signTransaction = function (options) { return __awaiter(void 0, void 0, void 0, function () {
39
+ var psbtBase64, provider, request, addressResponse, error_1;
40
+ var _a, _b;
41
+ return __generator(this, function (_c) {
42
+ switch (_c.label) {
43
+ case 0:
44
+ psbtBase64 = options.payload.psbtBase64;
45
+ provider = window.BitcoinProvider;
46
+ if (!provider) {
47
+ throw new Error('No Bitcoin Wallet installed');
48
+ }
49
+ if (!psbtBase64) {
50
+ throw new Error('a value for psbtBase64 representing the tx hash is required');
51
+ }
52
+ _c.label = 1;
53
+ case 1:
54
+ _c.trys.push([1, 3, , 4]);
55
+ request = createUnsecuredToken(options.payload);
56
+ return [4 /*yield*/, provider.signTransaction(request)];
57
+ case 2:
58
+ addressResponse = _c.sent();
59
+ (_a = options.onFinish) === null || _a === void 0 ? void 0 : _a.call(options, addressResponse);
60
+ return [3 /*break*/, 4];
61
+ case 3:
62
+ error_1 = _c.sent();
63
+ console.error('[Connect] Error during signPsbt request', error_1);
64
+ (_b = options.onCancel) === null || _b === void 0 ? void 0 : _b.call(options);
65
+ return [3 /*break*/, 4];
66
+ case 4: return [2 /*return*/];
67
+ }
68
+ });
69
+ }); };
70
+ //# sourceMappingURL=signTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signTransaction.js","sourceRoot":"","sources":["../../../src/transactions/signTransaction.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,oBAAoB,EAAQ,MAAM,YAAY,CAAC;AA+BxD,MAAM,CAAC,IAAM,eAAe,GAAG,UAAO,OAA+B;;;;;;gBAC3D,UAAU,GAAK,OAAO,CAAC,OAAO,WAApB,CAAqB;gBACjC,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC;gBACxC,IAAI,CAAC,QAAQ,EAAE;oBACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;iBAChD;gBACD,IAAI,CAAC,UAAU,EAAE;oBACf,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;iBAChF;;;;gBAES,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAA0B,CAAC,CAAC;gBACjD,qBAAM,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,EAAA;;gBAAzD,eAAe,GAAG,SAAuC;gBAC/D,MAAA,OAAO,CAAC,QAAQ,wDAAG,eAAe,CAAC,CAAC;;;;gBAEpC,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,OAAK,CAAC,CAAC;gBAChE,MAAA,OAAO,CAAC,QAAQ,uDAAI,CAAC;;;;;KAE1B,CAAC"}
package/index.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export * from './src/address/index';
2
2
  export * from './src/provider';
3
3
  export * from './src/call';
4
- export * from './src/transactions/signPsbt';
4
+ export * from './src/transactions/signTransaction';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sats-connect",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -1,7 +1,7 @@
1
1
  import { createUnsecuredToken, Json } from 'jsontokens';
2
2
  import { GetAddressOptions } from './types';
3
3
 
4
- export const openConnectPopup = async (options: GetAddressOptions) => {
4
+ export const getAddress = async (options: GetAddressOptions) => {
5
5
  const { message, network, purposes } = options.payload;
6
6
  const provider = window.BitcoinProvider;
7
7
  if (!provider) {
@@ -12,7 +12,7 @@ export const openConnectPopup = async (options: GetAddressOptions) => {
12
12
  }
13
13
  try {
14
14
  const request = createUnsecuredToken(options.payload as unknown as Json);
15
- const addressResponse = await provider.connect(request);
15
+ const addressResponse = await provider.getAddress(request);
16
16
  options.onFinish?.(addressResponse);
17
17
  } catch (error) {
18
18
  console.error('[Connect] Error during address request', error);
package/src/call/index.ts CHANGED
@@ -14,7 +14,7 @@ export interface CallWalletOptions {
14
14
  }
15
15
 
16
16
  export enum CallMethod {
17
- SIGN_PSBT = 'signPsbt',
17
+ SIGN_TRANSACTION = 'signTransaction',
18
18
  GET_ADDRESS = 'getAddress',
19
19
  }
20
20
 
@@ -1,4 +1,4 @@
1
- import { SignPsbtResponse } from '../transactions/signPsbt';
1
+ import { SignTransactionResponse } from '../transactions/signTransaction';
2
2
  import { GetAddressResponse } from '../address';
3
3
 
4
4
  export interface BitcoinNetwork {
@@ -7,9 +7,9 @@ export interface BitcoinNetwork {
7
7
  }
8
8
 
9
9
  export interface BitcoinProvider {
10
- connect: (request: string) => Promise<GetAddressResponse>;
10
+ getAddress: (request: string) => Promise<GetAddressResponse>;
11
11
  call: (request: string) => Promise<Record<string, any>>;
12
- signPsbt: (request: string) => Promise<SignPsbtResponse>;
12
+ signTransaction: (request: string) => Promise<SignTransactionResponse>;
13
13
  }
14
14
 
15
15
  declare global {
@@ -9,7 +9,7 @@ export interface InputToSign {
9
9
  }
10
10
 
11
11
 
12
- export interface SignPsbtPayload {
12
+ export interface SignTransactionPayload {
13
13
  network: BitcoinNetwork;
14
14
  message: string;
15
15
  psbtBase64: string;
@@ -17,19 +17,19 @@ export interface SignPsbtPayload {
17
17
  inputsToSign: InputToSign[];
18
18
  }
19
19
 
20
- export interface SignPsbtOptions {
21
- payload: SignPsbtPayload;
20
+ export interface SignTransactionOptions {
21
+ payload: SignTransactionPayload;
22
22
  onFinish: (response: any) => void;
23
23
  onCancel: () => void;
24
24
  }
25
25
 
26
- export interface SignPsbtResponse {
26
+ export interface SignTransactionResponse {
27
27
  psbtBase64: string;
28
28
  txId?: string;
29
29
  }
30
30
 
31
31
 
32
- export const openSignPsbtPopup = async (options: SignPsbtOptions) => {
32
+ export const signTransaction = async (options: SignTransactionOptions) => {
33
33
  const { psbtBase64 } = options.payload;
34
34
  const provider = window.BitcoinProvider;
35
35
  if (!provider) {
@@ -40,7 +40,7 @@ export const openSignPsbtPopup = async (options: SignPsbtOptions) => {
40
40
  }
41
41
  try {
42
42
  const request = createUnsecuredToken(options.payload as unknown as Json);
43
- const addressResponse = await provider.signPsbt(request);
43
+ const addressResponse = await provider.signTransaction(request);
44
44
  options.onFinish?.(addressResponse);
45
45
  } catch (error) {
46
46
  console.error('[Connect] Error during signPsbt request', error);
@@ -1,11 +0,0 @@
1
- import { UserSession } from '@stacks/auth';
2
- import type { AuthOptions } from './types';
3
- export declare const isMobile: () => boolean;
4
- /**
5
- * mobile should not use a 'popup' type of window.
6
- */
7
- export declare const shouldUsePopup: () => boolean;
8
- export declare const getOrCreateUserSession: (userSession?: UserSession) => UserSession;
9
- export declare const authenticate: (authOptions: AuthOptions) => Promise<void>;
10
- export declare const getUserData: (userSession?: UserSession) => Promise<import("@stacks/auth").UserData | null>;
11
- export * from './types';
@@ -1,126 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __generator = (this && this.__generator) || function (thisArg, body) {
11
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
- function verb(n) { return function (v) { return step([n, v]); }; }
14
- function step(op) {
15
- if (f) throw new TypeError("Generator is already executing.");
16
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
- if (y = 0, t) op = [op[0] & 2, t.value];
19
- switch (op[0]) {
20
- case 0: case 1: t = op; break;
21
- case 4: _.label++; return { value: op[1], done: false };
22
- case 5: _.label++; y = op[1]; op = [0]; continue;
23
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
- default:
25
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
- if (t[2]) _.ops.pop();
30
- _.trys.pop(); continue;
31
- }
32
- op = body.call(thisArg, _);
33
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
- }
36
- };
37
- import { AppConfig, UserSession } from '@stacks/auth';
38
- import { decodeToken } from 'jsontokens';
39
- var version = '0.0.1';
40
- if (typeof window !== 'undefined') {
41
- window.__CONNECT_VERSION__ = version;
42
- }
43
- export var isMobile = function () {
44
- var ua = navigator.userAgent;
45
- if (/android/i.test(ua)) {
46
- return true;
47
- }
48
- if (/iPad|iPhone|iPod/.test(ua)) {
49
- return true;
50
- }
51
- return /windows phone/i.test(ua);
52
- };
53
- /**
54
- * mobile should not use a 'popup' type of window.
55
- */
56
- export var shouldUsePopup = function () {
57
- return !isMobile();
58
- };
59
- export var getOrCreateUserSession = function (userSession) {
60
- if (!userSession) {
61
- var appConfig = new AppConfig(['store_write'], document.location.href);
62
- userSession = new UserSession({ appConfig: appConfig });
63
- }
64
- return userSession;
65
- };
66
- export var authenticate = function (authOptions) { return __awaiter(void 0, void 0, void 0, function () {
67
- var provider, _a, redirectTo, manifestPath, onFinish, onCancel, _b, sendToSignIn, _userSession, appDetails, userSession, transitKey, authRequest, authResponse, token, payload, authResponsePayload, error_1;
68
- return __generator(this, function (_c) {
69
- switch (_c.label) {
70
- case 0:
71
- provider = window.BitcoinProvider;
72
- if (!provider) {
73
- throw new Error('Unable to authenticate without a Bitcoin Wallet extension');
74
- }
75
- _a = authOptions.redirectTo, redirectTo = _a === void 0 ? '/' : _a, manifestPath = authOptions.manifestPath, onFinish = authOptions.onFinish, onCancel = authOptions.onCancel, _b = authOptions.sendToSignIn, sendToSignIn = _b === void 0 ? false : _b, _userSession = authOptions.userSession, appDetails = authOptions.appDetails;
76
- userSession = getOrCreateUserSession(_userSession);
77
- if (userSession.isUserSignedIn()) {
78
- userSession.signUserOut();
79
- }
80
- transitKey = userSession.generateAndStoreTransitKey();
81
- authRequest = userSession.makeAuthRequest(transitKey, "".concat(document.location.origin).concat(redirectTo), "".concat(document.location.origin).concat(manifestPath), userSession.appConfig.scopes, undefined, undefined, {
82
- sendToSignIn: sendToSignIn,
83
- appDetails: appDetails,
84
- connectVersion: version,
85
- });
86
- _c.label = 1;
87
- case 1:
88
- _c.trys.push([1, 4, , 5]);
89
- return [4 /*yield*/, provider.authenticationRequest(authRequest)];
90
- case 2:
91
- authResponse = _c.sent();
92
- return [4 /*yield*/, userSession.handlePendingSignIn(authResponse)];
93
- case 3:
94
- _c.sent();
95
- token = decodeToken(authResponse);
96
- payload = token === null || token === void 0 ? void 0 : token.payload;
97
- authResponsePayload = payload;
98
- onFinish === null || onFinish === void 0 ? void 0 : onFinish({
99
- authResponse: authResponse,
100
- authResponsePayload: authResponsePayload,
101
- userSession: userSession,
102
- });
103
- return [3 /*break*/, 5];
104
- case 4:
105
- error_1 = _c.sent();
106
- console.error('[Connect] Error during auth request', error_1);
107
- onCancel === null || onCancel === void 0 ? void 0 : onCancel();
108
- return [3 /*break*/, 5];
109
- case 5: return [2 /*return*/];
110
- }
111
- });
112
- }); };
113
- export var getUserData = function (userSession) { return __awaiter(void 0, void 0, void 0, function () {
114
- return __generator(this, function (_a) {
115
- userSession = getOrCreateUserSession(userSession);
116
- if (userSession.isUserSignedIn()) {
117
- return [2 /*return*/, userSession.loadUserData()];
118
- }
119
- if (userSession.isSignInPending()) {
120
- return [2 /*return*/, userSession.handlePendingSignIn()];
121
- }
122
- return [2 /*return*/, null];
123
- });
124
- }); };
125
- export * from './types';
126
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/index.ts"],"names":[],"mappings":"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"}
@@ -1,58 +0,0 @@
1
- import type { UserSession } from "@stacks/auth";
2
- export interface AuthResponsePayload {
3
- private_key: string;
4
- username: string | null;
5
- hubUrl: string;
6
- associationToken: string;
7
- blockstackAPIUrl: string | null;
8
- core_token: string | null;
9
- email: string | null;
10
- exp: number;
11
- iat: number;
12
- iss: string;
13
- jti: string;
14
- version: string;
15
- profile: any;
16
- profile_url: string;
17
- public_keys: string[];
18
- }
19
- export interface FinishedAuthData {
20
- authResponse: string;
21
- authResponsePayload: AuthResponsePayload;
22
- userSession: UserSession;
23
- }
24
- declare global {
25
- interface Window {
26
- __CONNECT_VERSION__?: string;
27
- }
28
- const __VERSION__: string;
29
- }
30
- export interface AuthOptions {
31
- /** The URL you want the user to be redirected to after authentication. */
32
- redirectTo?: string;
33
- manifestPath?: string;
34
- /**
35
- * This callback is fired after authentication is finished.
36
- * The callback is called with a single object argument, with three keys:
37
- * `authResponse`: the raw `authResponse` string that is returned from authentication
38
- * `authResponsePayload`: an AuthResponsePayload object
39
- * `userSession`: a UserSession object with `userData` included
40
- * */
41
- onFinish?: (payload: FinishedAuthData) => void;
42
- /** This callback is fired if the user exits before finishing */
43
- onCancel?: () => void;
44
- /**
45
- * @deprecated Authentication is no longer supported through a hosted
46
- * version. Users must install an extension.
47
- */
48
- authOrigin?: string;
49
- /** If `sendToSignIn` is `true`, then the user will be sent through the sign in flow. */
50
- sendToSignIn?: boolean;
51
- userSession?: UserSession;
52
- appDetails: {
53
- /** A human-readable name for your application */
54
- name: string;
55
- /** A full URL that resolves to an image icon for your application */
56
- icon: string;
57
- };
58
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/auth/types.ts"],"names":[],"mappings":""}
@@ -1,22 +0,0 @@
1
- import { GetAddressResponse } from '../address';
2
- export declare enum AddressPurposes {
3
- PAYMENT = "payment",
4
- ORDINALS = "ordinals"
5
- }
6
- export interface Purpose {
7
- derivation_path?: string;
8
- purpose: AddressPurposes;
9
- }
10
- export interface BitcoinNetwork {
11
- type: string;
12
- address: string;
13
- }
14
- export interface BitcoinProvider {
15
- getAddress: (purpose: Purpose, message: string, network?: BitcoinNetwork) => Promise<GetAddressResponse>;
16
- authenticationRequest(payload: string): Promise<string>;
17
- }
18
- declare global {
19
- interface Window {
20
- BitcoinProvider?: BitcoinProvider;
21
- }
22
- }
@@ -1,6 +0,0 @@
1
- export var AddressPurposes;
2
- (function (AddressPurposes) {
3
- AddressPurposes["PAYMENT"] = "payment";
4
- AddressPurposes["ORDINALS"] = "ordinals";
5
- })(AddressPurposes || (AddressPurposes = {}));
6
- //# sourceMappingURL=bitcoin.provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bitcoin.provider.js","sourceRoot":"","sources":["../../../src/provider/bitcoin.provider.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;AACvB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B"}