@fivenorth/loop-sdk 0.7.5 → 0.8.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 CHANGED
@@ -29,7 +29,7 @@ import { loop } from '@fivenorth/loop-sdk';
29
29
  Note that, If you don't want to implement a build process, you can include the file directly with `unpkg` such as
30
30
 
31
31
  ```javascript
32
- import { loop } from 'https://unpkg.com/@fivenorth/loop-sdk@0.1.1/dist';
32
+ import { loop } from 'https://unpkg.com/@fivenorth/loop-sdk@0.8.0/dist';
33
33
  ```
34
34
 
35
35
  An example of how we use it in that manner is on our [loopsdk demo](https://codepen.io/kureikain/pen/KwVGgLX)
@@ -42,6 +42,9 @@ Before you can connect, you need to initialize the SDK. This is typically done o
42
42
  loop.init({
43
43
  appName: 'My Awesome dApp',
44
44
  network: 'local', // or 'devnet', 'mainnet'
45
+ onTransactionUpdate: (payload) => {
46
+ console.log('Transaction update:', payload);
47
+ },
45
48
  options: {
46
49
  openMode: 'popup', // 'popup' (default) or 'tab'
47
50
  requestSigningMode: 'popup', // 'popup' (default) or 'tab'
@@ -60,6 +63,7 @@ loop.init({
60
63
  The `init` method takes a configuration object with the following properties:
61
64
  - `appName`: The name of your application, which will be displayed to the user in the Loop wallet.
62
65
  - `network`: The network to connect to. Can be `local`, `devnet`, or `mainnet`.
66
+ - `onTransactionUpdate`: Called when a transaction update is finalized (includes `update_id` and optional `update_data`).
63
67
  - `options`: Optional object containing:
64
68
  - `openMode`: Controls how Loop opens: `'popup'` (default) or `'tab'`.
65
69
  - `requestSigningMode`: Controls how signing/transaction requests open the wallet UI after you're connected: `'popup'` (default) or `'tab'`.
@@ -145,6 +149,8 @@ try {
145
149
  }
146
150
  ```
147
151
 
152
+ Transaction responses include `command_id`, `submission_id`, `transaction_data`, and `update_id` when available. For token transfers, `update_id` may arrive later (once indexed), in which case `onTransactionUpdate` fires with the finalized `update_id`. Non-transfer transactions do not receive an `update_id` via this mechanism.
153
+
148
154
  #### Sign a Message
149
155
 
150
156
  You can request the user to sign an arbitrary message:
package/dist/index.js CHANGED
@@ -2321,7 +2321,7 @@ var MessageType;
2321
2321
  MessageType2["HANDSHAKE_ACCEPT"] = "handshake_accept";
2322
2322
  MessageType2["HANDSHAKE_REJECT"] = "handshake_reject";
2323
2323
  MessageType2["RUN_TRANSACTION"] = "run_transaction";
2324
- MessageType2["RUN_TRANSACTION_RESPONSE"] = "run_transaction_response";
2324
+ MessageType2["TRANSACTION_COMPLETED"] = "transaction_completed";
2325
2325
  MessageType2["SIGN_RAW_MESSAGE"] = "sign_raw_message";
2326
2326
  MessageType2["SIGN_RAW_MESSAGE_RESPONSE"] = "sign_raw_message_response";
2327
2327
  MessageType2["REJECT_REQUEST"] = "reject_request";
@@ -2375,6 +2375,9 @@ class Provider {
2375
2375
  }
2376
2376
  handleResponse(message) {
2377
2377
  console.log("Received response:", message);
2378
+ if (message?.type === "transaction_completed" /* TRANSACTION_COMPLETED */ && message?.payload?.update_id) {
2379
+ this.hooks?.onTransactionUpdate?.(message.payload, message);
2380
+ }
2378
2381
  if (message.request_id) {
2379
2382
  this.requests.set(message.request_id, message);
2380
2383
  }
@@ -2694,7 +2697,7 @@ class LoopWallet {
2694
2697
 
2695
2698
  // src/index.ts
2696
2699
  class LoopSDK {
2697
- version = "0.7.5";
2700
+ version = "0.7.6";
2698
2701
  appName = "Unknown";
2699
2702
  connection = null;
2700
2703
  session = null;
@@ -2705,6 +2708,7 @@ class LoopSDK {
2705
2708
  redirectUrl;
2706
2709
  onAccept = null;
2707
2710
  onReject = null;
2711
+ onTransactionUpdate = null;
2708
2712
  overlay = null;
2709
2713
  wallet;
2710
2714
  constructor() {
@@ -2717,6 +2721,7 @@ class LoopSDK {
2717
2721
  apiUrl,
2718
2722
  onAccept,
2719
2723
  onReject,
2724
+ onTransactionUpdate,
2720
2725
  options
2721
2726
  }) {
2722
2727
  if (typeof window === "undefined" || typeof document === "undefined" || typeof localStorage === "undefined") {
@@ -2725,6 +2730,7 @@ class LoopSDK {
2725
2730
  this.appName = appName;
2726
2731
  this.onAccept = onAccept || null;
2727
2732
  this.onReject = onReject || null;
2733
+ this.onTransactionUpdate = onTransactionUpdate || null;
2728
2734
  const resolvedOptions = {
2729
2735
  openMode: "popup",
2730
2736
  requestSigningMode: "popup",
@@ -2859,6 +2865,12 @@ class LoopSDK {
2859
2865
  this.provider.handleResponse(message);
2860
2866
  }
2861
2867
  }
2868
+ getConnectUrl() {
2869
+ if (!this.session?.ticketId) {
2870
+ throw new Error("No ticket ID found. Please call connect() first.");
2871
+ }
2872
+ return this.buildConnectUrl(this.session.ticketId);
2873
+ }
2862
2874
  buildConnectUrl(ticketId) {
2863
2875
  const url = new URL("/.connect/", this.connection.walletUrl);
2864
2876
  url.searchParams.set("ticketId", ticketId);
@@ -3109,7 +3121,8 @@ class LoopSDK {
3109
3121
  this.closePopupIfExists();
3110
3122
  }, 800);
3111
3123
  }
3112
- }
3124
+ },
3125
+ onTransactionUpdate: this.onTransactionUpdate ?? undefined
3113
3126
  };
3114
3127
  }
3115
3128
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fivenorth/loop-sdk",
3
- "version": "0.7.5",
3
+ "version": "0.8.0",
4
4
  "author": "support@fivenorth.io",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",