@1sat/actions 0.0.25 → 0.0.26

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/index.d.ts CHANGED
@@ -17,5 +17,6 @@ export * from './locks';
17
17
  export * from './signing';
18
18
  export * from './opns';
19
19
  export * from './sweep';
20
+ export * from './sync';
20
21
  export type { CreateActionArgs, CreateActionInput, CreateActionOutput, CreateActionResult, ListOutputsArgs, ListOutputsResult, WalletInterface, WalletOutput, } from '@bsv/sdk';
21
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACN,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,aAAa,GACb,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAA;AAGzE,cAAc,aAAa,CAAA;AAG3B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGlD,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AAGtB,cAAc,SAAS,CAAA;AA0BvB,YAAY,EACX,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,YAAY,GACZ,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACN,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,aAAa,GACb,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAA;AAGzE,cAAc,aAAa,CAAA;AAG3B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGlD,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AAGtB,cAAc,SAAS,CAAA;AAGvB,cAAc,QAAQ,CAAA;AA4BtB,YAAY,EACX,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,YAAY,GACZ,MAAM,UAAU,CAAA"}
package/dist/index.js CHANGED
@@ -23,6 +23,8 @@ export * from './signing';
23
23
  export * from './opns';
24
24
  // Export sweep module (uses external signing, not action-based)
25
25
  export * from './sweep';
26
+ // Export sync module
27
+ export * from './sync';
26
28
  import { addressesActions } from './addresses';
27
29
  import { inscriptionsActions } from './inscriptions';
28
30
  import { locksActions } from './locks';
@@ -32,6 +34,7 @@ import { paymentsActions } from './payments';
32
34
  import { actionRegistry } from './registry';
33
35
  import { signingActions } from './signing';
34
36
  import { sweepActions } from './sweep';
37
+ import { syncActions } from './sync';
35
38
  import { tokensActions } from './tokens';
