@sundaeswap/sprinkles 0.7.0 → 0.8.1
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 +178 -181
- package/dist/cjs/Sprinkle/__tests__/builtin-actions.test.js +4 -4
- package/dist/cjs/Sprinkle/__tests__/builtin-actions.test.js.map +1 -1
- package/dist/cjs/Sprinkle/__tests__/cli-adapter.test.js +25 -3
- package/dist/cjs/Sprinkle/__tests__/cli-adapter.test.js.map +1 -1
- package/dist/cjs/Sprinkle/__tests__/fill-in-struct.test.js +15 -1
- package/dist/cjs/Sprinkle/__tests__/fill-in-struct.test.js.map +1 -1
- package/dist/cjs/Sprinkle/__tests__/mcp-adapter.test.js +7 -9
- package/dist/cjs/Sprinkle/__tests__/mcp-adapter.test.js.map +1 -1
- package/dist/cjs/Sprinkle/__tests__/native-script.test.js +390 -0
- package/dist/cjs/Sprinkle/__tests__/native-script.test.js.map +1 -0
- package/dist/cjs/Sprinkle/__tests__/utility-actions.test.js +367 -0
- package/dist/cjs/Sprinkle/__tests__/utility-actions.test.js.map +1 -0
- package/dist/cjs/Sprinkle/actions/builtin/addressbook-actions.js +164 -0
- package/dist/cjs/Sprinkle/actions/builtin/addressbook-actions.js.map +1 -0
- package/dist/cjs/Sprinkle/actions/builtin/index.js +60 -3
- package/dist/cjs/Sprinkle/actions/builtin/index.js.map +1 -1
- package/dist/cjs/Sprinkle/actions/builtin/native-script.js +139 -0
- package/dist/cjs/Sprinkle/actions/builtin/native-script.js.map +1 -0
- package/dist/cjs/Sprinkle/actions/builtin/utility-actions.js +218 -0
- package/dist/cjs/Sprinkle/actions/builtin/utility-actions.js.map +1 -0
- package/dist/cjs/Sprinkle/actions/cli-adapter.js +20 -2
- package/dist/cjs/Sprinkle/actions/cli-adapter.js.map +1 -1
- package/dist/cjs/Sprinkle/actions/index.js +12 -0
- package/dist/cjs/Sprinkle/actions/index.js.map +1 -1
- package/dist/cjs/Sprinkle/actions/mcp-adapter.js +146 -4
- package/dist/cjs/Sprinkle/actions/mcp-adapter.js.map +1 -1
- package/dist/cjs/Sprinkle/index.js +282 -6
- package/dist/cjs/Sprinkle/index.js.map +1 -1
- package/dist/cjs/Sprinkle/schemas.js +17 -1
- package/dist/cjs/Sprinkle/schemas.js.map +1 -1
- package/dist/esm/Sprinkle/__tests__/builtin-actions.test.js +4 -4
- package/dist/esm/Sprinkle/__tests__/builtin-actions.test.js.map +1 -1
- package/dist/esm/Sprinkle/__tests__/cli-adapter.test.js +25 -3
- package/dist/esm/Sprinkle/__tests__/cli-adapter.test.js.map +1 -1
- package/dist/esm/Sprinkle/__tests__/fill-in-struct.test.js +15 -1
- package/dist/esm/Sprinkle/__tests__/fill-in-struct.test.js.map +1 -1
- package/dist/esm/Sprinkle/__tests__/mcp-adapter.test.js +7 -9
- package/dist/esm/Sprinkle/__tests__/mcp-adapter.test.js.map +1 -1
- package/dist/esm/Sprinkle/__tests__/native-script.test.js +388 -0
- package/dist/esm/Sprinkle/__tests__/native-script.test.js.map +1 -0
- package/dist/esm/Sprinkle/__tests__/utility-actions.test.js +365 -0
- package/dist/esm/Sprinkle/__tests__/utility-actions.test.js.map +1 -0
- package/dist/esm/Sprinkle/actions/builtin/addressbook-actions.js +159 -0
- package/dist/esm/Sprinkle/actions/builtin/addressbook-actions.js.map +1 -0
- package/dist/esm/Sprinkle/actions/builtin/index.js +8 -3
- package/dist/esm/Sprinkle/actions/builtin/index.js.map +1 -1
- package/dist/esm/Sprinkle/actions/builtin/native-script.js +133 -0
- package/dist/esm/Sprinkle/actions/builtin/native-script.js.map +1 -0
- package/dist/esm/Sprinkle/actions/builtin/utility-actions.js +213 -0
- package/dist/esm/Sprinkle/actions/builtin/utility-actions.js.map +1 -0
- package/dist/esm/Sprinkle/actions/cli-adapter.js +20 -2
- package/dist/esm/Sprinkle/actions/cli-adapter.js.map +1 -1
- package/dist/esm/Sprinkle/actions/index.js +1 -1
- package/dist/esm/Sprinkle/actions/index.js.map +1 -1
- package/dist/esm/Sprinkle/actions/mcp-adapter.js +145 -5
- package/dist/esm/Sprinkle/actions/mcp-adapter.js.map +1 -1
- package/dist/esm/Sprinkle/index.js +260 -9
- package/dist/esm/Sprinkle/index.js.map +1 -1
- package/dist/esm/Sprinkle/schemas.js +16 -0
- package/dist/esm/Sprinkle/schemas.js.map +1 -1
- package/dist/types/Sprinkle/actions/builtin/addressbook-actions.d.ts +50 -0
- package/dist/types/Sprinkle/actions/builtin/addressbook-actions.d.ts.map +1 -0
- package/dist/types/Sprinkle/actions/builtin/index.d.ts +6 -2
- package/dist/types/Sprinkle/actions/builtin/index.d.ts.map +1 -1
- package/dist/types/Sprinkle/actions/builtin/native-script.d.ts +27 -0
- package/dist/types/Sprinkle/actions/builtin/native-script.d.ts.map +1 -0
- package/dist/types/Sprinkle/actions/builtin/utility-actions.d.ts +48 -0
- package/dist/types/Sprinkle/actions/builtin/utility-actions.d.ts.map +1 -0
- package/dist/types/Sprinkle/actions/cli-adapter.d.ts.map +1 -1
- package/dist/types/Sprinkle/actions/index.d.ts +2 -1
- package/dist/types/Sprinkle/actions/index.d.ts.map +1 -1
- package/dist/types/Sprinkle/actions/mcp-adapter.d.ts +24 -0
- package/dist/types/Sprinkle/actions/mcp-adapter.d.ts.map +1 -1
- package/dist/types/Sprinkle/index.d.ts +5 -2
- package/dist/types/Sprinkle/index.d.ts.map +1 -1
- package/dist/types/Sprinkle/schemas.d.ts +72 -0
- package/dist/types/Sprinkle/schemas.d.ts.map +1 -1
- package/dist/types/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/Sprinkle/__tests__/builtin-actions.test.ts +4 -4
- package/src/Sprinkle/__tests__/cli-adapter.test.ts +24 -3
- package/src/Sprinkle/__tests__/fill-in-struct.test.ts +23 -1
- package/src/Sprinkle/__tests__/mcp-adapter.test.ts +7 -5
- package/src/Sprinkle/__tests__/native-script.test.ts +341 -0
- package/src/Sprinkle/__tests__/utility-actions.test.ts +348 -0
- package/src/Sprinkle/actions/builtin/addressbook-actions.ts +168 -0
- package/src/Sprinkle/actions/builtin/index.ts +41 -2
- package/src/Sprinkle/actions/builtin/native-script.ts +165 -0
- package/src/Sprinkle/actions/builtin/utility-actions.ts +285 -0
- package/src/Sprinkle/actions/cli-adapter.ts +18 -2
- package/src/Sprinkle/actions/index.ts +2 -1
- package/src/Sprinkle/actions/mcp-adapter.ts +179 -4
- package/src/Sprinkle/index.ts +264 -3
- package/src/Sprinkle/schemas.ts +20 -0
|
@@ -9,6 +9,8 @@ var _exportNames = {
|
|
|
9
9
|
NetworkSchema: true,
|
|
10
10
|
MultisigScriptModule: true,
|
|
11
11
|
MultisigScript: true,
|
|
12
|
+
NativeScriptInputSchema: true,
|
|
13
|
+
NativeScriptsParam: true,
|
|
12
14
|
ProviderSettingsSchema: true,
|
|
13
15
|
WalletSettingsSchema: true,
|
|
14
16
|
isOptional: true,
|
|
@@ -52,7 +54,9 @@ var _exportNames = {
|
|
|
52
54
|
createMcpServer: true,
|
|
53
55
|
runMcp: true,
|
|
54
56
|
getBuiltinActions: true,
|
|
55
|
-
promptAndExecute: true
|
|
57
|
+
promptAndExecute: true,
|
|
58
|
+
toNativeScript: true,
|
|
59
|
+
completeWithScripts: true
|
|
56
60
|
};
|
|
57
61
|
Object.defineProperty(exports, "ActionError", {
|
|
58
62
|
enumerable: true,
|
|
@@ -96,6 +100,18 @@ Object.defineProperty(exports, "MultisigScriptModule", {
|
|
|
96
100
|
return _schemas.MultisigScriptModule;
|
|
97
101
|
}
|
|
98
102
|
});
|
|
103
|
+
Object.defineProperty(exports, "NativeScriptInputSchema", {
|
|
104
|
+
enumerable: true,
|
|
105
|
+
get: function () {
|
|
106
|
+
return _schemas.NativeScriptInputSchema;
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
Object.defineProperty(exports, "NativeScriptsParam", {
|
|
110
|
+
enumerable: true,
|
|
111
|
+
get: function () {
|
|
112
|
+
return _schemas.NativeScriptsParam;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
99
115
|
Object.defineProperty(exports, "NetworkSchema", {
|
|
100
116
|
enumerable: true,
|
|
101
117
|
get: function () {
|
|
@@ -139,6 +155,12 @@ Object.defineProperty(exports, "coerceValue", {
|
|
|
139
155
|
return _index2.coerceValue;
|
|
140
156
|
}
|
|
141
157
|
});
|
|
158
|
+
Object.defineProperty(exports, "completeWithScripts", {
|
|
159
|
+
enumerable: true,
|
|
160
|
+
get: function () {
|
|
161
|
+
return _index2.completeWithScripts;
|
|
162
|
+
}
|
|
163
|
+
});
|
|
142
164
|
Object.defineProperty(exports, "createMcpServer", {
|
|
143
165
|
enumerable: true,
|
|
144
166
|
get: function () {
|
|
@@ -331,6 +353,12 @@ Object.defineProperty(exports, "runMcp", {
|
|
|
331
353
|
return _index2.runMcp;
|
|
332
354
|
}
|
|
333
355
|
});
|
|
356
|
+
Object.defineProperty(exports, "toNativeScript", {
|
|
357
|
+
enumerable: true,
|
|
358
|
+
get: function () {
|
|
359
|
+
return _index2.toNativeScript;
|
|
360
|
+
}
|
|
361
|
+
});
|
|
334
362
|
Object.defineProperty(exports, "typeboxToJsonSchema", {
|
|
335
363
|
enumerable: true,
|
|
336
364
|
get: function () {
|
|
@@ -371,6 +399,7 @@ var _txDialog = require("./tx-dialog.js");
|
|
|
371
399
|
var _index = require("./menus/index.js");
|
|
372
400
|
var _formatting = require("./utils/formatting.js");
|
|
373
401
|
var _index2 = require("./actions/index.js");
|
|
402
|
+
var _utilityActions = require("./actions/builtin/utility-actions.js");
|
|
374
403
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
375
404
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
376
405
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
@@ -390,6 +419,7 @@ class Sprinkle {
|
|
|
390
419
|
_defineProperty(this, "settings", {});
|
|
391
420
|
_defineProperty(this, "type", void 0);
|
|
392
421
|
_defineProperty(this, "defaults", {});
|
|
422
|
+
_defineProperty(this, "addressbook", {});
|
|
393
423
|
_defineProperty(this, "options", void 0);
|
|
394
424
|
_defineProperty(this, "profileId", "");
|
|
395
425
|
_defineProperty(this, "profileMeta", {
|
|
@@ -472,6 +502,7 @@ class Sprinkle {
|
|
|
472
502
|
this.profileMeta = parsed.meta;
|
|
473
503
|
this.settings = await this.decryptSettings(parsed.settings);
|
|
474
504
|
this.defaults = parsed.defaults ?? {};
|
|
505
|
+
this.addressbook = parsed.addressbook ?? {};
|
|
475
506
|
// Update active profile pointer
|
|
476
507
|
fs.writeFileSync(Sprinkle.activeProfilePath(this.storagePath), id, "utf-8");
|
|
477
508
|
}
|
|
@@ -491,7 +522,8 @@ class Sprinkle {
|
|
|
491
522
|
const jsonContent = JSON.stringify({
|
|
492
523
|
meta: this.profileMeta,
|
|
493
524
|
settings: settingsToSave,
|
|
494
|
-
defaults: this.defaults
|
|
525
|
+
defaults: this.defaults,
|
|
526
|
+
addressbook: this.addressbook
|
|
495
527
|
}, _encryption.bigIntReplacer, 2);
|
|
496
528
|
fs.writeFileSync(filePath, jsonContent, "utf-8");
|
|
497
529
|
}
|
|
@@ -568,7 +600,8 @@ class Sprinkle {
|
|
|
568
600
|
updatedAt: now
|
|
569
601
|
},
|
|
570
602
|
settings: parsed.settings,
|
|
571
|
-
defaults: parsed.defaults ?? {}
|
|
603
|
+
defaults: parsed.defaults ?? {},
|
|
604
|
+
addressbook: parsed.addressbook ?? {}
|
|
572
605
|
};
|
|
573
606
|
fs.mkdirSync(profilesDir, {
|
|
574
607
|
recursive: true
|
|
@@ -643,7 +676,8 @@ class Sprinkle {
|
|
|
643
676
|
updatedAt: now
|
|
644
677
|
},
|
|
645
678
|
settings: settingsToSave,
|
|
646
|
-
defaults: this.defaults
|
|
679
|
+
defaults: this.defaults,
|
|
680
|
+
addressbook: this.addressbook
|
|
647
681
|
}, _encryption.bigIntReplacer, 2);
|
|
648
682
|
fs.writeFileSync(path.join(profilesDir, `${id}.json`), jsonContent, "utf-8");
|
|
649
683
|
console.log(`Profile "${name}" created as a copy.`);
|
|
@@ -737,6 +771,10 @@ class Sprinkle {
|
|
|
737
771
|
value: -1
|
|
738
772
|
});
|
|
739
773
|
} else {
|
|
774
|
+
choices.push({
|
|
775
|
+
name: "Utilities",
|
|
776
|
+
value: -6
|
|
777
|
+
});
|
|
740
778
|
choices.push({
|
|
741
779
|
name: "Settings & Profiles",
|
|
742
780
|
value: -5
|
|
@@ -760,6 +798,58 @@ class Sprinkle {
|
|
|
760
798
|
return;
|
|
761
799
|
}
|
|
762
800
|
const selection = selectionResult;
|
|
801
|
+
if (selection === -6) {
|
|
802
|
+
const utilitiesMenu = {
|
|
803
|
+
title: "Utilities",
|
|
804
|
+
items: [{
|
|
805
|
+
title: "Mint Token",
|
|
806
|
+
action: async () => {
|
|
807
|
+
const result = await (0, _index2.promptAndExecute)(this, _utilityActions.mintToken);
|
|
808
|
+
if (!result.success) {
|
|
809
|
+
if (result.error.code === "USER_CANCELLED") return;
|
|
810
|
+
console.error(`\nError (${result.error.code}): ${result.error.message}\n`);
|
|
811
|
+
return;
|
|
812
|
+
}
|
|
813
|
+
const data = result.data;
|
|
814
|
+
console.log(`\nPolicy: ${data.policyId}\nToken: ${data.tokenName}\nAmount: ${data.amount}\n`);
|
|
815
|
+
const blaze = await Sprinkle.GetBlaze(this.settings.network, this.settings.provider, this.settings.wallet);
|
|
816
|
+
const tx = _sdk.Core.Transaction.fromCbor(_sdk.Core.TxCBOR(data.txCbor));
|
|
817
|
+
await this.TxDialog(blaze, tx);
|
|
818
|
+
}
|
|
819
|
+
}, {
|
|
820
|
+
title: "Simple Send",
|
|
821
|
+
action: async () => {
|
|
822
|
+
const result = await (0, _index2.promptAndExecute)(this, _utilityActions.simpleSend);
|
|
823
|
+
if (!result.success) {
|
|
824
|
+
if (result.error.code === "USER_CANCELLED") return;
|
|
825
|
+
console.error(`\nError (${result.error.code}): ${result.error.message}\n`);
|
|
826
|
+
return;
|
|
827
|
+
}
|
|
828
|
+
const data = result.data;
|
|
829
|
+
const blaze = await Sprinkle.GetBlaze(this.settings.network, this.settings.provider, this.settings.wallet);
|
|
830
|
+
const tx = _sdk.Core.Transaction.fromCbor(_sdk.Core.TxCBOR(data.txCbor));
|
|
831
|
+
await this.TxDialog(blaze, tx);
|
|
832
|
+
}
|
|
833
|
+
}, {
|
|
834
|
+
title: "Register Stake Script",
|
|
835
|
+
action: async () => {
|
|
836
|
+
const result = await (0, _index2.promptAndExecute)(this, _utilityActions.registerStakeScript);
|
|
837
|
+
if (!result.success) {
|
|
838
|
+
if (result.error.code === "USER_CANCELLED") return;
|
|
839
|
+
console.error(`\nError (${result.error.code}): ${result.error.message}\n`);
|
|
840
|
+
return;
|
|
841
|
+
}
|
|
842
|
+
const data = result.data;
|
|
843
|
+
const blaze = await Sprinkle.GetBlaze(this.settings.network, this.settings.provider, this.settings.wallet);
|
|
844
|
+
const tx = _sdk.Core.Transaction.fromCbor(_sdk.Core.TxCBOR(data.txCbor));
|
|
845
|
+
await this.TxDialog(blaze, tx);
|
|
846
|
+
}
|
|
847
|
+
}]
|
|
848
|
+
};
|
|
849
|
+
await this._showMenu(utilitiesMenu, false, [...path, "Utilities"], true);
|
|
850
|
+
await this._showMenu(menu, main, path, true);
|
|
851
|
+
return;
|
|
852
|
+
}
|
|
763
853
|
if (selection === -5) {
|
|
764
854
|
const settingsMenu = {
|
|
765
855
|
title: "Settings & Profiles",
|
|
@@ -826,6 +916,113 @@ class Sprinkle {
|
|
|
826
916
|
action: async () => {
|
|
827
917
|
await this.deleteProfile();
|
|
828
918
|
}
|
|
919
|
+
}, {
|
|
920
|
+
title: "Addressbook",
|
|
921
|
+
items: [{
|
|
922
|
+
title: "View entries",
|
|
923
|
+
action: async () => {
|
|
924
|
+
const entries = Object.entries(this.addressbook);
|
|
925
|
+
if (entries.length === 0) {
|
|
926
|
+
console.log("Addressbook is empty.");
|
|
927
|
+
} else {
|
|
928
|
+
for (const [name, ms] of entries) {
|
|
929
|
+
const json = JSON.stringify(ms, _encryption.bigIntReplacer, 2);
|
|
930
|
+
let hashStr = "unknown";
|
|
931
|
+
try {
|
|
932
|
+
hashStr = (0, _index2.toNativeScript)(ms).hash();
|
|
933
|
+
} catch {/* skip */}
|
|
934
|
+
console.log(_yoctocolorsCjs.default.bold(name) + " " + _yoctocolorsCjs.default.dim(hashStr));
|
|
935
|
+
console.log(json);
|
|
936
|
+
console.log();
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
await (0, _prompts.selectWithClear)({
|
|
940
|
+
message: "Press Enter to continue...",
|
|
941
|
+
choices: [{
|
|
942
|
+
name: "Continue",
|
|
943
|
+
value: "continue"
|
|
944
|
+
}]
|
|
945
|
+
});
|
|
946
|
+
}
|
|
947
|
+
}, {
|
|
948
|
+
title: "Add entry",
|
|
949
|
+
action: async () => {
|
|
950
|
+
const name = await (0, _prompts.inputCancellable)({
|
|
951
|
+
message: "Entry name:",
|
|
952
|
+
validate: v => v.trim().length > 0 ? true : "Name cannot be empty"
|
|
953
|
+
});
|
|
954
|
+
if (name === null) return;
|
|
955
|
+
if (this.addressbook[name]) {
|
|
956
|
+
const overwrite = await (0, _prompts.confirmCancellable)({
|
|
957
|
+
message: `Entry "${name}" already exists. Overwrite?`,
|
|
958
|
+
default: false
|
|
959
|
+
});
|
|
960
|
+
if (!overwrite) return;
|
|
961
|
+
}
|
|
962
|
+
try {
|
|
963
|
+
const script = await this.FillInStruct(_schemas.MultisigScript);
|
|
964
|
+
this.addressbook[name] = script;
|
|
965
|
+
this.saveSettings();
|
|
966
|
+
console.log(`Added "${name}" to addressbook.`);
|
|
967
|
+
} catch (e) {
|
|
968
|
+
if (e instanceof _types.UserCancelledError) return;
|
|
969
|
+
throw e;
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
}, {
|
|
973
|
+
title: "Edit entry",
|
|
974
|
+
action: async () => {
|
|
975
|
+
const entries = Object.keys(this.addressbook);
|
|
976
|
+
if (entries.length === 0) {
|
|
977
|
+
console.log("Addressbook is empty.");
|
|
978
|
+
return;
|
|
979
|
+
}
|
|
980
|
+
const selected = await (0, _prompts.selectCancellable)({
|
|
981
|
+
message: "Select entry to edit:",
|
|
982
|
+
choices: entries.map(n => ({
|
|
983
|
+
name: n,
|
|
984
|
+
value: n
|
|
985
|
+
}))
|
|
986
|
+
});
|
|
987
|
+
if (selected === null) return;
|
|
988
|
+
const editName = selected;
|
|
989
|
+
try {
|
|
990
|
+
const updated = await this.EditStruct(_schemas.MultisigScript, this.addressbook[editName]);
|
|
991
|
+
this.addressbook[editName] = updated;
|
|
992
|
+
this.saveSettings();
|
|
993
|
+
console.log(`Updated "${editName}".`);
|
|
994
|
+
} catch (e) {
|
|
995
|
+
if (e instanceof _types.UserCancelledError) return;
|
|
996
|
+
throw e;
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
}, {
|
|
1000
|
+
title: "Delete entry",
|
|
1001
|
+
action: async () => {
|
|
1002
|
+
const entries = Object.keys(this.addressbook);
|
|
1003
|
+
if (entries.length === 0) {
|
|
1004
|
+
console.log("Addressbook is empty.");
|
|
1005
|
+
return;
|
|
1006
|
+
}
|
|
1007
|
+
const delSelected = await (0, _prompts.selectCancellable)({
|
|
1008
|
+
message: "Select entry to delete:",
|
|
1009
|
+
choices: entries.map(n => ({
|
|
1010
|
+
name: n,
|
|
1011
|
+
value: n
|
|
1012
|
+
}))
|
|
1013
|
+
});
|
|
1014
|
+
if (delSelected === null) return;
|
|
1015
|
+
const delName = delSelected;
|
|
1016
|
+
const confirmed = await (0, _prompts.confirmCancellable)({
|
|
1017
|
+
message: `Delete "${delName}"?`,
|
|
1018
|
+
default: false
|
|
1019
|
+
});
|
|
1020
|
+
if (!confirmed) return;
|
|
1021
|
+
delete this.addressbook[delName];
|
|
1022
|
+
this.saveSettings();
|
|
1023
|
+
console.log(`Deleted "${delName}".`);
|
|
1024
|
+
}
|
|
1025
|
+
}]
|
|
829
1026
|
}]
|
|
830
1027
|
};
|
|
831
1028
|
await this._showMenu(settingsMenu, false, [...path, "Settings & Profiles"], true);
|
|
@@ -964,7 +1161,8 @@ class Sprinkle {
|
|
|
964
1161
|
const profileData = {
|
|
965
1162
|
meta,
|
|
966
1163
|
settings: initialSettings ?? {},
|
|
967
|
-
defaults: {}
|
|
1164
|
+
defaults: {},
|
|
1165
|
+
addressbook: {}
|
|
968
1166
|
};
|
|
969
1167
|
fs.writeFileSync(path.join(profilesDir, `${id}.json`), JSON.stringify(profileData, _encryption.bigIntReplacer, 2), "utf-8");
|
|
970
1168
|
return {
|
|
@@ -1309,7 +1507,67 @@ class Sprinkle {
|
|
|
1309
1507
|
if (!resolvedType) {
|
|
1310
1508
|
throw new Error(`Could not resolve type ${type["$ref"]} at ${path.join(".")}`);
|
|
1311
1509
|
}
|
|
1312
|
-
|
|
1510
|
+
|
|
1511
|
+
// Addressbook integration for MultisigScript fields
|
|
1512
|
+
if (type["$ref"] === "MultisigScript" && Object.keys(this.addressbook).length > 0) {
|
|
1513
|
+
const sourceChoice = await (0, _prompts.selectWithClear)({
|
|
1514
|
+
message: "Select source for native script:",
|
|
1515
|
+
choices: [{
|
|
1516
|
+
name: "Enter manually",
|
|
1517
|
+
value: "manual"
|
|
1518
|
+
}, {
|
|
1519
|
+
name: "Select from addressbook",
|
|
1520
|
+
value: "addressbook"
|
|
1521
|
+
}]
|
|
1522
|
+
});
|
|
1523
|
+
if (sourceChoice === null) throw new _types.UserCancelledError();
|
|
1524
|
+
if (sourceChoice === "addressbook") {
|
|
1525
|
+
const entries = Object.entries(this.addressbook);
|
|
1526
|
+
const abChoices = entries.map(([name, ms]) => {
|
|
1527
|
+
let hashStr = "";
|
|
1528
|
+
try {
|
|
1529
|
+
hashStr = " " + _yoctocolorsCjs.default.dim((0, _index2.toNativeScript)(ms).hash());
|
|
1530
|
+
} catch {/* skip */}
|
|
1531
|
+
return {
|
|
1532
|
+
name: name + hashStr,
|
|
1533
|
+
value: name
|
|
1534
|
+
};
|
|
1535
|
+
});
|
|
1536
|
+
const selected = await (0, _prompts.selectWithClear)({
|
|
1537
|
+
message: "Select addressbook entry:",
|
|
1538
|
+
choices: abChoices
|
|
1539
|
+
});
|
|
1540
|
+
if (selected === null) throw new _types.UserCancelledError();
|
|
1541
|
+
return this.addressbook[selected];
|
|
1542
|
+
}
|
|
1543
|
+
}
|
|
1544
|
+
const result = await this._fillInStruct(resolvedType, path, defs, def);
|
|
1545
|
+
|
|
1546
|
+
// Offer to save manually entered MultisigScript to addressbook
|
|
1547
|
+
if (type["$ref"] === "MultisigScript" && result !== undefined) {
|
|
1548
|
+
const shouldSave = await (0, _prompts.selectWithClear)({
|
|
1549
|
+
message: "Save this script to the addressbook?",
|
|
1550
|
+
choices: [{
|
|
1551
|
+
name: "No",
|
|
1552
|
+
value: false
|
|
1553
|
+
}, {
|
|
1554
|
+
name: "Yes",
|
|
1555
|
+
value: true
|
|
1556
|
+
}]
|
|
1557
|
+
});
|
|
1558
|
+
if (shouldSave) {
|
|
1559
|
+
const entryName = await (0, _prompts.inputCancellable)({
|
|
1560
|
+
message: "Addressbook entry name:",
|
|
1561
|
+
validate: v => v.trim().length > 0 ? true : "Name cannot be empty"
|
|
1562
|
+
});
|
|
1563
|
+
if (entryName !== null) {
|
|
1564
|
+
this.addressbook[entryName] = result;
|
|
1565
|
+
this.saveSettings();
|
|
1566
|
+
console.log(`Saved "${entryName}" to addressbook.`);
|
|
1567
|
+
}
|
|
1568
|
+
}
|
|
1569
|
+
}
|
|
1570
|
+
return result;
|
|
1313
1571
|
}
|
|
1314
1572
|
if ((0, _typeGuards.isOptional)(type)) {
|
|
1315
1573
|
const pathDisplay = (0, _formatting.formatPath)(path) || "value";
|
|
@@ -1454,6 +1712,24 @@ class Sprinkle {
|
|
|
1454
1712
|
}
|
|
1455
1713
|
return BigInt(answer);
|
|
1456
1714
|
}
|
|
1715
|
+
if ((0, _typeGuards.isBoolean)(type)) {
|
|
1716
|
+
const pathDisplay = (0, _formatting.formatPath)(path) || "value";
|
|
1717
|
+
const answer = await (0, _prompts.selectWithClear)({
|
|
1718
|
+
message: Sprinkle.ExtractMessage(type, `${pathDisplay}?`),
|
|
1719
|
+
choices: [{
|
|
1720
|
+
name: "Yes",
|
|
1721
|
+
value: true
|
|
1722
|
+
}, {
|
|
1723
|
+
name: "No",
|
|
1724
|
+
value: false
|
|
1725
|
+
}],
|
|
1726
|
+
default: def !== undefined ? def : (0, _typeGuards.hasDefault)(type) ? (0, _typeGuards.getDefault)(type) : undefined
|
|
1727
|
+
});
|
|
1728
|
+
if (answer === null) {
|
|
1729
|
+
throw new _types.UserCancelledError();
|
|
1730
|
+
}
|
|
1731
|
+
return answer;
|
|
1732
|
+
}
|
|
1457
1733
|
if ((0, _typeGuards.isLiteral)(type)) {
|
|
1458
1734
|
return type.const;
|
|
1459
1735
|
}
|