36
39
  actionRegistry.registerAll([
37
40
  ...addressesActions,
@@ -43,5 +46,6 @@ actionRegistry.registerAll([
43
46
  ...signingActions,
44
47
  ...sweepActions,
45
48
  ...opnsActions,
49
+ ...syncActions,
46
50
  ]);
47
51
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kCAAkC;AAClC,OAAO,EAON,aAAa,GACb,MAAM,SAAS,CAAA;AAEhB,yBAAyB;AACzB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAgB,MAAM,YAAY,CAAA;AAEzE,mBAAmB;AACnB,cAAc,aAAa,CAAA;AAE3B,0BAA0B;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,kCAAkC;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AAEtB,gEAAgE;AAChE,cAAc,SAAS,CAAA;AAEvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,cAAc,CAAC,WAAW,CAAC;IAC1B,GAAG,gBAAgB;IACnB,GAAG,eAAe;IAClB,GAAG,eAAe;IAClB,GAAG,aAAa;IAChB,GAAG,mBAAmB;IACtB,GAAG,YAAY;IACf,GAAG,cAAc;IACjB,GAAG,YAAY;IACf,GAAG,WAAW;CACd,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kCAAkC;AAClC,OAAO,EAON,aAAa,GACb,MAAM,SAAS,CAAA;AAEhB,yBAAyB;AACzB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAgB,MAAM,YAAY,CAAA;AAEzE,mBAAmB;AACnB,cAAc,aAAa,CAAA;AAE3B,0BAA0B;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,kCAAkC;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AAEtB,gEAAgE;AAChE,cAAc,SAAS,CAAA;AAEvB,qBAAqB;AACrB,cAAc,QAAQ,CAAA;AAEtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,cAAc,CAAC,WAAW,CAAC;IAC1B,GAAG,gBAAgB;IACnB,GAAG,eAAe;IAClB,GAAG,eAAe;IAClB,GAAG,aAAa;IAChB,GAAG,mBAAmB;IACtB,GAAG,YAAY;IACf,GAAG,cAAc;IACjB,GAAG,YAAY;IACf,GAAG,WAAW;IACd,GAAG,WAAW;CACd,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * ProcessedTxStore — tracks which transactions have been internalized
3
+ * by the address sync process, and the last sync score for resumption.
4
+ */
5
+ export interface ProcessedTxStore {
6
+ has(txid: string): Promise<boolean>;
7
+ add(txid: string): Promise<void>;
8
+ getLastScore(): Promise<number>;
9
+ setLastScore(score: number): Promise<void>;
10
+ close(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=ProcessedTxStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessedTxStore.d.ts","sourceRoot":"","sources":["../../src/sync/ProcessedTxStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAChC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACnC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAC/B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * ProcessedTxStore — tracks which transactions have been internalized
3
+ * by the address sync process, and the last sync score for resumption.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=ProcessedTxStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessedTxStore.js","sourceRoot":"","sources":["../../src/sync/ProcessedTxStore.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,14 @@
1
+ import type { ProcessedTxStore } from './ProcessedTxStore';
2
+ export declare class ProcessedTxStoreIdb implements ProcessedTxStore {
3
+ private dbName;
4
+ private db;
5
+ private dbPromise;
6
+ constructor(namespace: string);
7
+ private getDb;
8
+ has(txid: string): Promise<boolean>;
9
+ add(txid: string): Promise<void>;
10
+ getLastScore(): Promise<number>;
11
+ setLastScore(score: number): Promise<void>;
12
+ close(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=ProcessedTxStoreIdb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessedTxStoreIdb.d.ts","sourceRoot":"","sources":["../../src/sync/ProcessedTxStoreIdb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAM1D,qBAAa,mBAAoB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,EAAE,CAA2B;IACrC,OAAO,CAAC,SAAS,CAAoC;gBAEzC,SAAS,EAAE,MAAM;YAIf,KAAK;IA2Bb,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUnC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAe/B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO5B"}
@@ -0,0 +1,83 @@
1
+ const TXIDS_STORE = 'processed_txids';
2
+ const STATE_STORE = 'sync_state';
3
+ const DB_VERSION = 1;
4
+ export class ProcessedTxStoreIdb {
5
+ dbName;
6
+ db = null;
7
+ dbPromise = null;
8
+ constructor(namespace) {
9
+ this.dbName = `sync-processed-${namespace}`;
10
+ }
11
+ async getDb() {
12
+ if (this.db)
13
+ return this.db;
14
+ if (this.dbPromise)
15
+ return this.dbPromise;
16
+ this.dbPromise = new Promise((resolve, reject) => {
17
+ const request = indexedDB.open(this.dbName, DB_VERSION);
18
+ request.onerror = () => reject(request.error);
19
+ request.onblocked = () => reject(new Error('Database blocked - close other tabs'));
20
+ request.onsuccess = () => {
21
+ this.db = request.result;
22
+ resolve(this.db);
23
+ };
24
+ request.onupgradeneeded = (event) => {
25
+ const db = event.target.result;
26
+ if (!db.objectStoreNames.contains(TXIDS_STORE)) {
27
+ db.createObjectStore(TXIDS_STORE, { keyPath: 'txid' });
28
+ }
29
+ if (!db.objectStoreNames.contains(STATE_STORE)) {
30
+ db.createObjectStore(STATE_STORE, { keyPath: 'key' });
31
+ }
32
+ };
33
+ });
34
+ return this.dbPromise;
35
+ }
36
+ async has(txid) {
37
+ const db = await this.getDb();
38
+ return new Promise((resolve, reject) => {
39
+ const tx = db.transaction(TXIDS_STORE, 'readonly');
40
+ const request = tx.objectStore(TXIDS_STORE).get(txid);
41
+ request.onsuccess = () => resolve(!!request.result);
42
+ request.onerror = () => reject(request.error);
43
+ });
44
+ }
45
+ async add(txid) {
46
+ const db = await this.getDb();
47
+ return new Promise((resolve, reject) => {
48
+ const tx = db.transaction(TXIDS_STORE, 'readwrite');
49
+ tx.objectStore(TXIDS_STORE).put({ txid, createdAt: Date.now() });
50
+ tx.oncomplete = () => resolve();
51
+ tx.onerror = () => reject(tx.error);
52
+ });
53
+ }
54
+ async getLastScore() {
55
+ const db = await this.getDb();
56
+ return new Promise((resolve, reject) => {
57
+ const tx = db.transaction(STATE_STORE, 'readonly');
58
+ const request = tx.objectStore(STATE_STORE).get('lastScore');
59
+ request.onsuccess = () => {
60
+ const result = request.result;
61
+ resolve(result?.value ?? 0);
62
+ };
63
+ request.onerror = () => reject(request.error);
64
+ });
65
+ }
66
+ async setLastScore(score) {
67
+ const db = await this.getDb();
68
+ return new Promise((resolve, reject) => {
69
+ const tx = db.transaction(STATE_STORE, 'readwrite');
70
+ tx.objectStore(STATE_STORE).put({ key: 'lastScore', value: score });
71
+ tx.oncomplete = () => resolve();
72
+ tx.onerror = () => reject(tx.error);
73
+ });
74
+ }
75
+ async close() {
76
+ if (this.db) {
77
+ this.db.close();
78
+ this.db = null;
79
+ this.dbPromise = null;
80
+ }
81
+ }
82
+ }
83
+ //# sourceMappingURL=ProcessedTxStoreIdb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessedTxStoreIdb.js","sourceRoot":"","sources":["../../src/sync/ProcessedTxStoreIdb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ProcessedTxStore } from './ProcessedTxStore';
2
+ interface SqliteDatabase {
3
+ exec(sql: string): void;
4
+ prepare(sql: string): SqliteStatement;
5
+ close(): void;
6
+ }
7
+ interface SqliteStatement {
8
+ run(...params: unknown[]): {
9
+ changes: number;
10
+ };
11
+ get(...params: unknown[]): unknown;
12
+ }
13
+ export declare class ProcessedTxStoreSqlite implements ProcessedTxStore {
14
+ private db;
15
+ constructor(db: SqliteDatabase);
16
+ static open(dbPath: string, Database: new (path: string) => SqliteDatabase): ProcessedTxStoreSqlite;
17
+ has(txid: string): Promise<boolean>;
18
+ add(txid: string): Promise<void>;
19
+ getLastScore(): Promise<number>;
20
+ setLastScore(score: number): Promise<void>;
21
+ close(): Promise<void>;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=ProcessedTxStoreSqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessedTxStoreSqlite.d.ts","sourceRoot":"","sources":["../../src/sync/ProcessedTxStoreSqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE1D,UAAU,cAAc;IACvB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;IACrC,KAAK,IAAI,IAAI,CAAA;CACb;AAED,UAAU,eAAe;IACxB,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;CAClC;AAED,qBAAa,sBAAuB,YAAW,gBAAgB;IAC9D,OAAO,CAAC,EAAE,CAAgB;gBAEd,EAAE,EAAE,cAAc;IAc9B,MAAM,CAAC,IAAI,CACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,KAAK,cAAc,GAC5C,sBAAsB;IAInB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOnC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAO/B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
@@ -0,0 +1,45 @@
1
+ export class ProcessedTxStoreSqlite {
2
+ db;
3
+ constructor(db) {
4
+ this.db = db;
5
+ this.db.exec(`
6
+ CREATE TABLE IF NOT EXISTS processed_txids (
7
+ txid TEXT PRIMARY KEY,
8
+ created_at INTEGER NOT NULL
9
+ );
10
+ CREATE TABLE IF NOT EXISTS sync_state (
11
+ key TEXT PRIMARY KEY,
12
+ value REAL NOT NULL
13
+ );
14
+ `);
15
+ }
16
+ static open(dbPath, Database) {
17
+ return new ProcessedTxStoreSqlite(new Database(dbPath));
18
+ }
19
+ async has(txid) {
20
+ const row = this.db
21
+ .prepare('SELECT 1 FROM processed_txids WHERE txid = ?')
22
+ .get(txid);
23
+ return !!row;
24
+ }
25
+ async add(txid) {
26
+ this.db
27
+ .prepare('INSERT OR IGNORE INTO processed_txids (txid, created_at) VALUES (?, ?)')
28
+ .run(txid, Date.now());
29
+ }
30
+ async getLastScore() {
31
+ const row = this.db
32
+ .prepare("SELECT value FROM sync_state WHERE key = 'lastScore'")
33
+ .get();
34
+ return row?.value ?? 0;
35
+ }
36
+ async setLastScore(score) {
37
+ this.db
38
+ .prepare("INSERT OR REPLACE INTO sync_state (key, value) VALUES ('lastScore', ?)")
39
+ .run(score);
40
+ }
41
+ async close() {
42
+ this.db.close();
43
+ }
44
+ }
45
+ //# sourceMappingURL=ProcessedTxStoreSqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessedTxStoreSqlite.js","sourceRoot":"","sources":["../../src/sync/ProcessedTxStoreSqlite.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,sBAAsB;IAC1B,EAAE,CAAgB;IAE1B,YAAY,EAAkB;QAC7B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;GASZ,CAAC,CAAA;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CACV,MAAc,EACd,QAA8C;QAE9C,OAAO,IAAI,sBAAsB,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAY;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CAAC,8CAA8C,CAAC;aACvD,GAAG,CAAC,IAAI,CAAC,CAAA;QACX,OAAO,CAAC,CAAC,GAAG,CAAA;IACb,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAY;QACrB,IAAI,CAAC,EAAE;aACL,OAAO,CACP,wEAAwE,CACxE;aACA,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,YAAY;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CAAC,sDAAsD,CAAC;aAC/D,GAAG,EAAmC,CAAA;QACxC,OAAO,GAAG,EAAE,KAAK,IAAI,CAAC,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa;QAC/B,IAAI,CAAC,EAAE;aACL,OAAO,CACP,wEAAwE,CACxE;aACA,GAAG,CAAC,KAAK,CAAC,CAAA;IACb,CAAC;IAED,KAAK,CAAC,KAAK;QACV,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;IAChB,CAAC;CACD"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Address Sync Action
3
+ *
4
+ * Derives BRC-29 deposit addresses, fetches new outputs from the
5
+ * 1sat-stack indexer (triggering lazy indexing), classifies them
6
+ * with the indexer pipeline, and internalizes them into the wallet.
7
+ */
8
+ import type { SyncProgress } from '@1sat/types';
9
+ import type { Action } from '../types';
10
+ export interface SyncAddressesInput {
11
+ /** BRC-29 derivation prefix (e.g., "yours", "mcp", "1sat") */
12
+ prefix: string;
13
+ /** First address index to derive (default: 0) */
14
+ startIndex?: number;
15
+ /** Number of addresses to derive (default: 1) */
16
+ count?: number;
17
+ /** Optional progress callback for UI consumers showing indexing status */
18
+ onProgress?: (progress: SyncProgress) => void;
19
+ }
20
+ export interface SyncAddressesResult {
21
+ /** Number of transactions successfully internalized */
22
+ processed: number;
23
+ /** Number of transactions that failed to internalize */
24
+ failed: number;
25
+ /** Last reorg-safe score — pass as fromScore on next call */
26
+ lastScore: number;
27
+ /** Addresses that were synced */
28
+ addresses: string[];
29
+ }
30
+ export declare const syncAddresses: Action<SyncAddressesInput, SyncAddressesResult>;
31
+ /** All sync actions for registry */
32
+ export declare const syncActions: Action<SyncAddressesInput, SyncAddressesResult>[];
33
+ export { type ProcessedTxStore } from './ProcessedTxStore';
34
+ export { ProcessedTxStoreIdb } from './ProcessedTxStoreIdb';
35
+ export { ProcessedTxStoreSqlite } from './ProcessedTxStoreSqlite';
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAyB,YAAY,EAAO,MAAM,aAAa,CAAA;AAqB3E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AA4BtC,MAAM,WAAW,kBAAkB;IAClC,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAA;IACd,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0EAA0E;IAC1E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAA;CAC7C;AAED,MAAM,WAAW,mBAAmB;IACnC,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAA;IACjB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAA;IACd,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAA;IACjB,iCAAiC;IACjC,SAAS,EAAE,MAAM,EAAE,CAAA;CACnB;AA0BD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAsJzE,CAAA;AAmQD,oCAAoC;AACpC,eAAO,MAAM,WAAW,mDAAkB,CAAA;AAE1C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,384 @@
1
+ /**
2
+ * Address Sync Action
3
+ *
4
+ * Derives BRC-29 deposit addresses, fetches new outputs from the
5
+ * 1sat-stack indexer (triggering lazy indexing), classifies them
6
+ * with the indexer pipeline, and internalizes them into the wallet.
7
+ */
8
+ import { BRC29_PROTOCOL_ID } from '@1sat/types';
9
+ import { Beef, PublicKey, Transaction, Utils, } from '@bsv/sdk';
10
+ import { Bsv21Indexer, FundIndexer, InscriptionIndexer, MapIndexer, OpNSIndexer, OriginIndexer, Outpoint, SigmaIndexer, } from '@1sat/wallet';
11
+ import { ProcessedTxStoreIdb } from './ProcessedTxStoreIdb';
12
+ import { ProcessedTxStoreSqlite } from './ProcessedTxStoreSqlite';
13
+ const REORG_SAFE_DEPTH = 6;
14
+ // ============================================================================
15
+ // Address derivation helpers (shared with deriveDepositAddresses action)
16
+ // ============================================================================
17
+ function toBase64Prefix(prefix) {
18
+ return Utils.toBase64(Array.from(new TextEncoder().encode(prefix)));
19
+ }
20
+ function toBase64Suffix(index) {
21
+ return Utils.toBase64([
22
+ (index >>> 24) & 0xff,
23
+ (index >>> 16) & 0xff,
24
+ (index >>> 8) & 0xff,
25
+ index & 0xff,
26
+ ]);
27
+ }
28
+ // ============================================================================
29
+ // Store factory
30
+ // ============================================================================
31
+ async function openStore(identityKey, dataDir) {
32
+ if (typeof indexedDB !== 'undefined') {
33
+ return new ProcessedTxStoreIdb(identityKey);
34
+ }
35
+ const dir = dataDir || process.cwd();
36
+ const dbPath = `${dir}/sync-${identityKey.slice(0, 16)}.db`;
37
+ // Dynamic import for SQLite — only available in Node/Bun
38
+ const { Database } = await import('bun:sqlite');
39
+ return ProcessedTxStoreSqlite.open(dbPath, Database);
40
+ }
41
+ // ============================================================================
42
+ // Action
43
+ // ============================================================================
44
+ export const syncAddresses = {
45
+ meta: {
46
+ name: 'syncAddresses',
47
+ description: 'Sync external payments to BRC-29 deposit addresses into the wallet',
48
+ category: 'sync',
49
+ inputSchema: {
50
+ type: 'object',
51
+ properties: {
52
+ prefix: {
53
+ type: 'string',
54
+ description: 'BRC-29 derivation prefix (e.g., "yours", "mcp", "1sat")',
55
+ },
56
+ startIndex: {
57
+ type: 'integer',
58
+ description: 'First address index to derive (default: 0)',
59
+ },
60
+ count: {
61
+ type: 'integer',
62
+ description: 'Number of addresses to derive (default: 1)',
63
+ },
64
+ },
65
+ required: ['prefix'],
66
+ },
67
+ requiresServices: true,
68
+ },
69
+ async execute(ctx, input) {
70
+ const { prefix, startIndex = 0, count = 1, onProgress } = input;
71
+ const services = ctx.services;
72
+ if (!services) {
73
+ throw new Error('syncAddresses requires services in context');
74
+ }
75
+ // 1. Derive addresses
76
+ const { publicKey: identityKey } = await ctx.wallet.getPublicKey({
77
+ identityKey: true,
78
+ });
79
+ const derivationPrefix = toBase64Prefix(prefix);
80
+ const derivations = [];
81
+ for (let i = startIndex; i < startIndex + count; i++) {
82
+ const derivationSuffix = toBase64Suffix(i);
83
+ const keyID = `${derivationPrefix} ${derivationSuffix}`;
84
+ const { publicKey } = await ctx.wallet.getPublicKey({
85
+ protocolID: BRC29_PROTOCOL_ID,
86
+ keyID,
87
+ forSelf: true,
88
+ });
89
+ derivations.push({
90
+ address: PublicKey.fromString(publicKey).toAddress(),
91
+ index: i,
92
+ derivationPrefix,
93
+ derivationSuffix,
94
+ senderIdentityKey: identityKey,
95
+ publicKey,
96
+ });
97
+ }
98
+ const addresses = derivations.map((d) => d.address);
99
+ const addressMap = new Map(derivations.map((d) => [d.address, d]));
100
+ // 2. Open processed-tx store
101
+ const store = await openStore(identityKey, ctx.dataDir);
102
+ try {
103
+ // 3. Get current block height and last score
104
+ const { height: currentHeight } = await ctx.wallet.getHeight({});
105
+ const lastScore = await store.getLastScore();
106
+ // 4. Build indexers
107
+ const owners = new Set(addresses);
108
+ const network = ctx.chain === 'main' ? 'mainnet' : 'testnet';
109
+ const indexers = [
110
+ new FundIndexer(owners, network),
111
+ new InscriptionIndexer(owners, network),
112
+ new Bsv21Indexer(owners, network, services),
113
+ new OriginIndexer(owners, network, services),
114
+ new OpNSIndexer(owners, network),
115
+ new SigmaIndexer(owners, network),
116
+ new MapIndexer(owners, network),
117
+ ];
118
+ // 5. Fetch sync stream and group outputs by txid
119
+ const outputsByTxid = new Map();
120
+ let maxSafeScore = lastScore;
121
+ for await (const output of services.owner.sync(addresses, lastScore || undefined, onProgress)) {
122
+ const txid = output.outpoint.substring(0, 64);
123
+ if (!outputsByTxid.has(txid)) {
124
+ outputsByTxid.set(txid, []);
125
+ }
126
+ outputsByTxid.get(txid).push(output);
127
+ // Track max reorg-safe score
128
+ const outputHeight = Math.floor(output.score);
129
+ if (currentHeight - outputHeight >= REORG_SAFE_DEPTH) {
130
+ if (output.score > maxSafeScore) {
131
+ maxSafeScore = output.score;
132
+ }
133
+ }
134
+ }
135
+ // 6. Process each txid
136
+ let processed = 0;
137
+ let failed = 0;
138
+ for (const [txid, outputs] of outputsByTxid) {
139
+ // Skip already-processed transactions
140
+ if (await store.has(txid))
141
+ continue;
142
+ try {
143
+ await processTxid(txid, outputs, ctx, services, indexers, addressMap);
144
+ await store.add(txid);
145
+ processed++;
146
+ }
147
+ catch (error) {
148
+ console.error(`[syncAddresses] Failed to process txid ${txid}:`, error instanceof Error ? error.message : String(error));
149
+ failed++;
150
+ }
151
+ }
152
+ // 7. Update last score
153
+ if (maxSafeScore > lastScore) {
154
+ await store.setLastScore(maxSafeScore);
155
+ }
156
+ return { processed, failed, lastScore: maxSafeScore, addresses };
157
+ }
158
+ finally {
159
+ await store.close();
160
+ }
161
+ },
162
+ };
163
+ // ============================================================================
164
+ // Transaction processing (adapted from AddressSyncProcessor)
165
+ // ============================================================================
166
+ async function processTxid(txid, outputs, ctx, services, indexers, addressMap) {
167
+ // Check if all outputs are spend-only (no new outputs to internalize)
168
+ if (outputs.every((o) => !!o.spendTxid && !isNewOutput(o))) {
169
+ return;
170
+ }
171
+ // Load BEEF
172
+ const beef = await services.beef.getBeef(txid);
173
+ if (!beef) {
174
+ throw new Error(`Failed to load BEEF for ${txid}`);
175
+ }
176
+ const beefObj = Beef.fromBinary(Array.from(beef));
177
+ const btx = beefObj.findTxid(txid);
178
+ if (!btx?.tx) {
179
+ throw new Error(`Transaction ${txid} not found in BEEF`);
180
+ }
181
+ // Ensure source transactions are loaded for inputs
182
+ for (const input of btx.tx.inputs) {
183
+ if (!input.sourceTransaction && input.sourceTXID) {
184
+ const rawTx = await services.beef.getRawTx(input.sourceTXID);
185
+ input.sourceTransaction = Transaction.fromBinary(Array.from(rawTx));
186
+ }
187
+ }
188
+ // Parse transaction with indexers
189
+ const parseCtx = await parseTransaction(btx.tx, indexers);
190
+ // Build InternalizeOutput entries for owned outputs
191
+ const internalizeOutputs = [];
192
+ const ownedTxos = [];
193
+ for (const txo of parseCtx.txos) {
194
+ if (!txo.owner)
195
+ continue;
196
+ const derivation = addressMap.get(txo.owner);
197
+ if (!derivation)
198
+ continue;
199
+ const internalizeOutput = buildInternalizeOutput(txo, derivation);
200
+ if (internalizeOutput) {
201
+ internalizeOutputs.push(internalizeOutput);
202
+ ownedTxos.push(txo);
203
+ }
204
+ }
205
+ if (internalizeOutputs.length === 0)
206
+ return;
207
+ const args = {
208
+ tx: Array.from(beef),
209
+ outputs: internalizeOutputs,
210
+ description: buildDescription(ownedTxos),
211
+ };
212
+ await ctx.wallet.internalizeAction(args);
213
+ }
214
+ function isNewOutput(output) {
215
+ // An output with only a spendTxid and no indication of being a new output
216
+ // is a spend notification, not a new output to internalize
217
+ return !output.spendTxid;
218
+ }
219
+ async function parseTransaction(tx, indexers) {
220
+ const txid = tx.id('hex');
221
+ const ctx = {
222
+ tx,
223
+ txid,
224
+ txos: [],
225
+ spends: [],
226
+ summary: {},
227
+ indexers,
228
+ };
229
+ // Parse inputs into spends
230
+ for (let vin = 0; vin < tx.inputs.length; vin++) {
231
+ const input = tx.inputs[vin];
232
+ if (!input.sourceTransaction) {
233
+ throw new Error(`Missing sourceTransaction for input ${vin}`);
234
+ }
235
+ const sourceTxid = input.sourceTransaction.id('hex');
236
+ const txo = {
237
+ output: input.sourceTransaction.outputs[input.sourceOutputIndex],
238
+ outpoint: new Outpoint(sourceTxid, input.sourceOutputIndex),
239
+ data: {},
240
+ };
241
+ for (const indexer of indexers) {
242
+ const result = await indexer.parse(txo);
243
+ if (result) {
244
+ txo.data[indexer.tag] = {
245
+ data: result.data,
246
+ tags: result.tags,
247
+ content: result.content,
248
+ };
249
+ if (result.owner && !txo.owner)
250
+ txo.owner = result.owner;
251
+ if (result.basket && !txo.basket)
252
+ txo.basket = result.basket;
253
+ }
254
+ }
255
+ ctx.spends.push(txo);
256
+ }
257
+ // Parse each output
258
+ for (let vout = 0; vout < tx.outputs.length; vout++) {
259
+ const output = tx.outputs[vout];
260
+ const txo = {
261
+ output,
262
+ outpoint: new Outpoint(txid, vout),
263
+ data: {},
264
+ };
265
+ for (const indexer of indexers) {
266
+ const result = await indexer.parse(txo);
267
+ if (result) {
268
+ txo.data[indexer.tag] = {
269
+ data: result.data,
270
+ tags: result.tags,
271
+ content: result.content,
272
+ };
273
+ if (result.owner && !txo.owner)
274
+ txo.owner = result.owner;
275
+ if (result.basket && !txo.basket)
276
+ txo.basket = result.basket;
277
+ if (result.protocol && !txo.protocol)
278
+ txo.protocol = result.protocol;
279
+ }
280
+ }
281
+ ctx.txos.push(txo);
282
+ }
283
+ // Summarize phase
284
+ for (const indexer of indexers) {
285
+ const summary = await indexer.summarize(ctx, true);
286
+ if (summary) {
287
+ ctx.summary[indexer.tag] = summary;
288
+ }
289
+ }
290
+ return ctx;
291
+ }
292
+ function buildInternalizeOutput(txo, derivation) {
293
+ const vout = txo.outpoint.vout;
294
+ const protocol = txo.protocol || 'wallet payment';
295
+ if (protocol === 'basket insertion') {
296
+ const basket = txo.basket || 'custom';
297
+ const tags = collectTags(txo);
298
+ const nameTag = tags.find((t) => t.startsWith('name:'));
299
+ return {
300
+ outputIndex: vout,
301
+ protocol: 'basket insertion',
302
+ insertionRemittance: {
303
+ basket,
304
+ tags,
305
+ customInstructions: JSON.stringify({
306
+ derivationPrefix: derivation.derivationPrefix,
307
+ derivationSuffix: derivation.derivationSuffix,
308
+ senderIdentityKey: derivation.senderIdentityKey,
309
+ ...(nameTag && { name: nameTag.slice(5).slice(0, 64) }),
310
+ }),
311
+ },
312
+ };
313
+ }
314
+ // P2PKH ordinals/tokens: basket insertion so they don't get consumed as change
315
+ if (txo.basket && txo.basket !== 'fund') {
316
+ const tags = collectTags(txo);
317
+ const nameTag = tags.find((t) => t.startsWith('name:'));
318
+ return {
319
+ outputIndex: vout,
320
+ protocol: 'basket insertion',
321
+ insertionRemittance: {
322
+ basket: txo.basket,
323
+ tags,
324
+ customInstructions: JSON.stringify({
325
+ protocolID: BRC29_PROTOCOL_ID,
326
+ keyID: `${derivation.derivationPrefix} ${derivation.derivationSuffix}`,
327
+ ...(nameTag && { name: nameTag.slice(5).slice(0, 64) }),
328
+ }),
329
+ },
330
+ };
331
+ }
332
+ // P2PKH funding output
333
+ return {
334
+ outputIndex: vout,
335
+ protocol: 'wallet payment',
336
+ paymentRemittance: {
337
+ derivationPrefix: derivation.derivationPrefix,
338
+ derivationSuffix: derivation.derivationSuffix,
339
+ senderIdentityKey: derivation.senderIdentityKey,
340
+ },
341
+ };
342
+ }
343
+ function collectTags(txo) {
344
+ const tags = [];
345
+ for (const indexData of Object.values(txo.data)) {
346
+ tags.push(...indexData.tags);
347
+ }
348
+ return tags;
349
+ }
350
+ function buildDescription(ownedTxos) {
351
+ const parts = [];
352
+ let sats = 0;
353
+ for (const txo of ownedTxos) {
354
+ if (txo.data.bsv21) {
355
+ const token = txo.data.bsv21.data;
356
+ const sym = token.sym || 'tokens';
357
+ const amt = Number(token.amt) / 10 ** token.dec;
358
+ parts.push(`${amt} ${sym}`);
359
+ }
360
+ else if (txo.basket === '1sat') {
361
+ parts.push('ordinal');
362
+ }
363
+ else if (txo.basket === 'opns') {
364
+ parts.push('OPNS name');
365
+ }
366
+ else if (txo.basket === 'fund') {
367
+ sats += Number(txo.output.satoshis || 0);
368
+ }
369
+ }
370
+ if (sats > 0) {
371
+ parts.push(`${sats} sats`);
372
+ }
373
+ if (parts.length === 0)
374
+ return 'Received via address sync';
375
+ const desc = `Received ${parts.join(' + ')}`;
376
+ if (desc.length <= 50)
377
+ return desc;
378
+ return `${desc.slice(0, 47)}...`;
379
+ }
380
+ /** All sync actions for registry */
381
+ export const syncActions = [syncAddresses];
382
+ export { ProcessedTxStoreIdb } from './ProcessedTxStoreIdb';
383
+ export { ProcessedTxStoreSqlite } from './ProcessedTxStoreSqlite';
384
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -16,6 +16,8 @@ export interface OneSatContext {
16
16
  chain: 'main' | 'test';
17
17
  /** Optional WhatsOnChain API key */
18
18
  wocApiKey?: string;
19
+ /** Local storage directory for actions that need persistence (SQLite). In browsers, IDB is used automatically. In Node/Bun without this set, defaults to cwd. */
20
+ dataDir?: string;
19
21
  /** Enable debug logging of derivation info for fund recovery */
20
22
  debug?: boolean;
21
23
  /** Structured log callback — receives derivation details for each action execution */
@@ -56,7 +58,7 @@ export interface JsonSchemaProperty {
56
58
  /**
57
59
  * Action category for grouping related operations.
58
60
  */
59
- export type ActionCategory = 'addresses' | 'balance' | 'payments' | 'ordinals' | 'tokens' | 'inscriptions' | 'locks' | 'signing' | 'sweep' | 'opns';
61
+ export type ActionCategory = 'addresses' | 'balance' | 'payments' | 'ordinals' | 'tokens' | 'inscriptions' | 'locks' | 'signing' | 'sweep' | 'opns' | 'sync';
60
62
  /**
61
63
  * Metadata describing an action for AI agents and tooling.
62
64
  */
@@ -92,6 +94,7 @@ export declare function createContext(wallet: WalletInterface, options?: {
92
94
  services?: OneSatServices;
93
95
  chain?: 'main' | 'test';
94
96
  wocApiKey?: string;
97
+ dataDir?: string;
95
98
  debug?: boolean;
96
99
  log?: (entry: ActionLogEntry) => void;
97
100
  }): OneSatContext;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -10,6 +10,7 @@ export function createContext(wallet, options) {
10
10
  services: options?.services,
11
11
  chain: options?.chain ?? 'main',
12
12
  wocApiKey: options?.wocApiKey,
13
+ dataDir: options?.dataDir,
13
14
  debug: options?.debug,
14
15
  log: options?.log,
15
16
  };
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuGH;;GAEG;AACH,MAAM,UAAU,aAAa,CAC5B,MAAuB,EACvB,OAMC;IAED,OAAO;QACN,MAAM;QACN,QAAQ,EAAE,OAAO,EAAE,QAAQ;QAC3B,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,MAAM;QAC/B,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,KAAK,EAAE,OAAO,EAAE,KAAK;QACrB,GAAG,EAAE,OAAO,EAAE,GAAG;KACjB,CAAA;AACF,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0GH;;GAEG;AACH,MAAM,UAAU,aAAa,CAC5B,MAAuB,EACvB,OAOC;IAED,OAAO;QACN,MAAM;QACN,QAAQ,EAAE,OAAO,EAAE,QAAQ;QAC3B,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,MAAM;QAC/B,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,KAAK,EAAE,OAAO,EAAE,KAAK;QACrB,GAAG,EAAE,OAAO,EAAE,GAAG;KACjB,CAAA;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1sat/actions",
3
- "version": "0.0.25",
3
+ "version": "0.0.26",
4
4
  "description": "Action definitions for the 1Sat SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -21,9 +21,10 @@
21
21
  "keywords": ["1sat", "bsv", "actions", "wallet", "ordinals"],
22
22
  "license": "MIT",
23
23
  "dependencies": {
24
- "@1sat/client": "^0.0.8",
24
+ "@1sat/client": "^0.0.9",
25
25
  "@1sat/types": "^0.0.10",
26
26
  "@1sat/utils": "^0.0.8",
27
+ "@1sat/wallet": "^0.0.20",
27
28
  "@bopen-io/templates": "^1.1.9"
28
29
  },
29
30
  "peerDependencies": {