@sundaeswap/sprinkles 0.2.0 → 0.2.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.
@@ -127,5 +127,34 @@ _bunTest.mock.module("@inquirer/prompts", () => ({
127
127
  // Second call should have the first input as default
128
128
  (0, _bunTest.expect)(mockInput.mock.calls[1][0].default).toBe("first-input");
129
129
  });
130
+ (0, _bunTest.test)("fills a tuple with same-type elements", async () => {
131
+ const schema = _index.Type.Tuple([_index.Type.String(), _index.Type.String()]);
132
+ mockInput.mockResolvedValueOnce("policyId").mockResolvedValueOnce("assetName");
133
+ const result = await sprinkle.FillInStruct(schema);
134
+ (0, _bunTest.expect)(result).toEqual(["policyId", "assetName"]);
135
+ });
136
+ (0, _bunTest.test)("fills a tuple with mixed types", async () => {
137
+ const schema = _index.Type.Tuple([_index.Type.String(), _index.Type.BigInt()]);
138
+ mockInput.mockResolvedValueOnce("label").mockResolvedValueOnce("42");
139
+ const result = await sprinkle.FillInStruct(schema);
140
+ (0, _bunTest.expect)(result).toEqual(["label", 42n]);
141
+ });
142
+ (0, _bunTest.test)("fills a tuple with default values", async () => {
143
+ const schema = _index.Type.Tuple([_index.Type.String(), _index.Type.BigInt()]);
144
+ mockInput.mockResolvedValueOnce("new-label").mockResolvedValueOnce("99");
145
+ await sprinkle.FillInStruct(schema, ["default-label", 50n]);
146
+ (0, _bunTest.expect)(mockInput.mock.calls[0][0].default).toBe("default-label");
147
+ (0, _bunTest.expect)(mockInput.mock.calls[1][0].default).toBe("50");
148
+ });
149
+ (0, _bunTest.test)("fills a tuple nested in an object", async () => {
150
+ const schema = _index.Type.Object({
151
+ asset: _index.Type.Tuple([_index.Type.String(), _index.Type.String()])
152
+ });
153
+ mockInput.mockResolvedValueOnce("policy123").mockResolvedValueOnce("token456");
154
+ const result = await sprinkle.FillInStruct(schema);
155
+ (0, _bunTest.expect)(result).toEqual({
156
+ asset: ["policy123", "token456"]
157
+ });
158
+ });
130
159
  });
131
160
  //# sourceMappingURL=fill-in-struct.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fill-in-struct.test.js","names":["_bunTest","require","_index","mockSelect","mock","mockInput","module","select","input","describe","sprinkle","beforeEach","schema","Type","Object","placeholder","String","Sprinkle","mockClear","test","mockResolvedValueOnce","result","FillInStruct","expect","toBe","title","calls","message","BigInt","Literal","not","toHaveBeenCalled","name","age","toEqual","Union","type","value","count","mockImplementationOnce","opts","choices","Array","default","Boolean","rejects","toThrow","outer","inner","defaults"],"sources":["../../../../src/Sprinkle/__tests__/fill-in-struct.test.ts"],"sourcesContent":["import { describe, expect, test, mock, beforeEach } from \"bun:test\";\nimport { Sprinkle, Type } from \"../index.js\";\n\n// Mock @inquirer/prompts\nconst mockSelect = mock();\nconst mockInput = mock();\n\nmock.module(\"@inquirer/prompts\", () => ({\n select: mockSelect,\n input: mockInput,\n}));\n\ndescribe(\"FillInStruct\", () => {\n let sprinkle: Sprinkle<any>;\n\n beforeEach(() => {\n const schema = Type.Object({ placeholder: Type.String() });\n sprinkle = new Sprinkle(schema, \"/tmp/test\");\n mockSelect.mockClear();\n mockInput.mockClear();\n });\n\n test(\"fills a simple string field\", async () => {\n mockInput.mockResolvedValueOnce(\"hello\");\n\n const result = await sprinkle.FillInStruct(Type.String());\n expect(result).toBe(\"hello\");\n });\n\n test(\"fills a string with title as prompt\", async () => {\n mockInput.mockResolvedValueOnce(\"world\");\n\n await sprinkle.FillInStruct(Type.String({ title: \"Enter name\" }));\n expect(mockInput.mock.calls[0][0].message).toBe(\"Enter name\");\n });\n\n test(\"fills a bigint field\", async () => {\n mockInput.mockResolvedValueOnce(\"42\");\n\n const result = await sprinkle.FillInStruct(Type.BigInt());\n expect(result).toBe(42n);\n });\n\n test(\"fills a literal field without prompting\", async () => {\n const result = await sprinkle.FillInStruct(Type.Literal(\"fixed\"));\n expect(result).toBe(\"fixed\");\n expect(mockInput).not.toHaveBeenCalled();\n expect(mockSelect).not.toHaveBeenCalled();\n });\n\n test(\"fills an object with multiple fields\", async () => {\n const schema = Type.Object({\n name: Type.String(),\n age: Type.BigInt(),\n });\n\n mockInput\n .mockResolvedValueOnce(\"Alice\")\n .mockResolvedValueOnce(\"30\");\n\n const result = await sprinkle.FillInStruct(schema);\n expect(result).toEqual({ name: \"Alice\", age: 30n });\n });\n\n test(\"fills a union type by selecting variant then filling\", async () => {\n const schema = Type.Union([\n Type.Object({\n type: Type.Literal(\"a\"),\n value: Type.String(),\n }),\n Type.Object({\n type: Type.Literal(\"b\"),\n count: Type.BigInt(),\n }),\n ]);\n\n // Select first variant (the Object with type \"a\")\n mockSelect.mockImplementationOnce(async (opts: any) => {\n return opts.choices[0].value;\n });\n mockInput.mockResolvedValueOnce(\"test-value\");\n\n const result = await sprinkle.FillInStruct(schema);\n expect(result).toEqual({ type: \"a\", value: \"test-value\" });\n });\n\n test(\"fills an array with items\", async () => {\n const schema = Type.Array(Type.String());\n\n mockInput.mockResolvedValueOnce(\"first\");\n mockSelect.mockResolvedValueOnce(true); // add another\n mockInput.mockResolvedValueOnce(\"second\");\n mockSelect.mockResolvedValueOnce(false); // stop\n\n const result = await sprinkle.FillInStruct(schema);\n expect(result).toEqual([\"first\", \"second\"]);\n });\n\n test(\"fills an array with single item\", async () => {\n const schema = Type.Array(Type.String());\n\n mockInput.mockResolvedValueOnce(\"only\");\n mockSelect.mockResolvedValueOnce(false); // stop\n\n const result = await sprinkle.FillInStruct(schema);\n expect(result).toEqual([\"only\"]);\n });\n\n test(\"uses default value for string\", async () => {\n mockInput.mockResolvedValueOnce(\"used-default\");\n\n await sprinkle.FillInStruct(\n Type.String(),\n \"my-default\" as any,\n );\n\n expect(mockInput.mock.calls[0][0].default).toBe(\"my-default\");\n });\n\n test(\"uses default value for bigint\", async () => {\n mockInput.mockResolvedValueOnce(\"99\");\n\n await sprinkle.FillInStruct(Type.BigInt(), 99n as any);\n\n expect(mockInput.mock.calls[0][0].default).toBe(\"99\");\n });\n\n test(\"throws for unsupported types\", async () => {\n expect(\n sprinkle.FillInStruct(Type.Boolean() as any),\n ).rejects.toThrow(\"Unable to fill in struct\");\n });\n\n test(\"fills nested objects\", async () => {\n const schema = Type.Object({\n outer: Type.Object({\n inner: Type.String(),\n }),\n });\n\n mockInput.mockResolvedValueOnce(\"deep-value\");\n\n const result = await sprinkle.FillInStruct(schema);\n expect(result).toEqual({ outer: { inner: \"deep-value\" } });\n });\n\n test(\"remembers last string input as default\", async () => {\n mockInput\n .mockResolvedValueOnce(\"first-input\")\n .mockResolvedValueOnce(\"second-input\");\n\n await sprinkle.FillInStruct(Type.String());\n expect(sprinkle.defaults[\"string\"]).toBe(\"first-input\");\n\n await sprinkle.FillInStruct(Type.String());\n // Second call should have the first input as default\n expect(mockInput.mock.calls[1][0].default).toBe(\"first-input\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"fill-in-struct.test.js","names":["_bunTest","require","_index","mockSelect","mock","mockInput","module","select","input","describe","sprinkle","beforeEach","schema","Type","Object","placeholder","String","Sprinkle","mockClear","test","mockResolvedValueOnce","result","FillInStruct","expect","toBe","title","calls","message","BigInt","Literal","not","toHaveBeenCalled","name","age","toEqual","Union","type","value","count","mockImplementationOnce","opts","choices","Array","default","Boolean","rejects","toThrow","outer","inner","defaults","Tuple","asset"],"sources":["../../../../src/Sprinkle/__tests__/fill-in-struct.test.ts"],"sourcesContent":["import { describe, expect, test, mock, beforeEach } from \"bun:test\";\nimport { Sprinkle, Type } from \"../index.js\";\n\n// Mock @inquirer/prompts\nconst mockSelect = mock();\nconst mockInput = mock();\n\nmock.module(\"@inquirer/prompts\", () => ({\n select: mockSelect,\n input: mockInput,\n}));\n\ndescribe(\"FillInStruct\", () => {\n let sprinkle: Sprinkle<any>;\n\n beforeEach(() => {\n const schema = Type.Object({ placeholder: Type.String() });\n sprinkle = new Sprinkle(schema, \"/tmp/test\");\n mockSelect.mockClear();\n mockInput.mockClear();\n });\n\n test(\"fills a simple string field\", async () => {\n mockInput.mockResolvedValueOnce(\"hello\");\n\n const result = await sprinkle.FillInStruct(Type.String());\n expect(result).toBe(\"hello\");\n });\n\n test(\"fills a string with title as prompt\", async () => {\n mockInput.mockResolvedValueOnce(\"world\");\n\n await sprinkle.FillInStruct(Type.String({ title: \"Enter name\" }));\n expect(mockInput.mock.calls[0][0].message).toBe(\"Enter name\");\n });\n\n test(\"fills a bigint field\", async () => {\n mockInput.mockResolvedValueOnce(\"42\");\n\n const result = await sprinkle.FillInStruct(Type.BigInt());\n expect(result).toBe(42n);\n });\n\n test(\"fills a literal field without prompting\", async () => {\n const result = await sprinkle.FillInStruct(Type.Literal(\"fixed\"));\n expect(result).toBe(\"fixed\");\n expect(mockInput).not.toHaveBeenCalled();\n expect(mockSelect).not.toHaveBeenCalled();\n });\n\n test(\"fills an object with multiple fields\", async () => {\n const schema = Type.Object({\n name: Type.String(),\n age: Type.BigInt(),\n });\n\n mockInput\n .mockResolvedValueOnce(\"Alice\")\n .mockResolvedValueOnce(\"30\");\n\n const result = await sprinkle.FillInStruct(schema);\n expect(result).toEqual({ name: \"Alice\", age: 30n });\n });\n\n test(\"fills a union type by selecting variant then filling\", async () => {\n const schema = Type.Union([\n Type.Object({\n type: Type.Literal(\"a\"),\n value: Type.String(),\n }),\n Type.Object({\n type: Type.Literal(\"b\"),\n count: Type.BigInt(),\n }),\n ]);\n\n // Select first variant (the Object with type \"a\")\n mockSelect.mockImplementationOnce(async (opts: any) => {\n return opts.choices[0].value;\n });\n mockInput.mockResolvedValueOnce(\"test-value\");\n\n const result = await sprinkle.FillInStruct(schema);\n expect(result).toEqual({ type: \"a\", value: \"test-value\" });\n });\n\n test(\"fills an array with items\", async () => {\n const schema = Type.Array(Type.String());\n\n mockInput.mockResolvedValueOnce(\"first\");\n mockSelect.mockResolvedValueOnce(true); // add another\n mockInput.mockResolvedValueOnce(\"second\");\n mockSelect.mockResolvedValueOnce(false); // stop\n\n const result = await sprinkle.FillInStruct(schema);\n expect(result).toEqual([\"first\", \"second\"]);\n });\n\n test(\"fills an array with single item\", async () => {\n const schema = Type.Array(Type.String());\n\n mockInput.mockResolvedValueOnce(\"only\");\n mockSelect.mockResolvedValueOnce(false); // stop\n\n const result = await sprinkle.FillInStruct(schema);\n expect(result).toEqual([\"only\"]);\n });\n\n test(\"uses default value for string\", async () => {\n mockInput.mockResolvedValueOnce(\"used-default\");\n\n await sprinkle.FillInStruct(\n Type.String(),\n \"my-default\" as any,\n );\n\n expect(mockInput.mock.calls[0][0].default).toBe(\"my-default\");\n });\n\n test(\"uses default value for bigint\", async () => {\n mockInput.mockResolvedValueOnce(\"99\");\n\n await sprinkle.FillInStruct(Type.BigInt(), 99n as any);\n\n expect(mockInput.mock.calls[0][0].default).toBe(\"99\");\n });\n\n test(\"throws for unsupported types\", async () => {\n expect(\n sprinkle.FillInStruct(Type.Boolean() as any),\n ).rejects.toThrow(\"Unable to fill in struct\");\n });\n\n test(\"fills nested objects\", async () => {\n const schema = Type.Object({\n outer: Type.Object({\n inner: Type.String(),\n }),\n });\n\n mockInput.mockResolvedValueOnce(\"deep-value\");\n\n const result = await sprinkle.FillInStruct(schema);\n expect(result).toEqual({ outer: { inner: \"deep-value\" } });\n });\n\n test(\"remembers last string input as default\", async () => {\n mockInput\n .mockResolvedValueOnce(\"first-input\")\n .mockResolvedValueOnce(\"second-input\");\n\n await sprinkle.FillInStruct(Type.String());\n expect(sprinkle.defaults[\"string\"]).toBe(\"first-input\");\n\n await sprinkle.FillInStruct(Type.String());\n // Second call should have the first input as default\n expect(mockInput.mock.calls[1][0].default).toBe(\"first-input\");\n });\n\n test(\"fills a tuple with same-type elements\", async () => {\n const schema = Type.Tuple([Type.String(), Type.String()]);\n\n mockInput\n .mockResolvedValueOnce(\"policyId\")\n .mockResolvedValueOnce(\"assetName\");\n\n const result = await sprinkle.FillInStruct(schema);\n expect(result).toEqual([\"policyId\", \"assetName\"]);\n });\n\n test(\"fills a tuple with mixed types\", async () => {\n const schema = Type.Tuple([Type.String(), Type.BigInt()]);\n\n mockInput\n .mockResolvedValueOnce(\"label\")\n .mockResolvedValueOnce(\"42\");\n\n const result = await sprinkle.FillInStruct(schema);\n expect(result).toEqual([\"label\", 42n]);\n });\n\n test(\"fills a tuple with default values\", async () => {\n const schema = Type.Tuple([Type.String(), Type.BigInt()]);\n\n mockInput\n .mockResolvedValueOnce(\"new-label\")\n .mockResolvedValueOnce(\"99\");\n\n await sprinkle.FillInStruct(schema, [\"default-label\", 50n] as any);\n\n expect(mockInput.mock.calls[0][0].default).toBe(\"default-label\");\n expect(mockInput.mock.calls[1][0].default).toBe(\"50\");\n });\n\n test(\"fills a tuple nested in an object\", async () => {\n const schema = Type.Object({\n asset: Type.Tuple([Type.String(), Type.String()]),\n });\n\n mockInput\n .mockResolvedValueOnce(\"policy123\")\n .mockResolvedValueOnce(\"token456\");\n\n const result = await sprinkle.FillInStruct(schema);\n expect(result).toEqual({ asset: [\"policy123\", \"token456\"] });\n });\n});\n"],"mappings":";;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA;AACA,MAAME,UAAU,GAAG,IAAAC,aAAI,EAAC,CAAC;AACzB,MAAMC,SAAS,GAAG,IAAAD,aAAI,EAAC,CAAC;AAExBA,aAAI,CAACE,MAAM,CAAC,mBAAmB,EAAE,OAAO;EACtCC,MAAM,EAAEJ,UAAU;EAClBK,KAAK,EAAEH;AACT,CAAC,CAAC,CAAC;AAEH,IAAAI,iBAAQ,EAAC,cAAc,EAAE,MAAM;EAC7B,IAAIC,QAAuB;EAE3B,IAAAC,mBAAU,EAAC,MAAM;IACf,MAAMC,MAAM,GAAGC,WAAI,CAACC,MAAM,CAAC;MAAEC,WAAW,EAAEF,WAAI,CAACG,MAAM,CAAC;IAAE,CAAC,CAAC;IAC1DN,QAAQ,GAAG,IAAIO,eAAQ,CAACL,MAAM,EAAE,WAAW,CAAC;IAC5CT,UAAU,CAACe,SAAS,CAAC,CAAC;IACtBb,SAAS,CAACa,SAAS,CAAC,CAAC;EACvB,CAAC,CAAC;EAEF,IAAAC,aAAI,EAAC,6BAA6B,EAAE,YAAY;IAC9Cd,SAAS,CAACe,qBAAqB,CAAC,OAAO,CAAC;IAExC,MAAMC,MAAM,GAAG,MAAMX,QAAQ,CAACY,YAAY,CAACT,WAAI,CAACG,MAAM,CAAC,CAAC,CAAC;IACzD,IAAAO,eAAM,EAACF,MAAM,CAAC,CAACG,IAAI,CAAC,OAAO,CAAC;EAC9B,CAAC,CAAC;EAEF,IAAAL,aAAI,EAAC,qCAAqC,EAAE,YAAY;IACtDd,SAAS,CAACe,qBAAqB,CAAC,OAAO,CAAC;IAExC,MAAMV,QAAQ,CAACY,YAAY,CAACT,WAAI,CAACG,MAAM,CAAC;MAAES,KAAK,EAAE;IAAa,CAAC,CAAC,CAAC;IACjE,IAAAF,eAAM,EAAClB,SAAS,CAACD,IAAI,CAACsB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC,CAACH,IAAI,CAAC,YAAY,CAAC;EAC/D,CAAC,CAAC;EAEF,IAAAL,aAAI,EAAC,sBAAsB,EAAE,YAAY;IACvCd,SAAS,CAACe,qBAAqB,CAAC,IAAI,CAAC;IAErC,MAAMC,MAAM,GAAG,MAAMX,QAAQ,CAACY,YAAY,CAACT,WAAI,CAACe,MAAM,CAAC,CAAC,CAAC;IACzD,IAAAL,eAAM,EAACF,MAAM,CAAC,CAACG,IAAI,CAAC,GAAG,CAAC;EAC1B,CAAC,CAAC;EAEF,IAAAL,aAAI,EAAC,yCAAyC,EAAE,YAAY;IAC1D,MAAME,MAAM,GAAG,MAAMX,QAAQ,CAACY,YAAY,CAACT,WAAI,CAACgB,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,IAAAN,eAAM,EAACF,MAAM,CAAC,CAACG,IAAI,CAAC,OAAO,CAAC;IAC5B,IAAAD,eAAM,EAAClB,SAAS,CAAC,CAACyB,GAAG,CAACC,gBAAgB,CAAC,CAAC;IACxC,IAAAR,eAAM,EAACpB,UAAU,CAAC,CAAC2B,GAAG,CAACC,gBAAgB,CAAC,CAAC;EAC3C,CAAC,CAAC;EAEF,IAAAZ,aAAI,EAAC,sCAAsC,EAAE,YAAY;IACvD,MAAMP,MAAM,GAAGC,WAAI,CAACC,MAAM,CAAC;MACzBkB,IAAI,EAAEnB,WAAI,CAACG,MAAM,CAAC,CAAC;MACnBiB,GAAG,EAAEpB,WAAI,CAACe,MAAM,CAAC;IACnB,CAAC,CAAC;IAEFvB,SAAS,CACNe,qBAAqB,CAAC,OAAO,CAAC,CAC9BA,qBAAqB,CAAC,IAAI,CAAC;IAE9B,MAAMC,MAAM,GAAG,MAAMX,QAAQ,CAACY,YAAY,CAACV,MAAM,CAAC;IAClD,IAAAW,eAAM,EAACF,MAAM,CAAC,CAACa,OAAO,CAAC;MAAEF,IAAI,EAAE,OAAO;MAAEC,GAAG,EAAE;IAAI,CAAC,CAAC;EACrD,CAAC,CAAC;EAEF,IAAAd,aAAI,EAAC,sDAAsD,EAAE,YAAY;IACvE,MAAMP,MAAM,GAAGC,WAAI,CAACsB,KAAK,CAAC,CACxBtB,WAAI,CAACC,MAAM,CAAC;MACVsB,IAAI,EAAEvB,WAAI,CAACgB,OAAO,CAAC,GAAG,CAAC;MACvBQ,KAAK,EAAExB,WAAI,CAACG,MAAM,CAAC;IACrB,CAAC,CAAC,EACFH,WAAI,CAACC,MAAM,CAAC;MACVsB,IAAI,EAAEvB,WAAI,CAACgB,OAAO,CAAC,GAAG,CAAC;MACvBS,KAAK,EAAEzB,WAAI,CAACe,MAAM,CAAC;IACrB,CAAC,CAAC,CACH,CAAC;;IAEF;IACAzB,UAAU,CAACoC,sBAAsB,CAAC,MAAOC,IAAS,IAAK;MACrD,OAAOA,IAAI,CAACC,OAAO,CAAC,CAAC,CAAC,CAACJ,KAAK;IAC9B,CAAC,CAAC;IACFhC,SAAS,CAACe,qBAAqB,CAAC,YAAY,CAAC;IAE7C,MAAMC,MAAM,GAAG,MAAMX,QAAQ,CAACY,YAAY,CAACV,MAAM,CAAC;IAClD,IAAAW,eAAM,EAACF,MAAM,CAAC,CAACa,OAAO,CAAC;MAAEE,IAAI,EAAE,GAAG;MAAEC,KAAK,EAAE;IAAa,CAAC,CAAC;EAC5D,CAAC,CAAC;EAEF,IAAAlB,aAAI,EAAC,2BAA2B,EAAE,YAAY;IAC5C,MAAMP,MAAM,GAAGC,WAAI,CAAC6B,KAAK,CAAC7B,WAAI,CAACG,MAAM,CAAC,CAAC,CAAC;IAExCX,SAAS,CAACe,qBAAqB,CAAC,OAAO,CAAC;IACxCjB,UAAU,CAACiB,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;IACxCf,SAAS,CAACe,qBAAqB,CAAC,QAAQ,CAAC;IACzCjB,UAAU,CAACiB,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;;IAEzC,MAAMC,MAAM,GAAG,MAAMX,QAAQ,CAACY,YAAY,CAACV,MAAM,CAAC;IAClD,IAAAW,eAAM,EAACF,MAAM,CAAC,CAACa,OAAO,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;EAC7C,CAAC,CAAC;EAEF,IAAAf,aAAI,EAAC,iCAAiC,EAAE,YAAY;IAClD,MAAMP,MAAM,GAAGC,WAAI,CAAC6B,KAAK,CAAC7B,WAAI,CAACG,MAAM,CAAC,CAAC,CAAC;IAExCX,SAAS,CAACe,qBAAqB,CAAC,MAAM,CAAC;IACvCjB,UAAU,CAACiB,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;;IAEzC,MAAMC,MAAM,GAAG,MAAMX,QAAQ,CAACY,YAAY,CAACV,MAAM,CAAC;IAClD,IAAAW,eAAM,EAACF,MAAM,CAAC,CAACa,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;EAClC,CAAC,CAAC;EAEF,IAAAf,aAAI,EAAC,+BAA+B,EAAE,YAAY;IAChDd,SAAS,CAACe,qBAAqB,CAAC,cAAc,CAAC;IAE/C,MAAMV,QAAQ,CAACY,YAAY,CACzBT,WAAI,CAACG,MAAM,CAAC,CAAC,EACb,YACF,CAAC;IAED,IAAAO,eAAM,EAAClB,SAAS,CAACD,IAAI,CAACsB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAACiB,OAAO,CAAC,CAACnB,IAAI,CAAC,YAAY,CAAC;EAC/D,CAAC,CAAC;EAEF,IAAAL,aAAI,EAAC,+BAA+B,EAAE,YAAY;IAChDd,SAAS,CAACe,qBAAqB,CAAC,IAAI,CAAC;IAErC,MAAMV,QAAQ,CAACY,YAAY,CAACT,WAAI,CAACe,MAAM,CAAC,CAAC,EAAE,GAAU,CAAC;IAEtD,IAAAL,eAAM,EAAClB,SAAS,CAACD,IAAI,CAACsB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAACiB,OAAO,CAAC,CAACnB,IAAI,CAAC,IAAI,CAAC;EACvD,CAAC,CAAC;EAEF,IAAAL,aAAI,EAAC,8BAA8B,EAAE,YAAY;IAC/C,IAAAI,eAAM,EACJb,QAAQ,CAACY,YAAY,CAACT,WAAI,CAAC+B,OAAO,CAAC,CAAQ,CAC7C,CAAC,CAACC,OAAO,CAACC,OAAO,CAAC,0BAA0B,CAAC;EAC/C,CAAC,CAAC;EAEF,IAAA3B,aAAI,EAAC,sBAAsB,EAAE,YAAY;IACvC,MAAMP,MAAM,GAAGC,WAAI,CAACC,MAAM,CAAC;MACzBiC,KAAK,EAAElC,WAAI,CAACC,MAAM,CAAC;QACjBkC,KAAK,EAAEnC,WAAI,CAACG,MAAM,CAAC;MACrB,CAAC;IACH,CAAC,CAAC;IAEFX,SAAS,CAACe,qBAAqB,CAAC,YAAY,CAAC;IAE7C,MAAMC,MAAM,GAAG,MAAMX,QAAQ,CAACY,YAAY,CAACV,MAAM,CAAC;IAClD,IAAAW,eAAM,EAACF,MAAM,CAAC,CAACa,OAAO,CAAC;MAAEa,KAAK,EAAE;QAAEC,KAAK,EAAE;MAAa;IAAE,CAAC,CAAC;EAC5D,CAAC,CAAC;EAEF,IAAA7B,aAAI,EAAC,wCAAwC,EAAE,YAAY;IACzDd,SAAS,CACNe,qBAAqB,CAAC,aAAa,CAAC,CACpCA,qBAAqB,CAAC,cAAc,CAAC;IAExC,MAAMV,QAAQ,CAACY,YAAY,CAACT,WAAI,CAACG,MAAM,CAAC,CAAC,CAAC;IAC1C,IAAAO,eAAM,EAACb,QAAQ,CAACuC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAACzB,IAAI,CAAC,aAAa,CAAC;IAEvD,MAAMd,QAAQ,CAACY,YAAY,CAACT,WAAI,CAACG,MAAM,CAAC,CAAC,CAAC;IAC1C;IACA,IAAAO,eAAM,EAAClB,SAAS,CAACD,IAAI,CAACsB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAACiB,OAAO,CAAC,CAACnB,IAAI,CAAC,aAAa,CAAC;EAChE,CAAC,CAAC;EAEF,IAAAL,aAAI,EAAC,uCAAuC,EAAE,YAAY;IACxD,MAAMP,MAAM,GAAGC,WAAI,CAACqC,KAAK,CAAC,CAACrC,WAAI,CAACG,MAAM,CAAC,CAAC,EAAEH,WAAI,CAACG,MAAM,CAAC,CAAC,CAAC,CAAC;IAEzDX,SAAS,CACNe,qBAAqB,CAAC,UAAU,CAAC,CACjCA,qBAAqB,CAAC,WAAW,CAAC;IAErC,MAAMC,MAAM,GAAG,MAAMX,QAAQ,CAACY,YAAY,CAACV,MAAM,CAAC;IAClD,IAAAW,eAAM,EAACF,MAAM,CAAC,CAACa,OAAO,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;EACnD,CAAC,CAAC;EAEF,IAAAf,aAAI,EAAC,gCAAgC,EAAE,YAAY;IACjD,MAAMP,MAAM,GAAGC,WAAI,CAACqC,KAAK,CAAC,CAACrC,WAAI,CAACG,MAAM,CAAC,CAAC,EAAEH,WAAI,CAACe,MAAM,CAAC,CAAC,CAAC,CAAC;IAEzDvB,SAAS,CACNe,qBAAqB,CAAC,OAAO,CAAC,CAC9BA,qBAAqB,CAAC,IAAI,CAAC;IAE9B,MAAMC,MAAM,GAAG,MAAMX,QAAQ,CAACY,YAAY,CAACV,MAAM,CAAC;IAClD,IAAAW,eAAM,EAACF,MAAM,CAAC,CAACa,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;EACxC,CAAC,CAAC;EAEF,IAAAf,aAAI,EAAC,mCAAmC,EAAE,YAAY;IACpD,MAAMP,MAAM,GAAGC,WAAI,CAACqC,KAAK,CAAC,CAACrC,WAAI,CAACG,MAAM,CAAC,CAAC,EAAEH,WAAI,CAACe,MAAM,CAAC,CAAC,CAAC,CAAC;IAEzDvB,SAAS,CACNe,qBAAqB,CAAC,WAAW,CAAC,CAClCA,qBAAqB,CAAC,IAAI,CAAC;IAE9B,MAAMV,QAAQ,CAACY,YAAY,CAACV,MAAM,EAAE,CAAC,eAAe,EAAE,GAAG,CAAQ,CAAC;IAElE,IAAAW,eAAM,EAAClB,SAAS,CAACD,IAAI,CAACsB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAACiB,OAAO,CAAC,CAACnB,IAAI,CAAC,eAAe,CAAC;IAChE,IAAAD,eAAM,EAAClB,SAAS,CAACD,IAAI,CAACsB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAACiB,OAAO,CAAC,CAACnB,IAAI,CAAC,IAAI,CAAC;EACvD,CAAC,CAAC;EAEF,IAAAL,aAAI,EAAC,mCAAmC,EAAE,YAAY;IACpD,MAAMP,MAAM,GAAGC,WAAI,CAACC,MAAM,CAAC;MACzBqC,KAAK,EAAEtC,WAAI,CAACqC,KAAK,CAAC,CAACrC,WAAI,CAACG,MAAM,CAAC,CAAC,EAAEH,WAAI,CAACG,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IAEFX,SAAS,CACNe,qBAAqB,CAAC,WAAW,CAAC,CAClCA,qBAAqB,CAAC,UAAU,CAAC;IAEpC,MAAMC,MAAM,GAAG,MAAMX,QAAQ,CAACY,YAAY,CAACV,MAAM,CAAC;IAClD,IAAAW,eAAM,EAACF,MAAM,CAAC,CAACa,OAAO,CAAC;MAAEiB,KAAK,EAAE,CAAC,WAAW,EAAE,UAAU;IAAE,CAAC,CAAC;EAC9D,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -46,7 +46,7 @@ const isObject = t => t[_typebox.Kind] === "Object";
46
46
  const isRef = t => t[_typebox.Kind] === "Ref";
47
47
  const isString = t => t[_typebox.Kind] === "String";
48
48
  const isThis = t => t[_typebox.Kind] === "This";
49
- // const isTuple = (t: TSchema): t is TTuple => t[Kind] === "Tuple";
49
+ const isTuple = t => t[_typebox.Kind] === "Tuple";
50
50
  const isUnion = t => t[_typebox.Kind] === "Union";
51
51
  // const isAny = (t: TSchema): t is TAny => t[Kind] === "Any";
52
52
 
@@ -1158,6 +1158,16 @@ class Sprinkle {
1158
1158
  }
1159
1159
  return arr;
1160
1160
  }
1161
+ if (isTuple(type)) {
1162
+ const items = type.items ?? [];
1163
+ const result = [];
1164
+ for (let i = 0; i < items.length; i++) {
1165
+ const itemType = items[i];
1166
+ const value = await this._fillInStruct(itemType, path.concat([`[${i}]`]), defs, def ? def[i] : undefined);
1167
+ result.push(value);
1168
+ }
1169
+ return result;
1170
+ }
1161
1171
  throw new Error(`Unable to fill in struct for type at path ${path.join(".")}`);
1162
1172
  }
1163
1173
  resolveType(type, path, defs) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_query","require","_sdk","_core","_prompts","_typebox","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","fs","_interopRequireWildcard","path","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor","_defineProperty","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","isOptional","OptionalKind","isImport","Kind","isArray","isBigInt","isLiteral","isObject","isRef","isString","isThis","isUnion","isSensitive","sensitive","NetworkSchema","Type","Union","Literal","MultisigScriptModule","Module","MultisigScript","Signature","key_hash","ctor","AllOf","scripts","Array","Ref","AnyOf","AtLeast","required","BigInt","Before","time","After","Script","script_hash","Import","ProviderSettingsSchema","type","projectId","minLength","title","apiKey","WalletSettingsSchema","privateKey","address","Sprinkle","constructor","storagePath","options","name","createdAt","updatedAt","sanitizeProfileId","toLowerCase","replace","profilesDir","join","profilePath","id","test","includes","Error","activeProfilePath","findAvailableId","baseId","candidate","counter","existsSync","scanProfiles","dir","files","readdirSync","filter","endsWith","entries","file","content","readFileSync","parsed","JSON","parse","bigIntReviver","meta","push","loadProfile","filePath","profileId","profileMeta","settings","decryptSettings","defaults","writeFileSync","saveProfile","dirname","mkdirSync","recursive","Date","toISOString","settingsToSave","encryptSettings","jsonContent","stringify","bigIntReplacer","promptProfileMeta","defaultName","defaultDescription","input","message","validate","v","trim","length","description","undefined","createProfile","now","FillInStruct","migrateIfNeeded","legacyPath","SettingsPath","profileData","renameSync","selectOrCreateProfile","profiles","pointerPath","activeId","some","p","selectProfile","available","selection","select","choices","map","duplicateProfile","console","log","renameProfile","newId","oldId","newPath","unlinkSync","deleteProfile","others","toDelete","profileToDelete","find","confirmed","confirm","showMenu","menu","_showMenu","main","beforeShow","items","item","index","settingsMenu","action","EditStruct","saveSettings","selectedItem","result","New","sprinkle","GetProvider","network","Blockfrost","queryModule","Promise","resolve","then","Maestro","GetWallet","provider","HotWallet","fromMasterkey","Core","Bip32PrivateKeyHex","ColdWallet","Address","fromBech32","GetBlaze","providerSettings","walletSettings","wallet","Blaze","from","SearchSelect","opts","search","sep","LoadSettings","fileContent","error","slice","_key","toString","collectSensitivePaths","prefix","paths","fields","field","fieldType","fieldPath","variant","anyOf","getNestedValue","obj","split","reduce","k","setNestedValue","last","pop","parent","encryption","clone","sensitivePaths","encrypt","decrypt","getWalletPaymentKeyHash","addresses","getUsedAddresses","paymentCredential","asBase","getPaymentCredential","hash","countSignatures","tx","vkeys","witnessSet","size","hasVkeySigned","vkeyHex","vkeyArray","toCore","vkey","getRequiredSigners","requiredSigners","body","values","s","getTxBodyHash","bodyCbor","toCbor","blake2b_256","formatHash","mergeSignatures","target","source","targetWs","sourceWs","targetVkeys","sourceVkeys","existingPubKeys","Set","newVkeys","setVkeys","CborSet","fromCore","VkeyWitness","setWitnessSet","TxDialog","blaze","currentTx","expanded","hasSignedThisSession","isHotWallet","walletVkeys","txHash","sigCount","signer","txCbor","beforeSign","needsStakeKey","userAddress","stakeCredential","getStakeCredential","stakeKeyHash","reqSigners","signerArray","certs","hasCertificates","withdrawals","hasWithdrawals","warn","signed","signTransaction","ws","existingVkeys","signedKeys","newSignedKeys","uniqueNewKeys","signedTx","added","clipboard","writeSync","cborInput","importedTx","Transaction","fromCbor","TxCBOR","currentHash","importedHash","proceed","sourceCount","skipped","txId","submitTransaction","current","_editStruct","menuItems","currentRecord","menuTitle","ExtractMessage","fieldValue","concat","editMenu","_fillInStruct","def","defs","resolvedType","shouldSet","innerType","resolved","resolveType","defaultString","answer","password","const","arr","itemType","addMore","itemValue","continueAnswer","$defs","realType","$ref","fieldNames"],"sources":["../../../src/Sprinkle/index.ts"],"sourcesContent":["import { Blockfrost, type Provider } from \"@blaze-cardano/query\";\nimport {\n Blaze,\n ColdWallet,\n Core,\n HotWallet,\n type Wallet,\n} from \"@blaze-cardano/sdk\";\nimport { CborSet, VkeyWitness, blake2b_256, TxCBOR } from \"@blaze-cardano/core\";\nimport { confirm, input, password, search, select } from \"@inquirer/prompts\";\nimport {\n Kind,\n type Static,\n type TBigInt,\n type TLiteral,\n type TObject,\n type TSchema,\n type TString,\n type TUnion,\n Type,\n type TArray,\n type TThis,\n type TRef,\n type TImport,\n type TOptional,\n OptionalKind,\n} from \"@sinclair/typebox\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nexport * from \"@sinclair/typebox\";\n\nexport type TExact<T> = T extends TSchema ? Static<T> : T;\n\nconst isOptional = <T extends TSchema>(t: T): t is TOptional<T> =>\n t[OptionalKind] === \"Optional\";\nconst isImport = (t: TSchema): t is TImport => t[Kind] === \"Import\";\nconst isArray = (t: TSchema): t is TArray => t[Kind] === \"Array\";\nconst isBigInt = (t: TSchema): t is TBigInt => t[Kind] === \"BigInt\";\n// const isBoolean = (t: TSchema): t is TBoolean => t[Kind] === \"Boolean\";\nconst isLiteral = (t: TSchema): t is TLiteral => t[Kind] === \"Literal\";\n// const isNumber = (t: TSchema): t is TNumber => t[Kind] === \"Number\";\nconst isObject = (t: TSchema): t is TObject => t[Kind] === \"Object\";\n// const isRecord = (t: TSchema): t is TRecord => t[Kind] === \"Record\";\nconst isRef = (t: TSchema): t is TRef => t[Kind] === \"Ref\";\nconst isString = (t: TSchema): t is TString => t[Kind] === \"String\";\nconst isThis = (t: TSchema): t is TThis => t[Kind] === \"This\";\n// const isTuple = (t: TSchema): t is TTuple => t[Kind] === \"Tuple\";\nconst isUnion = (t: TSchema): t is TUnion => t[Kind] === \"Union\";\n// const isAny = (t: TSchema): t is TAny => t[Kind] === \"Any\";\n\nconst isSensitive = (t: TSchema): boolean =>\n isString(t) && t.sensitive === true;\n\nexport interface IEncryptionOptions {\n encrypt: (plaintext: string) => string;\n decrypt: (ciphertext: string) => Promise<string>;\n}\n\nexport interface ISprinkleOptions {\n encryption?: IEncryptionOptions;\n}\n\nexport interface IProfileMeta {\n name: string;\n description?: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface IProfileEntry {\n id: string;\n meta: IProfileMeta;\n}\n\nexport interface TxDialogResult {\n action: \"submitted\" | \"signed\" | \"cancelled\";\n txId?: string; // present only if action === 'submitted'\n tx: Core.Transaction; // the (potentially signed) transaction\n}\n\nexport interface TxDialogOptions {\n beforeSign?: () => Promise<void>;\n}\n\nexport const NetworkSchema = Type.Union([\n Type.Literal(\"mainnet\"),\n Type.Literal(\"preview\"),\n Type.Literal(\"preprod\"),\n]);\n\nexport const MultisigScriptModule = Type.Module({\n MultisigScript: Type.Union([\n Type.Object({\n Signature: Type.Object(\n {\n key_hash: Type.String(),\n },\n { ctor: 0n },\n ),\n }),\n Type.Object({\n AllOf: Type.Object(\n {\n scripts: Type.Array(Type.Ref(\"MultisigScript\")),\n },\n { ctor: 1n },\n ),\n }),\n Type.Object({\n AnyOf: Type.Object(\n {\n scripts: Type.Array(Type.Ref(\"MultisigScript\")),\n },\n { ctor: 2n },\n ),\n }),\n Type.Object({\n AtLeast: Type.Object(\n {\n required: Type.BigInt(),\n scripts: Type.Array(Type.Ref(\"MultisigScript\")),\n },\n { ctor: 3n },\n ),\n }),\n Type.Object({\n Before: Type.Object(\n {\n time: Type.BigInt(),\n },\n { ctor: 4n },\n ),\n }),\n Type.Object({\n After: Type.Object(\n {\n time: Type.BigInt(),\n },\n { ctor: 5n },\n ),\n }),\n Type.Object({\n Script: Type.Object(\n {\n script_hash: Type.String(),\n },\n { ctor: 6n },\n ),\n }),\n ]),\n});\nexport const MultisigScript = MultisigScriptModule.Import(\"MultisigScript\");\nexport type TMultisigScript = TExact<typeof MultisigScript>;\n\nexport const ProviderSettingsSchema = Type.Union([\n Type.Object({\n type: Type.Literal(\"blockfrost\"),\n projectId: Type.String({ minLength: 1, title: \"Blockfrost Project ID\" }),\n }),\n Type.Object({\n type: Type.Literal(\"maestro\"),\n apiKey: Type.String({ minLength: 1, title: \"Maestro API Key\" }),\n }),\n]);\n\nexport const WalletSettingsSchema = Type.Union([\n Type.Object({\n type: Type.Literal(\"hot\"),\n privateKey: Type.String({ minLength: 1, title: \"Hot Wallet Private Key\" }),\n }),\n Type.Object({\n type: Type.Literal(\"cold\"),\n address: Type.String({ minLength: 1, title: \"Cold Wallet Address\" }),\n }),\n]);\n\nexport interface IMenuAction<S extends TSchema> {\n title: string;\n action: (sprinkle: Sprinkle<S>) => Promise<Sprinkle<S> | void>;\n}\nexport type TMenuItem<S extends TSchema> = IMenuAction<S> | IMenu<S>;\nexport interface IMenu<S extends TSchema> {\n title: string;\n items: TMenuItem<S>[];\n beforeShow?: (sprinkle: Sprinkle<S>) => Promise<void>;\n}\n\nexport class Sprinkle<S extends TSchema> {\n storagePath: string;\n settings: TExact<S> = {} as TExact<S>;\n type: S;\n defaults: Record<string, unknown> = {};\n options: ISprinkleOptions;\n profileId: string = \"\";\n profileMeta: IProfileMeta = { name: \"\", createdAt: \"\", updatedAt: \"\" };\n\n constructor(type: S, storagePath: string, options?: ISprinkleOptions) {\n this.type = type;\n this.storagePath = storagePath;\n this.options = options ?? {};\n }\n\n // --- Profile path helpers ---\n\n static sanitizeProfileId(name: string): string {\n return (\n name\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, \"\")\n .replace(/[\\s]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\") || \"profile\"\n );\n }\n\n private static profilesDir(storagePath: string): string {\n return path.join(storagePath, \"profiles\");\n }\n\n private static profilePath(storagePath: string, id: string): string {\n if (!id || /[\\/\\\\]/.test(id) || id.includes(\"..\")) {\n throw new Error(`Invalid profile ID: \"${id}\"`);\n }\n return path.join(storagePath, \"profiles\", `${id}.json`);\n }\n\n private static activeProfilePath(storagePath: string): string {\n return path.join(storagePath, \"active-profile\");\n }\n\n private static findAvailableId(profilesDir: string, baseId: string): string {\n let candidate = baseId;\n let counter = 2;\n while (fs.existsSync(path.join(profilesDir, `${candidate}.json`))) {\n candidate = `${baseId}-${counter}`;\n counter++;\n }\n return candidate;\n }\n\n // --- Profile I/O ---\n\n scanProfiles(): IProfileEntry[] {\n const dir = Sprinkle.profilesDir(this.storagePath);\n if (!fs.existsSync(dir)) return [];\n const files = fs.readdirSync(dir).filter((f) => f.endsWith(\".json\"));\n const entries: IProfileEntry[] = [];\n for (const file of files) {\n try {\n const content = fs.readFileSync(path.join(dir, file), \"utf-8\");\n const parsed = JSON.parse(content, Sprinkle.bigIntReviver);\n if (parsed.meta?.name) {\n entries.push({\n id: file.replace(/\\.json$/, \"\"),\n meta: parsed.meta,\n });\n }\n } catch {\n // Skip malformed profile files\n }\n }\n return entries;\n }\n\n async loadProfile(id: string): Promise<void> {\n const filePath = Sprinkle.profilePath(this.storagePath, id);\n const content = fs.readFileSync(filePath, \"utf-8\");\n const parsed = JSON.parse(content, Sprinkle.bigIntReviver);\n this.profileId = id;\n this.profileMeta = parsed.meta;\n this.settings = await this.decryptSettings(parsed.settings as TExact<S>);\n this.defaults = parsed.defaults ?? {};\n // Update active profile pointer\n fs.writeFileSync(Sprinkle.activeProfilePath(this.storagePath), id, \"utf-8\");\n }\n\n private saveProfile(): void {\n if (!this.profileId) {\n throw new Error(\n \"Cannot save profile: no profile is loaded. Call loadProfile() or create a profile first.\",\n );\n }\n const filePath = Sprinkle.profilePath(this.storagePath, this.profileId);\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n this.profileMeta.updatedAt = new Date().toISOString();\n const settingsToSave = this.encryptSettings(this.settings);\n const jsonContent = JSON.stringify(\n {\n meta: this.profileMeta,\n settings: settingsToSave,\n defaults: this.defaults,\n },\n Sprinkle.bigIntReplacer,\n 2,\n );\n fs.writeFileSync(filePath, jsonContent, \"utf-8\");\n }\n\n private async promptProfileMeta(\n defaultName?: string,\n defaultDescription?: string,\n ): Promise<{ name: string; description?: string }> {\n const name = await input({\n message: \"Profile name:\",\n default: defaultName,\n validate: (v) => (v.trim().length > 0 ? true : \"Name cannot be empty\"),\n });\n const description = await input({\n message: \"Profile description (optional):\",\n default: defaultDescription ?? \"\",\n });\n return { name, description: description || undefined };\n }\n\n private async createProfile(): Promise<void> {\n const { name, description } = await this.promptProfileMeta();\n const profilesDir = Sprinkle.profilesDir(this.storagePath);\n const id = Sprinkle.findAvailableId(\n profilesDir,\n Sprinkle.sanitizeProfileId(name),\n );\n const now = new Date().toISOString();\n this.profileId = id;\n this.profileMeta = { name, description, createdAt: now, updatedAt: now };\n this.defaults = {};\n this.settings = await this.FillInStruct(this.type);\n this.saveProfile();\n fs.writeFileSync(Sprinkle.activeProfilePath(this.storagePath), id, \"utf-8\");\n }\n\n private async migrateIfNeeded(): Promise<void> {\n const profilesDir = Sprinkle.profilesDir(this.storagePath);\n const legacyPath = Sprinkle.SettingsPath(this.storagePath);\n\n if (!fs.existsSync(profilesDir)) {\n if (fs.existsSync(legacyPath)) {\n // Migrate legacy settings.json -> profiles/default.json\n const content = fs.readFileSync(legacyPath, \"utf-8\");\n const parsed = JSON.parse(content, Sprinkle.bigIntReviver);\n const now = new Date().toISOString();\n const profileData = {\n meta: {\n name: \"Default\",\n createdAt: now,\n updatedAt: now,\n },\n settings: parsed.settings,\n defaults: parsed.defaults ?? {},\n };\n fs.mkdirSync(profilesDir, { recursive: true });\n fs.writeFileSync(\n Sprinkle.profilePath(this.storagePath, \"default\"),\n JSON.stringify(profileData, Sprinkle.bigIntReplacer, 2),\n \"utf-8\",\n );\n fs.writeFileSync(\n Sprinkle.activeProfilePath(this.storagePath),\n \"default\",\n \"utf-8\",\n );\n // Backup legacy file\n fs.renameSync(legacyPath, `${legacyPath}.bak`);\n } else {\n fs.mkdirSync(profilesDir, { recursive: true });\n }\n }\n }\n\n private async selectOrCreateProfile(): Promise<void> {\n const profiles = this.scanProfiles();\n\n if (profiles.length === 0) {\n await this.createProfile();\n return;\n }\n\n if (profiles.length === 1) {\n await this.loadProfile(profiles[0]!.id);\n return;\n }\n\n // Multiple profiles: check active-profile pointer\n const pointerPath = Sprinkle.activeProfilePath(this.storagePath);\n if (fs.existsSync(pointerPath)) {\n const activeId = fs.readFileSync(pointerPath, \"utf-8\").trim();\n if (profiles.some((p) => p.id === activeId)) {\n await this.loadProfile(activeId);\n return;\n }\n }\n\n // No valid pointer - show selector\n await this.selectProfile(profiles);\n }\n\n private async selectProfile(profiles?: IProfileEntry[]): Promise<void> {\n const available = profiles ?? this.scanProfiles();\n const selection = await select({\n message: \"Select a profile:\",\n choices: available.map((p) => ({\n name: p.meta.description\n ? `${p.meta.name} - ${p.meta.description}`\n : p.meta.name,\n value: p.id,\n })),\n });\n await this.loadProfile(selection);\n }\n\n // --- Profile management (CRUD) ---\n\n private async duplicateProfile(): Promise<void> {\n const { name, description } = await this.promptProfileMeta(\n `${this.profileMeta.name} (copy)`,\n this.profileMeta.description,\n );\n const profilesDir = Sprinkle.profilesDir(this.storagePath);\n const id = Sprinkle.findAvailableId(\n profilesDir,\n Sprinkle.sanitizeProfileId(name),\n );\n const now = new Date().toISOString();\n // Write duplicate with current settings\n const settingsToSave = this.encryptSettings(this.settings);\n const jsonContent = JSON.stringify(\n {\n meta: { name, description, createdAt: now, updatedAt: now },\n settings: settingsToSave,\n defaults: this.defaults,\n },\n Sprinkle.bigIntReplacer,\n 2,\n );\n fs.writeFileSync(\n path.join(profilesDir, `${id}.json`),\n jsonContent,\n \"utf-8\",\n );\n console.log(`Profile \"${name}\" created as a copy.`);\n }\n\n private async renameProfile(): Promise<void> {\n const { name, description } = await this.promptProfileMeta(\n this.profileMeta.name,\n this.profileMeta.description,\n );\n const newId = Sprinkle.sanitizeProfileId(name);\n const oldId = this.profileId;\n\n this.profileMeta.name = name;\n this.profileMeta.description = description;\n\n if (newId !== oldId) {\n const newPath = Sprinkle.profilePath(this.storagePath, newId);\n if (fs.existsSync(newPath)) {\n console.log(\n `A profile with ID \"${newId}\" already exists. Choose a different name.`,\n );\n return;\n }\n // Save to new path, remove old file\n this.profileId = newId;\n this.saveProfile();\n fs.unlinkSync(Sprinkle.profilePath(this.storagePath, oldId));\n fs.writeFileSync(\n Sprinkle.activeProfilePath(this.storagePath),\n newId,\n \"utf-8\",\n );\n } else {\n this.saveProfile();\n }\n console.log(`Profile renamed to \"${name}\".`);\n }\n\n private async deleteProfile(): Promise<void> {\n const profiles = this.scanProfiles();\n const others = profiles.filter((p) => p.id !== this.profileId);\n\n if (others.length === 0) {\n console.log(\"Cannot delete the only profile.\");\n return;\n }\n\n const toDelete = await select({\n message: \"Select a profile to delete:\",\n choices: [\n ...others.map((p) => ({\n name: p.meta.description\n ? `${p.meta.name} - ${p.meta.description}`\n : p.meta.name,\n value: p.id,\n })),\n { name: \"Cancel\", value: \"__cancel__\" },\n ],\n });\n\n if (toDelete === \"__cancel__\") return;\n\n const profileToDelete = others.find((p) => p.id === toDelete);\n const confirmed = await confirm({\n message: `Delete profile \"${profileToDelete?.meta.name ?? toDelete}\"? This cannot be undone.`,\n default: false,\n });\n\n if (confirmed) {\n fs.unlinkSync(Sprinkle.profilePath(this.storagePath, toDelete));\n console.log(\n `Profile \"${profileToDelete?.meta.name ?? toDelete}\" deleted.`,\n );\n }\n }\n\n // --- Menu ---\n\n async showMenu(menu: IMenu<S>): Promise<void> {\n return this._showMenu(menu, true);\n }\n\n private async _showMenu(menu: IMenu<S>, main: boolean): Promise<void> {\n if (menu.beforeShow) {\n await menu.beforeShow(this);\n }\n const choices = menu.items.map((item, index) => {\n if (\"action\" in item) {\n return { name: item.title, value: index };\n } else {\n return { name: `${item.title} Submenu`, value: index };\n }\n });\n if (!main) {\n choices.push({ name: \"Back\", value: -1 });\n } else {\n choices.push({ name: \"Settings & Profiles\", value: -5 });\n choices.push({ name: \"Exit\", value: -1 });\n }\n const selection = await select({\n message: \"Select an option:\",\n choices: choices,\n });\n if (selection === -5) {\n const settingsMenu: IMenu<S> = {\n title: \"Settings & Profiles\",\n items: [\n {\n title: \"Edit settings\",\n action: async () => {\n this.settings = await this.EditStruct(this.type, this.settings);\n this.saveSettings();\n },\n },\n {\n title: \"Switch profile\",\n action: async () => {\n this.saveSettings();\n const profiles = this.scanProfiles();\n if (profiles.length <= 1) {\n console.log(\n \"No other profiles to switch to. Create a new one first.\",\n );\n } else {\n await this.selectProfile(profiles);\n }\n },\n },\n {\n title: \"Create new profile\",\n action: async () => {\n await this.createProfile();\n },\n },\n {\n title: \"Duplicate current profile\",\n action: async () => {\n await this.duplicateProfile();\n },\n },\n {\n title: \"Rename current profile\",\n action: async () => {\n await this.renameProfile();\n },\n },\n {\n title: \"Delete a profile\",\n action: async () => {\n await this.deleteProfile();\n },\n },\n ],\n };\n await this._showMenu(settingsMenu, false);\n await this._showMenu(menu, main);\n return;\n }\n if (selection === -1) {\n return;\n }\n const selectedItem = menu.items[selection]!;\n if (\"action\" in selectedItem) {\n const result = await selectedItem.action(this);\n if (result instanceof Sprinkle) {\n this.settings = result.settings;\n this.saveSettings();\n }\n await this._showMenu(menu, main);\n } else {\n await this._showMenu(selectedItem, false);\n await this._showMenu(menu, main);\n }\n return;\n }\n\n static async New<S extends TSchema>(\n type: S,\n storagePath: string,\n options?: ISprinkleOptions,\n ): Promise<Sprinkle<S>> {\n const sprinkle = new Sprinkle<S>(type, storagePath, options);\n await sprinkle.migrateIfNeeded();\n await sprinkle.selectOrCreateProfile();\n sprinkle.saveSettings();\n return sprinkle;\n }\n\n static async GetProvider(\n network: TExact<typeof NetworkSchema>,\n settings: TExact<typeof ProviderSettingsSchema>,\n ): Promise<Provider> {\n switch (settings.type) {\n case \"blockfrost\":\n return new Blockfrost({\n network: `cardano-${network}`,\n projectId: settings.projectId,\n });\n case \"maestro\":\n // Dynamic import - Maestro may or may not be exported depending on @blaze-cardano/query version\n const queryModule = (await import(\"@blaze-cardano/query\")) as any;\n if (!queryModule.Maestro) {\n throw new Error(\n \"Maestro is not available in the installed version of @blaze-cardano/query. Please install a version that includes Maestro support.\",\n );\n }\n return new queryModule.Maestro({\n network: network as \"mainnet\" | \"preview\" | \"preprod\",\n apiKey: settings.apiKey,\n });\n default:\n throw new Error(\"Invalid provider type\");\n }\n }\n\n static async GetWallet(\n settings: TExact<typeof WalletSettingsSchema>,\n provider: Provider,\n ): Promise<Wallet> {\n switch (settings.type) {\n case \"hot\":\n return HotWallet.fromMasterkey(\n Core.Bip32PrivateKeyHex(settings.privateKey),\n provider,\n provider.network,\n );\n case \"cold\":\n return new ColdWallet(\n Core.Address.fromBech32(settings.address),\n provider.network,\n provider,\n );\n default:\n throw new Error(\"Invalid wallet type\");\n }\n }\n\n static async GetBlaze(\n network: TExact<typeof NetworkSchema>,\n providerSettings: TExact<typeof ProviderSettingsSchema>,\n walletSettings: TExact<typeof WalletSettingsSchema>,\n ): Promise<Blaze<Provider, Wallet>> {\n const provider = await Sprinkle.GetProvider(network, providerSettings);\n const wallet = await Sprinkle.GetWallet(walletSettings, provider);\n return Blaze.from(provider, wallet);\n }\n\n static async SearchSelect<T>(opts: {\n message: string;\n source: (\n term: string | undefined,\n ) => Promise<{ name: string; value: T }[]> | { name: string; value: T }[];\n }): Promise<T> {\n return search(opts) as Promise<T>;\n }\n\n static SettingsPath(storagePath: string): string {\n return `${storagePath}${path.sep}settings.json`;\n }\n\n async LoadSettings(type: S, storagePath: string): Promise<void> {\n try {\n // Check if the settings file exists\n if (fs.existsSync(storagePath)) {\n // Read and parse the JSON file\n const fileContent = fs.readFileSync(storagePath, \"utf-8\");\n const parsed = JSON.parse(fileContent, Sprinkle.bigIntReviver) as {\n settings: unknown;\n defaults: Record<string, unknown>;\n };\n // Convert string representations back to BigInt where needed\n this.settings = await this.decryptSettings(\n parsed.settings as TExact<S>,\n );\n this.defaults = parsed.defaults;\n } else {\n this.defaults = {};\n this.settings = await this.FillInStruct(type);\n }\n } catch (error) {\n throw new Error(`Error loading settings from ${storagePath}: ${error}`);\n }\n }\n\n static bigIntReviver(key: string, value: unknown): unknown {\n if (typeof value === \"string\" && /^\\d+n$/.test(value)) {\n return BigInt(value.slice(0, -1));\n }\n return value;\n }\n\n private static bigIntReplacer(_key: string, value: unknown): unknown {\n return typeof value === \"bigint\" ? `${value.toString()}n` : value;\n }\n\n private static collectSensitivePaths(\n type: TSchema,\n prefix: string = \"\",\n ): string[] {\n const paths: string[] = [];\n if (isObject(type)) {\n const fields = type[\"properties\"] as Record<string, TSchema>;\n for (const [field, fieldType] of Object.entries(fields)) {\n const fieldPath = prefix ? `${prefix}.${field}` : field;\n if (isSensitive(fieldType)) {\n paths.push(fieldPath);\n }\n paths.push(...Sprinkle.collectSensitivePaths(fieldType, fieldPath));\n }\n }\n if (isUnion(type)) {\n for (const variant of type.anyOf) {\n paths.push(...Sprinkle.collectSensitivePaths(variant, prefix));\n }\n }\n return paths;\n }\n\n private static getNestedValue(obj: any, path: string): unknown {\n return path.split(\".\").reduce((o, k) => o?.[k], obj);\n }\n\n private static setNestedValue(obj: any, path: string, value: unknown): void {\n const keys = path.split(\".\");\n const last = keys.pop()!;\n const parent = keys.reduce((o, k) => o?.[k], obj);\n if (parent && typeof parent === \"object\") {\n parent[last] = value;\n }\n }\n\n private encryptSettings(settings: TExact<S>): TExact<S> {\n if (!this.options.encryption) return settings;\n const clone = JSON.parse(\n JSON.stringify(settings, Sprinkle.bigIntReplacer),\n Sprinkle.bigIntReviver,\n );\n const sensitivePaths = Sprinkle.collectSensitivePaths(this.type);\n for (const p of sensitivePaths) {\n const value = Sprinkle.getNestedValue(clone, p);\n if (typeof value === \"string\" && value.length > 0) {\n Sprinkle.setNestedValue(\n clone,\n p,\n this.options.encryption.encrypt(value),\n );\n }\n }\n return clone;\n }\n\n private async decryptSettings(settings: TExact<S>): Promise<TExact<S>> {\n if (!this.options.encryption) return settings;\n const clone = JSON.parse(\n JSON.stringify(settings, Sprinkle.bigIntReplacer),\n Sprinkle.bigIntReviver,\n );\n const sensitivePaths = Sprinkle.collectSensitivePaths(this.type);\n for (const p of sensitivePaths) {\n const value = Sprinkle.getNestedValue(clone, p);\n if (typeof value === \"string\" && value.length > 0) {\n Sprinkle.setNestedValue(\n clone,\n p,\n await this.options.encryption.decrypt(value),\n );\n }\n }\n return clone;\n }\n\n saveSettings(): void {\n this.saveProfile();\n }\n\n // --- TxDialog Helpers ---\n\n /**\n * Get the payment key hash from a HotWallet's first address\n */\n private async getWalletPaymentKeyHash(\n wallet: HotWallet,\n ): Promise<string | null> {\n try {\n const addresses = await wallet.getUsedAddresses();\n const address = addresses[0];\n if (!address) return null;\n const paymentCredential = address.asBase()?.getPaymentCredential();\n return paymentCredential?.hash?.toString() ?? null;\n } catch {\n return null;\n }\n }\n\n /**\n * Count the number of vkey signatures in a transaction's witness set\n */\n private countSignatures(tx: Core.Transaction): number {\n const vkeys = tx.witnessSet().vkeys();\n return vkeys ? vkeys.size() : 0;\n }\n\n /**\n * Check if a specific public key has already signed the transaction\n * Compares by vkey (public key bytes)\n */\n private hasVkeySigned(tx: Core.Transaction, vkeyHex: string): boolean {\n const vkeys = tx.witnessSet().vkeys();\n if (!vkeys) return false;\n const vkeyArray = vkeys.toCore();\n return vkeyArray.some(([vkey]) => vkey === vkeyHex);\n }\n\n /**\n * Get the list of required signer key hashes from the transaction body\n */\n private getRequiredSigners(tx: Core.Transaction): string[] {\n const requiredSigners = tx.body().requiredSigners();\n if (!requiredSigners) return [];\n return Array.from(requiredSigners.values()).map((s) => s.toString());\n }\n\n /**\n * Compute the transaction body hash for display\n */\n private getTxBodyHash(tx: Core.Transaction): string {\n const bodyCbor = tx.body().toCbor();\n return blake2b_256(bodyCbor);\n }\n\n /**\n * Format a hash for display: first 8 chars + ... + last 8 chars\n */\n private formatHash(hash: string): string {\n if (hash.length <= 20) return hash;\n return `${hash.slice(0, 8)}...${hash.slice(-8)}`;\n }\n\n /**\n * Merge signatures from source transaction into target transaction.\n * Prevents duplicate signatures by comparing vkey (public key).\n * Returns the count of newly added signatures.\n */\n private mergeSignatures(\n target: Core.Transaction,\n source: Core.Transaction,\n ): number {\n const targetWs = target.witnessSet();\n const sourceWs = source.witnessSet();\n\n const targetVkeys = targetWs.vkeys()?.toCore() ?? [];\n const sourceVkeys = sourceWs.vkeys()?.toCore() ?? [];\n\n // Find vkeys in source that aren't in target (by comparing public key)\n const existingPubKeys = new Set(targetVkeys.map(([vkey]) => vkey));\n const newVkeys = sourceVkeys.filter(\n ([vkey]) => !existingPubKeys.has(vkey),\n );\n\n if (newVkeys.length === 0) {\n return 0;\n }\n\n // Merge the new vkeys into target\n targetWs.setVkeys(\n CborSet.fromCore([...targetVkeys, ...newVkeys], VkeyWitness.fromCore),\n );\n target.setWitnessSet(targetWs);\n\n return newVkeys.length;\n }\n\n async TxDialog<P extends Provider, W extends Wallet>(\n blaze: Blaze<P, W>,\n tx: Core.Transaction,\n opts?: TxDialogOptions,\n ): Promise<TxDialogResult> {\n let currentTx = tx;\n let expanded = false;\n let hasSignedThisSession = false;\n\n // Check if wallet can sign (is HotWallet)\n const isHotWallet = blaze.wallet instanceof HotWallet;\n\n // Get wallet's vkeys for detecting if already signed\n let walletVkeys: string[] = [];\n if (isHotWallet) {\n try {\n // Sign a dummy to get the wallet's public keys\n // We'll use this to check if wallet has already signed\n const wallet = blaze.wallet as unknown as HotWallet;\n const addresses = await wallet.getUsedAddresses();\n const address = addresses[0];\n if (address) {\n // We can't easily get vkeys without signing, so we'll track after first sign\n }\n } catch {\n // Ignore errors in setup\n }\n }\n\n while (true) {\n // Display transaction status\n const txHash = this.getTxBodyHash(currentTx);\n const sigCount = this.countSignatures(currentTx);\n const requiredSigners = this.getRequiredSigners(currentTx);\n\n console.log(\"\");\n console.log(`Transaction: ${this.formatHash(txHash)}`);\n if (requiredSigners.length > 0) {\n console.log(`Signatures: ${sigCount} of ${requiredSigners.length} required`);\n console.log(\"Required signers:\");\n for (const signer of requiredSigners) {\n console.log(` - ${this.formatHash(signer)}`);\n }\n } else {\n console.log(`Signatures: ${sigCount}`);\n }\n\n // Display CBOR\n const txCbor = currentTx.toCbor();\n if (expanded) {\n console.log(\"Transaction CBOR:\", txCbor);\n } else {\n console.log(\"Transaction CBOR:\", `${String(txCbor).slice(0, 50)}...`);\n }\n\n // Build dynamic menu choices\n const choices: { name: string; value: string }[] = [];\n\n // \"Sign with this wallet\" - only if HotWallet and hasn't signed this session\n if (isHotWallet && !hasSignedThisSession) {\n choices.push({ name: \"Sign with this wallet\", value: \"sign\" });\n }\n\n // CBOR options\n if (!expanded) {\n choices.push({ name: \"Expand CBOR\", value: \"expand\" });\n }\n choices.push({ name: \"Copy CBOR to clipboard\", value: \"copy\" });\n choices.push({ name: \"Import signatures from CBOR\", value: \"import\" });\n\n // Submit and cancel\n choices.push({ name: \"Submit transaction\", value: \"submit\" });\n choices.push({ name: \"Cancel\", value: \"cancel\" });\n\n const selection = await select({\n message: \"Select an option:\",\n choices,\n });\n\n // Handle selection\n if (selection === \"sign\") {\n if (opts?.beforeSign) {\n await opts.beforeSign();\n }\n\n // Detect if stake key signature is required\n let needsStakeKey = false;\n try {\n const wallet = blaze.wallet as unknown as HotWallet;\n const addresses = await wallet.getUsedAddresses();\n const userAddress = addresses[0];\n if (userAddress) {\n const stakeCredential = userAddress.asBase()?.getStakeCredential();\n const stakeKeyHash = stakeCredential?.hash?.toString();\n\n if (stakeKeyHash) {\n const reqSigners = currentTx.body().requiredSigners();\n if (reqSigners) {\n const signerArray = Array.from(reqSigners.values());\n needsStakeKey = signerArray.some(\n (signer) => signer.toString() === stakeKeyHash,\n );\n }\n\n const certs = currentTx.body().certs();\n const hasCertificates = certs && certs.size() > 0;\n const withdrawals = currentTx.body().withdrawals();\n const hasWithdrawals = withdrawals && withdrawals.size > 0;\n\n if (hasCertificates || hasWithdrawals) {\n needsStakeKey = true;\n }\n }\n }\n\n if (needsStakeKey) {\n console.log(\"Transaction requires stake key signature.\");\n } else {\n console.log(\"Transaction requires payment key signature only.\");\n }\n } catch (error) {\n console.warn(\n \"Could not determine stake key requirement, signing with payment key only.\",\n );\n console.warn(`Error: ${(error as Error).message}`);\n }\n\n try {\n if (needsStakeKey) {\n const wallet = blaze.wallet as unknown as HotWallet;\n const signed = await wallet.signTransaction(currentTx, true, true);\n const ws = currentTx.witnessSet();\n const existingVkeys = ws.vkeys()?.toCore() ?? [];\n\n const signedKeys = signed.vkeys();\n if (!signedKeys) {\n throw new Error(\n \"signTransaction: no signed keys in wallet witness response\",\n );\n }\n\n // Check for duplicates before adding\n const newSignedKeys = signedKeys.toCore();\n const existingPubKeys = new Set(existingVkeys.map(([vkey]) => vkey));\n const uniqueNewKeys = newSignedKeys.filter(\n ([vkey]) => !existingPubKeys.has(vkey),\n );\n\n if (uniqueNewKeys.length === 0) {\n console.log(\"Wallet has already signed this transaction.\");\n } else {\n ws.setVkeys(\n CborSet.fromCore(\n [...existingVkeys, ...uniqueNewKeys],\n VkeyWitness.fromCore,\n ),\n );\n currentTx.setWitnessSet(ws);\n console.log(`Added ${uniqueNewKeys.length} signature(s).`);\n hasSignedThisSession = true;\n }\n } else {\n const signedTx = await blaze.signTransaction(currentTx);\n // Merge signatures from signed tx into current tx\n const added = this.mergeSignatures(currentTx, signedTx);\n if (added > 0) {\n console.log(`Added ${added} signature(s).`);\n hasSignedThisSession = true;\n } else {\n console.log(\"Wallet has already signed this transaction.\");\n }\n }\n } catch (error) {\n console.error(`Signing failed: ${(error as Error).message}`);\n }\n // Continue loop after signing\n continue;\n }\n\n if (selection === \"expand\") {\n expanded = true;\n continue;\n }\n\n if (selection === \"copy\") {\n try {\n const { default: clipboard } = await import(\"clipboardy\");\n clipboard.writeSync(String(currentTx.toCbor()));\n console.log(\"Transaction CBOR copied to clipboard.\");\n } catch {\n console.log(\"Failed to copy to clipboard, expanding instead.\");\n expanded = true;\n }\n continue;\n }\n\n if (selection === \"import\") {\n const cborInput = await input({\n message: \"Paste transaction CBOR (hex):\",\n });\n\n if (!cborInput || cborInput.trim() === \"\") {\n console.log(\"No CBOR provided.\");\n continue;\n }\n\n try {\n const importedTx = Core.Transaction.fromCbor(\n TxCBOR(cborInput.trim()),\n );\n\n // Validate body hash matches\n const currentHash = this.getTxBodyHash(currentTx);\n const importedHash = this.getTxBodyHash(importedTx);\n\n if (currentHash !== importedHash) {\n const proceed = await confirm({\n message: `Warning: Imported transaction has different body hash.\\nCurrent: ${this.formatHash(currentHash)}\\nImported: ${this.formatHash(importedHash)}\\nProceed anyway?`,\n default: false,\n });\n if (!proceed) {\n console.log(\"Import cancelled.\");\n continue;\n }\n }\n\n // Merge signatures\n const added = this.mergeSignatures(currentTx, importedTx);\n const sourceVkeys = importedTx.witnessSet().vkeys();\n const sourceCount = sourceVkeys ? sourceVkeys.size() : 0;\n const skipped = sourceCount - added;\n\n if (added > 0) {\n console.log(`Added ${added} new signature(s).`);\n }\n if (skipped > 0) {\n console.log(`Skipped ${skipped} duplicate signature(s).`);\n }\n if (added === 0 && skipped === 0) {\n console.log(\"No signatures found in imported transaction.\");\n }\n } catch (error) {\n console.error(`Failed to import CBOR: ${(error as Error).message}`);\n }\n continue;\n }\n\n if (selection === \"submit\") {\n const sigCount = this.countSignatures(currentTx);\n if (sigCount === 0) {\n const proceed = await confirm({\n message: \"Warning: Transaction has no signatures. Submit anyway?\",\n default: false,\n });\n if (!proceed) {\n continue;\n }\n }\n\n try {\n const txId = await blaze.submitTransaction(currentTx);\n console.log(`Transaction submitted: ${txId}`);\n return { action: \"submitted\", txId, tx: currentTx };\n } catch (error) {\n console.error(`Submit failed: ${(error as Error).message}`);\n // Continue loop to allow retry or other actions\n continue;\n }\n }\n\n if (selection === \"cancel\") {\n if (hasSignedThisSession) {\n return { action: \"signed\", tx: currentTx };\n }\n return { action: \"cancelled\", tx: currentTx };\n }\n }\n }\n\n async EditStruct<U extends TSchema>(\n type: U,\n current: TExact<U>,\n ): Promise<TExact<U>> {\n return this._editStruct<U>(type, [\"root\"], current);\n }\n\n async _editStruct<U extends TSchema>(\n type: U,\n path: string[],\n current?: TExact<U>,\n ): Promise<TExact<U>> {\n if (isObject(type)) {\n const obj = {} as Record<string, unknown>;\n const fields = type[\"properties\"] as Record<string, U>;\n const menuItems: TMenuItem<S>[] = [];\n const currentRecord = current as Record<string, unknown>;\n for (const [field, fieldType] of Object.entries(fields)) {\n if (current && field in currentRecord) {\n obj[field] = currentRecord[field] as TExact<U>;\n }\n const menuTitle = Sprinkle.ExtractMessage(\n fieldType,\n `Edit ${field} at ${path.join(\".\")}`,\n );\n if (\n isOptional(fieldType) &&\n current &&\n currentRecord[field] !== undefined\n ) {\n menuItems.push({\n title: `Clear ${field}`,\n action: async (sprinkle: Sprinkle<S>) => {\n obj[field] = undefined;\n return sprinkle;\n },\n });\n }\n menuItems.push({\n title: menuTitle,\n action: async (sprinkle: Sprinkle<S>) => {\n const fieldValue = await sprinkle._editStruct(\n fieldType,\n path.concat([field]),\n current && field in currentRecord\n ? (currentRecord[field] as TExact<U>)\n : undefined,\n );\n obj[field] = fieldValue;\n return sprinkle;\n },\n });\n }\n const editMenu: IMenu<S> = {\n title: \"Test\",\n items: menuItems,\n };\n await this._showMenu(editMenu, false);\n return obj as TExact<U>;\n }\n\n return this._fillInStruct<U>(type, path, {}, current);\n }\n\n async FillInStruct<U extends TSchema>(\n type: U,\n def?: TExact<U>,\n ): Promise<TExact<U>> {\n return this._fillInStruct<U>(type, [\"root\"], {}, def);\n }\n\n async _fillInStruct<U extends TSchema>(\n type: U,\n path: string[],\n defs: Record<string, TSchema>,\n def?: TExact<U>,\n ): Promise<TExact<U>> {\n if (\"$ref\" in type) {\n defs = { ...defs, ...type[\"$defs\"] };\n const resolvedType = defs[type[\"$ref\"]];\n if (!resolvedType) {\n throw new Error(\n `Could not resolve type ${type[\"$ref\"]} at ${path.join(\".\")}`,\n );\n }\n return this._fillInStruct(resolvedType, path, defs, def) as Promise<\n TExact<U>\n >;\n }\n if (isOptional(type)) {\n const shouldSet = await select({\n message: Sprinkle.ExtractMessage(\n type,\n `Set value for ${path.join(\".\")}?`,\n ),\n choices: [\n { name: \"Yes\", value: true },\n { name: \"Skip\", value: false },\n ],\n default: def !== undefined,\n });\n if (!shouldSet) {\n return undefined as TExact<U>;\n }\n // Unwrap the optional and fill the inner type\n const innerType = { ...type };\n delete (innerType as any)[OptionalKind];\n return this._fillInStruct(innerType as U, path, defs, def);\n }\n\n if (isUnion(type)) {\n const choices = [];\n const resolved = this.resolveType(type, path, defs);\n for (const variant of resolved.anyOf) {\n choices.push({\n name: Sprinkle.ExtractMessage(variant, `${variant}`),\n value: variant,\n });\n }\n const selection = await select({\n message: Sprinkle.ExtractMessage(\n resolved,\n `Enter a choice for ${path.join(\".\")}`,\n ),\n choices: choices,\n default: def ? `${def}` : undefined,\n });\n return this._fillInStruct(selection, path, defs) as Promise<TExact<U>>;\n }\n\n if (isString(type)) {\n const defaultString = (def ? def : this.defaults[\"string\"]) as\n | string\n | undefined;\n const message = Sprinkle.ExtractMessage(\n type,\n `Enter a string for ${path.join(\".\")}`,\n );\n let answer: string;\n if (isSensitive(type)) {\n answer = await password({ message });\n } else {\n answer = await input({ message, default: defaultString });\n this.defaults[\"string\"] = answer;\n }\n return answer as TExact<U>;\n }\n\n if (isBigInt(type)) {\n const answer = await input({\n message: Sprinkle.ExtractMessage(\n type,\n `Enter a bigint for ${path.join(\".\")}`,\n ),\n default: def ? (def as bigint).toString() : undefined,\n validate: (s) => {\n try {\n BigInt(s);\n return true;\n } catch {\n return \"Please enter a valid bigint.\";\n }\n },\n });\n return BigInt(answer) as TExact<U>;\n }\n\n if (isLiteral(type)) {\n return type.const as TExact<U>;\n }\n\n if (isObject(type)) {\n const obj = {} as Record<string, unknown>;\n const fields = type[\"properties\"] as Record<string, U>;\n for (const [field, fieldType] of Object.entries(fields)) {\n const fieldValue = await this._fillInStruct(\n fieldType,\n path.concat([field]),\n defs,\n def\n ? ((def as Record<string, unknown>)[field] as TExact<U>)\n : undefined,\n );\n obj[field] = fieldValue;\n }\n return obj as TExact<U>;\n }\n\n //TODO: support starting with default values for arrays and allow removal of items\n if (isArray(type)) {\n const arr: unknown[] = [];\n const itemType = type.items as U;\n let addMore = true;\n while (addMore) {\n const itemValue = await this._fillInStruct(\n itemType,\n path.concat([`[${arr.length}]`]),\n defs,\n );\n arr.push(itemValue);\n const continueAnswer = await select({\n message: `Add another item to ${path.join(\".\")}?`,\n choices: [\n { name: \"Yes\", value: true },\n { name: \"No\", value: false },\n ],\n });\n addMore = continueAnswer;\n }\n return arr as TExact<U>;\n }\n\n throw new Error(\n `Unable to fill in struct for type at path ${path.join(\".\")}`,\n );\n }\n\n resolveType<T extends TSchema>(\n type: T,\n path: string[],\n defs: Record<string, TSchema>,\n ): T {\n if (isRef(type) || isThis(type) || isImport(type)) {\n defs = { ...defs, ...type.$defs };\n const realType = defs[type.$ref];\n if (!realType) {\n throw new Error(\n `Invalid type at ${path.join(\".\")}: Unrecognized reference ${type.$ref}`,\n );\n }\n return this.resolveType(realType, path, defs) as T;\n }\n return type;\n }\n\n static ExtractMessage(type: TSchema, def: string): string {\n if (\"title\" in type) {\n return type.title!;\n }\n\n if (\"description\" in type) {\n return type.description!;\n }\n\n if (isLiteral(type)) {\n return `${type.const}`;\n }\n\n if (isObject(type)) {\n const fields = type[\"properties\"] as Record<string, TSchema>;\n if (\"type\" in fields) {\n return Sprinkle.ExtractMessage(fields[\"type\"], def);\n }\n const fieldNames = Object.keys(fields);\n if (fieldNames.length === 1) {\n return fieldNames[0]!;\n }\n }\n\n return def;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_query","require","_sdk","_core","_prompts","_typebox","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","fs","_interopRequireWildcard","path","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor","_defineProperty","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","isOptional","OptionalKind","isImport","Kind","isArray","isBigInt","isLiteral","isObject","isRef","isString","isThis","isTuple","isUnion","isSensitive","sensitive","NetworkSchema","Type","Union","Literal","MultisigScriptModule","Module","MultisigScript","Signature","key_hash","ctor","AllOf","scripts","Array","Ref","AnyOf","AtLeast","required","BigInt","Before","time","After","Script","script_hash","Import","ProviderSettingsSchema","type","projectId","minLength","title","apiKey","WalletSettingsSchema","privateKey","address","Sprinkle","constructor","storagePath","options","name","createdAt","updatedAt","sanitizeProfileId","toLowerCase","replace","profilesDir","join","profilePath","id","test","includes","Error","activeProfilePath","findAvailableId","baseId","candidate","counter","existsSync","scanProfiles","dir","files","readdirSync","filter","endsWith","entries","file","content","readFileSync","parsed","JSON","parse","bigIntReviver","meta","push","loadProfile","filePath","profileId","profileMeta","settings","decryptSettings","defaults","writeFileSync","saveProfile","dirname","mkdirSync","recursive","Date","toISOString","settingsToSave","encryptSettings","jsonContent","stringify","bigIntReplacer","promptProfileMeta","defaultName","defaultDescription","input","message","validate","v","trim","length","description","undefined","createProfile","now","FillInStruct","migrateIfNeeded","legacyPath","SettingsPath","profileData","renameSync","selectOrCreateProfile","profiles","pointerPath","activeId","some","p","selectProfile","available","selection","select","choices","map","duplicateProfile","console","log","renameProfile","newId","oldId","newPath","unlinkSync","deleteProfile","others","toDelete","profileToDelete","find","confirmed","confirm","showMenu","menu","_showMenu","main","beforeShow","items","item","index","settingsMenu","action","EditStruct","saveSettings","selectedItem","result","New","sprinkle","GetProvider","network","Blockfrost","queryModule","Promise","resolve","then","Maestro","GetWallet","provider","HotWallet","fromMasterkey","Core","Bip32PrivateKeyHex","ColdWallet","Address","fromBech32","GetBlaze","providerSettings","walletSettings","wallet","Blaze","from","SearchSelect","opts","search","sep","LoadSettings","fileContent","error","slice","_key","toString","collectSensitivePaths","prefix","paths","fields","field","fieldType","fieldPath","variant","anyOf","getNestedValue","obj","split","reduce","k","setNestedValue","last","pop","parent","encryption","clone","sensitivePaths","encrypt","decrypt","getWalletPaymentKeyHash","addresses","getUsedAddresses","paymentCredential","asBase","getPaymentCredential","hash","countSignatures","tx","vkeys","witnessSet","size","hasVkeySigned","vkeyHex","vkeyArray","toCore","vkey","getRequiredSigners","requiredSigners","body","values","s","getTxBodyHash","bodyCbor","toCbor","blake2b_256","formatHash","mergeSignatures","target","source","targetWs","sourceWs","targetVkeys","sourceVkeys","existingPubKeys","Set","newVkeys","setVkeys","CborSet","fromCore","VkeyWitness","setWitnessSet","TxDialog","blaze","currentTx","expanded","hasSignedThisSession","isHotWallet","walletVkeys","txHash","sigCount","signer","txCbor","beforeSign","needsStakeKey","userAddress","stakeCredential","getStakeCredential","stakeKeyHash","reqSigners","signerArray","certs","hasCertificates","withdrawals","hasWithdrawals","warn","signed","signTransaction","ws","existingVkeys","signedKeys","newSignedKeys","uniqueNewKeys","signedTx","added","clipboard","writeSync","cborInput","importedTx","Transaction","fromCbor","TxCBOR","currentHash","importedHash","proceed","sourceCount","skipped","txId","submitTransaction","current","_editStruct","menuItems","currentRecord","menuTitle","ExtractMessage","fieldValue","concat","editMenu","_fillInStruct","def","defs","resolvedType","shouldSet","innerType","resolved","resolveType","defaultString","answer","password","const","arr","itemType","addMore","itemValue","continueAnswer","$defs","realType","$ref","fieldNames"],"sources":["../../../src/Sprinkle/index.ts"],"sourcesContent":["import { Blockfrost, type Provider } from \"@blaze-cardano/query\";\nimport {\n Blaze,\n ColdWallet,\n Core,\n HotWallet,\n type Wallet,\n} from \"@blaze-cardano/sdk\";\nimport { CborSet, VkeyWitness, blake2b_256, TxCBOR } from \"@blaze-cardano/core\";\nimport { confirm, input, password, search, select } from \"@inquirer/prompts\";\nimport {\n Kind,\n type Static,\n type TBigInt,\n type TLiteral,\n type TObject,\n type TSchema,\n type TString,\n type TTuple,\n type TUnion,\n Type,\n type TArray,\n type TThis,\n type TRef,\n type TImport,\n type TOptional,\n OptionalKind,\n} from \"@sinclair/typebox\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nexport * from \"@sinclair/typebox\";\n\nexport type TExact<T> = T extends TSchema ? Static<T> : T;\n\nconst isOptional = <T extends TSchema>(t: T): t is TOptional<T> =>\n t[OptionalKind] === \"Optional\";\nconst isImport = (t: TSchema): t is TImport => t[Kind] === \"Import\";\nconst isArray = (t: TSchema): t is TArray => t[Kind] === \"Array\";\nconst isBigInt = (t: TSchema): t is TBigInt => t[Kind] === \"BigInt\";\n// const isBoolean = (t: TSchema): t is TBoolean => t[Kind] === \"Boolean\";\nconst isLiteral = (t: TSchema): t is TLiteral => t[Kind] === \"Literal\";\n// const isNumber = (t: TSchema): t is TNumber => t[Kind] === \"Number\";\nconst isObject = (t: TSchema): t is TObject => t[Kind] === \"Object\";\n// const isRecord = (t: TSchema): t is TRecord => t[Kind] === \"Record\";\nconst isRef = (t: TSchema): t is TRef => t[Kind] === \"Ref\";\nconst isString = (t: TSchema): t is TString => t[Kind] === \"String\";\nconst isThis = (t: TSchema): t is TThis => t[Kind] === \"This\";\nconst isTuple = (t: TSchema): t is TTuple => t[Kind] === \"Tuple\";\nconst isUnion = (t: TSchema): t is TUnion => t[Kind] === \"Union\";\n// const isAny = (t: TSchema): t is TAny => t[Kind] === \"Any\";\n\nconst isSensitive = (t: TSchema): boolean =>\n isString(t) && t.sensitive === true;\n\nexport interface IEncryptionOptions {\n encrypt: (plaintext: string) => string;\n decrypt: (ciphertext: string) => Promise<string>;\n}\n\nexport interface ISprinkleOptions {\n encryption?: IEncryptionOptions;\n}\n\nexport interface IProfileMeta {\n name: string;\n description?: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface IProfileEntry {\n id: string;\n meta: IProfileMeta;\n}\n\nexport interface TxDialogResult {\n action: \"submitted\" | \"signed\" | \"cancelled\";\n txId?: string; // present only if action === 'submitted'\n tx: Core.Transaction; // the (potentially signed) transaction\n}\n\nexport interface TxDialogOptions {\n beforeSign?: () => Promise<void>;\n}\n\nexport const NetworkSchema = Type.Union([\n Type.Literal(\"mainnet\"),\n Type.Literal(\"preview\"),\n Type.Literal(\"preprod\"),\n]);\n\nexport const MultisigScriptModule = Type.Module({\n MultisigScript: Type.Union([\n Type.Object({\n Signature: Type.Object(\n {\n key_hash: Type.String(),\n },\n { ctor: 0n },\n ),\n }),\n Type.Object({\n AllOf: Type.Object(\n {\n scripts: Type.Array(Type.Ref(\"MultisigScript\")),\n },\n { ctor: 1n },\n ),\n }),\n Type.Object({\n AnyOf: Type.Object(\n {\n scripts: Type.Array(Type.Ref(\"MultisigScript\")),\n },\n { ctor: 2n },\n ),\n }),\n Type.Object({\n AtLeast: Type.Object(\n {\n required: Type.BigInt(),\n scripts: Type.Array(Type.Ref(\"MultisigScript\")),\n },\n { ctor: 3n },\n ),\n }),\n Type.Object({\n Before: Type.Object(\n {\n time: Type.BigInt(),\n },\n { ctor: 4n },\n ),\n }),\n Type.Object({\n After: Type.Object(\n {\n time: Type.BigInt(),\n },\n { ctor: 5n },\n ),\n }),\n Type.Object({\n Script: Type.Object(\n {\n script_hash: Type.String(),\n },\n { ctor: 6n },\n ),\n }),\n ]),\n});\nexport const MultisigScript = MultisigScriptModule.Import(\"MultisigScript\");\nexport type TMultisigScript = TExact<typeof MultisigScript>;\n\nexport const ProviderSettingsSchema = Type.Union([\n Type.Object({\n type: Type.Literal(\"blockfrost\"),\n projectId: Type.String({ minLength: 1, title: \"Blockfrost Project ID\" }),\n }),\n Type.Object({\n type: Type.Literal(\"maestro\"),\n apiKey: Type.String({ minLength: 1, title: \"Maestro API Key\" }),\n }),\n]);\n\nexport const WalletSettingsSchema = Type.Union([\n Type.Object({\n type: Type.Literal(\"hot\"),\n privateKey: Type.String({ minLength: 1, title: \"Hot Wallet Private Key\" }),\n }),\n Type.Object({\n type: Type.Literal(\"cold\"),\n address: Type.String({ minLength: 1, title: \"Cold Wallet Address\" }),\n }),\n]);\n\nexport interface IMenuAction<S extends TSchema> {\n title: string;\n action: (sprinkle: Sprinkle<S>) => Promise<Sprinkle<S> | void>;\n}\nexport type TMenuItem<S extends TSchema> = IMenuAction<S> | IMenu<S>;\nexport interface IMenu<S extends TSchema> {\n title: string;\n items: TMenuItem<S>[];\n beforeShow?: (sprinkle: Sprinkle<S>) => Promise<void>;\n}\n\nexport class Sprinkle<S extends TSchema> {\n storagePath: string;\n settings: TExact<S> = {} as TExact<S>;\n type: S;\n defaults: Record<string, unknown> = {};\n options: ISprinkleOptions;\n profileId: string = \"\";\n profileMeta: IProfileMeta = { name: \"\", createdAt: \"\", updatedAt: \"\" };\n\n constructor(type: S, storagePath: string, options?: ISprinkleOptions) {\n this.type = type;\n this.storagePath = storagePath;\n this.options = options ?? {};\n }\n\n // --- Profile path helpers ---\n\n static sanitizeProfileId(name: string): string {\n return (\n name\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, \"\")\n .replace(/[\\s]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\") || \"profile\"\n );\n }\n\n private static profilesDir(storagePath: string): string {\n return path.join(storagePath, \"profiles\");\n }\n\n private static profilePath(storagePath: string, id: string): string {\n if (!id || /[\\/\\\\]/.test(id) || id.includes(\"..\")) {\n throw new Error(`Invalid profile ID: \"${id}\"`);\n }\n return path.join(storagePath, \"profiles\", `${id}.json`);\n }\n\n private static activeProfilePath(storagePath: string): string {\n return path.join(storagePath, \"active-profile\");\n }\n\n private static findAvailableId(profilesDir: string, baseId: string): string {\n let candidate = baseId;\n let counter = 2;\n while (fs.existsSync(path.join(profilesDir, `${candidate}.json`))) {\n candidate = `${baseId}-${counter}`;\n counter++;\n }\n return candidate;\n }\n\n // --- Profile I/O ---\n\n scanProfiles(): IProfileEntry[] {\n const dir = Sprinkle.profilesDir(this.storagePath);\n if (!fs.existsSync(dir)) return [];\n const files = fs.readdirSync(dir).filter((f) => f.endsWith(\".json\"));\n const entries: IProfileEntry[] = [];\n for (const file of files) {\n try {\n const content = fs.readFileSync(path.join(dir, file), \"utf-8\");\n const parsed = JSON.parse(content, Sprinkle.bigIntReviver);\n if (parsed.meta?.name) {\n entries.push({\n id: file.replace(/\\.json$/, \"\"),\n meta: parsed.meta,\n });\n }\n } catch {\n // Skip malformed profile files\n }\n }\n return entries;\n }\n\n async loadProfile(id: string): Promise<void> {\n const filePath = Sprinkle.profilePath(this.storagePath, id);\n const content = fs.readFileSync(filePath, \"utf-8\");\n const parsed = JSON.parse(content, Sprinkle.bigIntReviver);\n this.profileId = id;\n this.profileMeta = parsed.meta;\n this.settings = await this.decryptSettings(parsed.settings as TExact<S>);\n this.defaults = parsed.defaults ?? {};\n // Update active profile pointer\n fs.writeFileSync(Sprinkle.activeProfilePath(this.storagePath), id, \"utf-8\");\n }\n\n private saveProfile(): void {\n if (!this.profileId) {\n throw new Error(\n \"Cannot save profile: no profile is loaded. Call loadProfile() or create a profile first.\",\n );\n }\n const filePath = Sprinkle.profilePath(this.storagePath, this.profileId);\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n this.profileMeta.updatedAt = new Date().toISOString();\n const settingsToSave = this.encryptSettings(this.settings);\n const jsonContent = JSON.stringify(\n {\n meta: this.profileMeta,\n settings: settingsToSave,\n defaults: this.defaults,\n },\n Sprinkle.bigIntReplacer,\n 2,\n );\n fs.writeFileSync(filePath, jsonContent, \"utf-8\");\n }\n\n private async promptProfileMeta(\n defaultName?: string,\n defaultDescription?: string,\n ): Promise<{ name: string; description?: string }> {\n const name = await input({\n message: \"Profile name:\",\n default: defaultName,\n validate: (v) => (v.trim().length > 0 ? true : \"Name cannot be empty\"),\n });\n const description = await input({\n message: \"Profile description (optional):\",\n default: defaultDescription ?? \"\",\n });\n return { name, description: description || undefined };\n }\n\n private async createProfile(): Promise<void> {\n const { name, description } = await this.promptProfileMeta();\n const profilesDir = Sprinkle.profilesDir(this.storagePath);\n const id = Sprinkle.findAvailableId(\n profilesDir,\n Sprinkle.sanitizeProfileId(name),\n );\n const now = new Date().toISOString();\n this.profileId = id;\n this.profileMeta = { name, description, createdAt: now, updatedAt: now };\n this.defaults = {};\n this.settings = await this.FillInStruct(this.type);\n this.saveProfile();\n fs.writeFileSync(Sprinkle.activeProfilePath(this.storagePath), id, \"utf-8\");\n }\n\n private async migrateIfNeeded(): Promise<void> {\n const profilesDir = Sprinkle.profilesDir(this.storagePath);\n const legacyPath = Sprinkle.SettingsPath(this.storagePath);\n\n if (!fs.existsSync(profilesDir)) {\n if (fs.existsSync(legacyPath)) {\n // Migrate legacy settings.json -> profiles/default.json\n const content = fs.readFileSync(legacyPath, \"utf-8\");\n const parsed = JSON.parse(content, Sprinkle.bigIntReviver);\n const now = new Date().toISOString();\n const profileData = {\n meta: {\n name: \"Default\",\n createdAt: now,\n updatedAt: now,\n },\n settings: parsed.settings,\n defaults: parsed.defaults ?? {},\n };\n fs.mkdirSync(profilesDir, { recursive: true });\n fs.writeFileSync(\n Sprinkle.profilePath(this.storagePath, \"default\"),\n JSON.stringify(profileData, Sprinkle.bigIntReplacer, 2),\n \"utf-8\",\n );\n fs.writeFileSync(\n Sprinkle.activeProfilePath(this.storagePath),\n \"default\",\n \"utf-8\",\n );\n // Backup legacy file\n fs.renameSync(legacyPath, `${legacyPath}.bak`);\n } else {\n fs.mkdirSync(profilesDir, { recursive: true });\n }\n }\n }\n\n private async selectOrCreateProfile(): Promise<void> {\n const profiles = this.scanProfiles();\n\n if (profiles.length === 0) {\n await this.createProfile();\n return;\n }\n\n if (profiles.length === 1) {\n await this.loadProfile(profiles[0]!.id);\n return;\n }\n\n // Multiple profiles: check active-profile pointer\n const pointerPath = Sprinkle.activeProfilePath(this.storagePath);\n if (fs.existsSync(pointerPath)) {\n const activeId = fs.readFileSync(pointerPath, \"utf-8\").trim();\n if (profiles.some((p) => p.id === activeId)) {\n await this.loadProfile(activeId);\n return;\n }\n }\n\n // No valid pointer - show selector\n await this.selectProfile(profiles);\n }\n\n private async selectProfile(profiles?: IProfileEntry[]): Promise<void> {\n const available = profiles ?? this.scanProfiles();\n const selection = await select({\n message: \"Select a profile:\",\n choices: available.map((p) => ({\n name: p.meta.description\n ? `${p.meta.name} - ${p.meta.description}`\n : p.meta.name,\n value: p.id,\n })),\n });\n await this.loadProfile(selection);\n }\n\n // --- Profile management (CRUD) ---\n\n private async duplicateProfile(): Promise<void> {\n const { name, description } = await this.promptProfileMeta(\n `${this.profileMeta.name} (copy)`,\n this.profileMeta.description,\n );\n const profilesDir = Sprinkle.profilesDir(this.storagePath);\n const id = Sprinkle.findAvailableId(\n profilesDir,\n Sprinkle.sanitizeProfileId(name),\n );\n const now = new Date().toISOString();\n // Write duplicate with current settings\n const settingsToSave = this.encryptSettings(this.settings);\n const jsonContent = JSON.stringify(\n {\n meta: { name, description, createdAt: now, updatedAt: now },\n settings: settingsToSave,\n defaults: this.defaults,\n },\n Sprinkle.bigIntReplacer,\n 2,\n );\n fs.writeFileSync(\n path.join(profilesDir, `${id}.json`),\n jsonContent,\n \"utf-8\",\n );\n console.log(`Profile \"${name}\" created as a copy.`);\n }\n\n private async renameProfile(): Promise<void> {\n const { name, description } = await this.promptProfileMeta(\n this.profileMeta.name,\n this.profileMeta.description,\n );\n const newId = Sprinkle.sanitizeProfileId(name);\n const oldId = this.profileId;\n\n this.profileMeta.name = name;\n this.profileMeta.description = description;\n\n if (newId !== oldId) {\n const newPath = Sprinkle.profilePath(this.storagePath, newId);\n if (fs.existsSync(newPath)) {\n console.log(\n `A profile with ID \"${newId}\" already exists. Choose a different name.`,\n );\n return;\n }\n // Save to new path, remove old file\n this.profileId = newId;\n this.saveProfile();\n fs.unlinkSync(Sprinkle.profilePath(this.storagePath, oldId));\n fs.writeFileSync(\n Sprinkle.activeProfilePath(this.storagePath),\n newId,\n \"utf-8\",\n );\n } else {\n this.saveProfile();\n }\n console.log(`Profile renamed to \"${name}\".`);\n }\n\n private async deleteProfile(): Promise<void> {\n const profiles = this.scanProfiles();\n const others = profiles.filter((p) => p.id !== this.profileId);\n\n if (others.length === 0) {\n console.log(\"Cannot delete the only profile.\");\n return;\n }\n\n const toDelete = await select({\n message: \"Select a profile to delete:\",\n choices: [\n ...others.map((p) => ({\n name: p.meta.description\n ? `${p.meta.name} - ${p.meta.description}`\n : p.meta.name,\n value: p.id,\n })),\n { name: \"Cancel\", value: \"__cancel__\" },\n ],\n });\n\n if (toDelete === \"__cancel__\") return;\n\n const profileToDelete = others.find((p) => p.id === toDelete);\n const confirmed = await confirm({\n message: `Delete profile \"${profileToDelete?.meta.name ?? toDelete}\"? This cannot be undone.`,\n default: false,\n });\n\n if (confirmed) {\n fs.unlinkSync(Sprinkle.profilePath(this.storagePath, toDelete));\n console.log(\n `Profile \"${profileToDelete?.meta.name ?? toDelete}\" deleted.`,\n );\n }\n }\n\n // --- Menu ---\n\n async showMenu(menu: IMenu<S>): Promise<void> {\n return this._showMenu(menu, true);\n }\n\n private async _showMenu(menu: IMenu<S>, main: boolean): Promise<void> {\n if (menu.beforeShow) {\n await menu.beforeShow(this);\n }\n const choices = menu.items.map((item, index) => {\n if (\"action\" in item) {\n return { name: item.title, value: index };\n } else {\n return { name: `${item.title} Submenu`, value: index };\n }\n });\n if (!main) {\n choices.push({ name: \"Back\", value: -1 });\n } else {\n choices.push({ name: \"Settings & Profiles\", value: -5 });\n choices.push({ name: \"Exit\", value: -1 });\n }\n const selection = await select({\n message: \"Select an option:\",\n choices: choices,\n });\n if (selection === -5) {\n const settingsMenu: IMenu<S> = {\n title: \"Settings & Profiles\",\n items: [\n {\n title: \"Edit settings\",\n action: async () => {\n this.settings = await this.EditStruct(this.type, this.settings);\n this.saveSettings();\n },\n },\n {\n title: \"Switch profile\",\n action: async () => {\n this.saveSettings();\n const profiles = this.scanProfiles();\n if (profiles.length <= 1) {\n console.log(\n \"No other profiles to switch to. Create a new one first.\",\n );\n } else {\n await this.selectProfile(profiles);\n }\n },\n },\n {\n title: \"Create new profile\",\n action: async () => {\n await this.createProfile();\n },\n },\n {\n title: \"Duplicate current profile\",\n action: async () => {\n await this.duplicateProfile();\n },\n },\n {\n title: \"Rename current profile\",\n action: async () => {\n await this.renameProfile();\n },\n },\n {\n title: \"Delete a profile\",\n action: async () => {\n await this.deleteProfile();\n },\n },\n ],\n };\n await this._showMenu(settingsMenu, false);\n await this._showMenu(menu, main);\n return;\n }\n if (selection === -1) {\n return;\n }\n const selectedItem = menu.items[selection]!;\n if (\"action\" in selectedItem) {\n const result = await selectedItem.action(this);\n if (result instanceof Sprinkle) {\n this.settings = result.settings;\n this.saveSettings();\n }\n await this._showMenu(menu, main);\n } else {\n await this._showMenu(selectedItem, false);\n await this._showMenu(menu, main);\n }\n return;\n }\n\n static async New<S extends TSchema>(\n type: S,\n storagePath: string,\n options?: ISprinkleOptions,\n ): Promise<Sprinkle<S>> {\n const sprinkle = new Sprinkle<S>(type, storagePath, options);\n await sprinkle.migrateIfNeeded();\n await sprinkle.selectOrCreateProfile();\n sprinkle.saveSettings();\n return sprinkle;\n }\n\n static async GetProvider(\n network: TExact<typeof NetworkSchema>,\n settings: TExact<typeof ProviderSettingsSchema>,\n ): Promise<Provider> {\n switch (settings.type) {\n case \"blockfrost\":\n return new Blockfrost({\n network: `cardano-${network}`,\n projectId: settings.projectId,\n });\n case \"maestro\":\n // Dynamic import - Maestro may or may not be exported depending on @blaze-cardano/query version\n const queryModule = (await import(\"@blaze-cardano/query\")) as any;\n if (!queryModule.Maestro) {\n throw new Error(\n \"Maestro is not available in the installed version of @blaze-cardano/query. Please install a version that includes Maestro support.\",\n );\n }\n return new queryModule.Maestro({\n network: network as \"mainnet\" | \"preview\" | \"preprod\",\n apiKey: settings.apiKey,\n });\n default:\n throw new Error(\"Invalid provider type\");\n }\n }\n\n static async GetWallet(\n settings: TExact<typeof WalletSettingsSchema>,\n provider: Provider,\n ): Promise<Wallet> {\n switch (settings.type) {\n case \"hot\":\n return HotWallet.fromMasterkey(\n Core.Bip32PrivateKeyHex(settings.privateKey),\n provider,\n provider.network,\n );\n case \"cold\":\n return new ColdWallet(\n Core.Address.fromBech32(settings.address),\n provider.network,\n provider,\n );\n default:\n throw new Error(\"Invalid wallet type\");\n }\n }\n\n static async GetBlaze(\n network: TExact<typeof NetworkSchema>,\n providerSettings: TExact<typeof ProviderSettingsSchema>,\n walletSettings: TExact<typeof WalletSettingsSchema>,\n ): Promise<Blaze<Provider, Wallet>> {\n const provider = await Sprinkle.GetProvider(network, providerSettings);\n const wallet = await Sprinkle.GetWallet(walletSettings, provider);\n return Blaze.from(provider, wallet);\n }\n\n static async SearchSelect<T>(opts: {\n message: string;\n source: (\n term: string | undefined,\n ) => Promise<{ name: string; value: T }[]> | { name: string; value: T }[];\n }): Promise<T> {\n return search(opts) as Promise<T>;\n }\n\n static SettingsPath(storagePath: string): string {\n return `${storagePath}${path.sep}settings.json`;\n }\n\n async LoadSettings(type: S, storagePath: string): Promise<void> {\n try {\n // Check if the settings file exists\n if (fs.existsSync(storagePath)) {\n // Read and parse the JSON file\n const fileContent = fs.readFileSync(storagePath, \"utf-8\");\n const parsed = JSON.parse(fileContent, Sprinkle.bigIntReviver) as {\n settings: unknown;\n defaults: Record<string, unknown>;\n };\n // Convert string representations back to BigInt where needed\n this.settings = await this.decryptSettings(\n parsed.settings as TExact<S>,\n );\n this.defaults = parsed.defaults;\n } else {\n this.defaults = {};\n this.settings = await this.FillInStruct(type);\n }\n } catch (error) {\n throw new Error(`Error loading settings from ${storagePath}: ${error}`);\n }\n }\n\n static bigIntReviver(key: string, value: unknown): unknown {\n if (typeof value === \"string\" && /^\\d+n$/.test(value)) {\n return BigInt(value.slice(0, -1));\n }\n return value;\n }\n\n private static bigIntReplacer(_key: string, value: unknown): unknown {\n return typeof value === \"bigint\" ? `${value.toString()}n` : value;\n }\n\n private static collectSensitivePaths(\n type: TSchema,\n prefix: string = \"\",\n ): string[] {\n const paths: string[] = [];\n if (isObject(type)) {\n const fields = type[\"properties\"] as Record<string, TSchema>;\n for (const [field, fieldType] of Object.entries(fields)) {\n const fieldPath = prefix ? `${prefix}.${field}` : field;\n if (isSensitive(fieldType)) {\n paths.push(fieldPath);\n }\n paths.push(...Sprinkle.collectSensitivePaths(fieldType, fieldPath));\n }\n }\n if (isUnion(type)) {\n for (const variant of type.anyOf) {\n paths.push(...Sprinkle.collectSensitivePaths(variant, prefix));\n }\n }\n return paths;\n }\n\n private static getNestedValue(obj: any, path: string): unknown {\n return path.split(\".\").reduce((o, k) => o?.[k], obj);\n }\n\n private static setNestedValue(obj: any, path: string, value: unknown): void {\n const keys = path.split(\".\");\n const last = keys.pop()!;\n const parent = keys.reduce((o, k) => o?.[k], obj);\n if (parent && typeof parent === \"object\") {\n parent[last] = value;\n }\n }\n\n private encryptSettings(settings: TExact<S>): TExact<S> {\n if (!this.options.encryption) return settings;\n const clone = JSON.parse(\n JSON.stringify(settings, Sprinkle.bigIntReplacer),\n Sprinkle.bigIntReviver,\n );\n const sensitivePaths = Sprinkle.collectSensitivePaths(this.type);\n for (const p of sensitivePaths) {\n const value = Sprinkle.getNestedValue(clone, p);\n if (typeof value === \"string\" && value.length > 0) {\n Sprinkle.setNestedValue(\n clone,\n p,\n this.options.encryption.encrypt(value),\n );\n }\n }\n return clone;\n }\n\n private async decryptSettings(settings: TExact<S>): Promise<TExact<S>> {\n if (!this.options.encryption) return settings;\n const clone = JSON.parse(\n JSON.stringify(settings, Sprinkle.bigIntReplacer),\n Sprinkle.bigIntReviver,\n );\n const sensitivePaths = Sprinkle.collectSensitivePaths(this.type);\n for (const p of sensitivePaths) {\n const value = Sprinkle.getNestedValue(clone, p);\n if (typeof value === \"string\" && value.length > 0) {\n Sprinkle.setNestedValue(\n clone,\n p,\n await this.options.encryption.decrypt(value),\n );\n }\n }\n return clone;\n }\n\n saveSettings(): void {\n this.saveProfile();\n }\n\n // --- TxDialog Helpers ---\n\n /**\n * Get the payment key hash from a HotWallet's first address\n */\n private async getWalletPaymentKeyHash(\n wallet: HotWallet,\n ): Promise<string | null> {\n try {\n const addresses = await wallet.getUsedAddresses();\n const address = addresses[0];\n if (!address) return null;\n const paymentCredential = address.asBase()?.getPaymentCredential();\n return paymentCredential?.hash?.toString() ?? null;\n } catch {\n return null;\n }\n }\n\n /**\n * Count the number of vkey signatures in a transaction's witness set\n */\n private countSignatures(tx: Core.Transaction): number {\n const vkeys = tx.witnessSet().vkeys();\n return vkeys ? vkeys.size() : 0;\n }\n\n /**\n * Check if a specific public key has already signed the transaction\n * Compares by vkey (public key bytes)\n */\n private hasVkeySigned(tx: Core.Transaction, vkeyHex: string): boolean {\n const vkeys = tx.witnessSet().vkeys();\n if (!vkeys) return false;\n const vkeyArray = vkeys.toCore();\n return vkeyArray.some(([vkey]) => vkey === vkeyHex);\n }\n\n /**\n * Get the list of required signer key hashes from the transaction body\n */\n private getRequiredSigners(tx: Core.Transaction): string[] {\n const requiredSigners = tx.body().requiredSigners();\n if (!requiredSigners) return [];\n return Array.from(requiredSigners.values()).map((s) => s.toString());\n }\n\n /**\n * Compute the transaction body hash for display\n */\n private getTxBodyHash(tx: Core.Transaction): string {\n const bodyCbor = tx.body().toCbor();\n return blake2b_256(bodyCbor);\n }\n\n /**\n * Format a hash for display: first 8 chars + ... + last 8 chars\n */\n private formatHash(hash: string): string {\n if (hash.length <= 20) return hash;\n return `${hash.slice(0, 8)}...${hash.slice(-8)}`;\n }\n\n /**\n * Merge signatures from source transaction into target transaction.\n * Prevents duplicate signatures by comparing vkey (public key).\n * Returns the count of newly added signatures.\n */\n private mergeSignatures(\n target: Core.Transaction,\n source: Core.Transaction,\n ): number {\n const targetWs = target.witnessSet();\n const sourceWs = source.witnessSet();\n\n const targetVkeys = targetWs.vkeys()?.toCore() ?? [];\n const sourceVkeys = sourceWs.vkeys()?.toCore() ?? [];\n\n // Find vkeys in source that aren't in target (by comparing public key)\n const existingPubKeys = new Set(targetVkeys.map(([vkey]) => vkey));\n const newVkeys = sourceVkeys.filter(\n ([vkey]) => !existingPubKeys.has(vkey),\n );\n\n if (newVkeys.length === 0) {\n return 0;\n }\n\n // Merge the new vkeys into target\n targetWs.setVkeys(\n CborSet.fromCore([...targetVkeys, ...newVkeys], VkeyWitness.fromCore),\n );\n target.setWitnessSet(targetWs);\n\n return newVkeys.length;\n }\n\n async TxDialog<P extends Provider, W extends Wallet>(\n blaze: Blaze<P, W>,\n tx: Core.Transaction,\n opts?: TxDialogOptions,\n ): Promise<TxDialogResult> {\n let currentTx = tx;\n let expanded = false;\n let hasSignedThisSession = false;\n\n // Check if wallet can sign (is HotWallet)\n const isHotWallet = blaze.wallet instanceof HotWallet;\n\n // Get wallet's vkeys for detecting if already signed\n let walletVkeys: string[] = [];\n if (isHotWallet) {\n try {\n // Sign a dummy to get the wallet's public keys\n // We'll use this to check if wallet has already signed\n const wallet = blaze.wallet as unknown as HotWallet;\n const addresses = await wallet.getUsedAddresses();\n const address = addresses[0];\n if (address) {\n // We can't easily get vkeys without signing, so we'll track after first sign\n }\n } catch {\n // Ignore errors in setup\n }\n }\n\n while (true) {\n // Display transaction status\n const txHash = this.getTxBodyHash(currentTx);\n const sigCount = this.countSignatures(currentTx);\n const requiredSigners = this.getRequiredSigners(currentTx);\n\n console.log(\"\");\n console.log(`Transaction: ${this.formatHash(txHash)}`);\n if (requiredSigners.length > 0) {\n console.log(`Signatures: ${sigCount} of ${requiredSigners.length} required`);\n console.log(\"Required signers:\");\n for (const signer of requiredSigners) {\n console.log(` - ${this.formatHash(signer)}`);\n }\n } else {\n console.log(`Signatures: ${sigCount}`);\n }\n\n // Display CBOR\n const txCbor = currentTx.toCbor();\n if (expanded) {\n console.log(\"Transaction CBOR:\", txCbor);\n } else {\n console.log(\"Transaction CBOR:\", `${String(txCbor).slice(0, 50)}...`);\n }\n\n // Build dynamic menu choices\n const choices: { name: string; value: string }[] = [];\n\n // \"Sign with this wallet\" - only if HotWallet and hasn't signed this session\n if (isHotWallet && !hasSignedThisSession) {\n choices.push({ name: \"Sign with this wallet\", value: \"sign\" });\n }\n\n // CBOR options\n if (!expanded) {\n choices.push({ name: \"Expand CBOR\", value: \"expand\" });\n }\n choices.push({ name: \"Copy CBOR to clipboard\", value: \"copy\" });\n choices.push({ name: \"Import signatures from CBOR\", value: \"import\" });\n\n // Submit and cancel\n choices.push({ name: \"Submit transaction\", value: \"submit\" });\n choices.push({ name: \"Cancel\", value: \"cancel\" });\n\n const selection = await select({\n message: \"Select an option:\",\n choices,\n });\n\n // Handle selection\n if (selection === \"sign\") {\n if (opts?.beforeSign) {\n await opts.beforeSign();\n }\n\n // Detect if stake key signature is required\n let needsStakeKey = false;\n try {\n const wallet = blaze.wallet as unknown as HotWallet;\n const addresses = await wallet.getUsedAddresses();\n const userAddress = addresses[0];\n if (userAddress) {\n const stakeCredential = userAddress.asBase()?.getStakeCredential();\n const stakeKeyHash = stakeCredential?.hash?.toString();\n\n if (stakeKeyHash) {\n const reqSigners = currentTx.body().requiredSigners();\n if (reqSigners) {\n const signerArray = Array.from(reqSigners.values());\n needsStakeKey = signerArray.some(\n (signer) => signer.toString() === stakeKeyHash,\n );\n }\n\n const certs = currentTx.body().certs();\n const hasCertificates = certs && certs.size() > 0;\n const withdrawals = currentTx.body().withdrawals();\n const hasWithdrawals = withdrawals && withdrawals.size > 0;\n\n if (hasCertificates || hasWithdrawals) {\n needsStakeKey = true;\n }\n }\n }\n\n if (needsStakeKey) {\n console.log(\"Transaction requires stake key signature.\");\n } else {\n console.log(\"Transaction requires payment key signature only.\");\n }\n } catch (error) {\n console.warn(\n \"Could not determine stake key requirement, signing with payment key only.\",\n );\n console.warn(`Error: ${(error as Error).message}`);\n }\n\n try {\n if (needsStakeKey) {\n const wallet = blaze.wallet as unknown as HotWallet;\n const signed = await wallet.signTransaction(currentTx, true, true);\n const ws = currentTx.witnessSet();\n const existingVkeys = ws.vkeys()?.toCore() ?? [];\n\n const signedKeys = signed.vkeys();\n if (!signedKeys) {\n throw new Error(\n \"signTransaction: no signed keys in wallet witness response\",\n );\n }\n\n // Check for duplicates before adding\n const newSignedKeys = signedKeys.toCore();\n const existingPubKeys = new Set(existingVkeys.map(([vkey]) => vkey));\n const uniqueNewKeys = newSignedKeys.filter(\n ([vkey]) => !existingPubKeys.has(vkey),\n );\n\n if (uniqueNewKeys.length === 0) {\n console.log(\"Wallet has already signed this transaction.\");\n } else {\n ws.setVkeys(\n CborSet.fromCore(\n [...existingVkeys, ...uniqueNewKeys],\n VkeyWitness.fromCore,\n ),\n );\n currentTx.setWitnessSet(ws);\n console.log(`Added ${uniqueNewKeys.length} signature(s).`);\n hasSignedThisSession = true;\n }\n } else {\n const signedTx = await blaze.signTransaction(currentTx);\n // Merge signatures from signed tx into current tx\n const added = this.mergeSignatures(currentTx, signedTx);\n if (added > 0) {\n console.log(`Added ${added} signature(s).`);\n hasSignedThisSession = true;\n } else {\n console.log(\"Wallet has already signed this transaction.\");\n }\n }\n } catch (error) {\n console.error(`Signing failed: ${(error as Error).message}`);\n }\n // Continue loop after signing\n continue;\n }\n\n if (selection === \"expand\") {\n expanded = true;\n continue;\n }\n\n if (selection === \"copy\") {\n try {\n const { default: clipboard } = await import(\"clipboardy\");\n clipboard.writeSync(String(currentTx.toCbor()));\n console.log(\"Transaction CBOR copied to clipboard.\");\n } catch {\n console.log(\"Failed to copy to clipboard, expanding instead.\");\n expanded = true;\n }\n continue;\n }\n\n if (selection === \"import\") {\n const cborInput = await input({\n message: \"Paste transaction CBOR (hex):\",\n });\n\n if (!cborInput || cborInput.trim() === \"\") {\n console.log(\"No CBOR provided.\");\n continue;\n }\n\n try {\n const importedTx = Core.Transaction.fromCbor(\n TxCBOR(cborInput.trim()),\n );\n\n // Validate body hash matches\n const currentHash = this.getTxBodyHash(currentTx);\n const importedHash = this.getTxBodyHash(importedTx);\n\n if (currentHash !== importedHash) {\n const proceed = await confirm({\n message: `Warning: Imported transaction has different body hash.\\nCurrent: ${this.formatHash(currentHash)}\\nImported: ${this.formatHash(importedHash)}\\nProceed anyway?`,\n default: false,\n });\n if (!proceed) {\n console.log(\"Import cancelled.\");\n continue;\n }\n }\n\n // Merge signatures\n const added = this.mergeSignatures(currentTx, importedTx);\n const sourceVkeys = importedTx.witnessSet().vkeys();\n const sourceCount = sourceVkeys ? sourceVkeys.size() : 0;\n const skipped = sourceCount - added;\n\n if (added > 0) {\n console.log(`Added ${added} new signature(s).`);\n }\n if (skipped > 0) {\n console.log(`Skipped ${skipped} duplicate signature(s).`);\n }\n if (added === 0 && skipped === 0) {\n console.log(\"No signatures found in imported transaction.\");\n }\n } catch (error) {\n console.error(`Failed to import CBOR: ${(error as Error).message}`);\n }\n continue;\n }\n\n if (selection === \"submit\") {\n const sigCount = this.countSignatures(currentTx);\n if (sigCount === 0) {\n const proceed = await confirm({\n message: \"Warning: Transaction has no signatures. Submit anyway?\",\n default: false,\n });\n if (!proceed) {\n continue;\n }\n }\n\n try {\n const txId = await blaze.submitTransaction(currentTx);\n console.log(`Transaction submitted: ${txId}`);\n return { action: \"submitted\", txId, tx: currentTx };\n } catch (error) {\n console.error(`Submit failed: ${(error as Error).message}`);\n // Continue loop to allow retry or other actions\n continue;\n }\n }\n\n if (selection === \"cancel\") {\n if (hasSignedThisSession) {\n return { action: \"signed\", tx: currentTx };\n }\n return { action: \"cancelled\", tx: currentTx };\n }\n }\n }\n\n async EditStruct<U extends TSchema>(\n type: U,\n current: TExact<U>,\n ): Promise<TExact<U>> {\n return this._editStruct<U>(type, [\"root\"], current);\n }\n\n async _editStruct<U extends TSchema>(\n type: U,\n path: string[],\n current?: TExact<U>,\n ): Promise<TExact<U>> {\n if (isObject(type)) {\n const obj = {} as Record<string, unknown>;\n const fields = type[\"properties\"] as Record<string, U>;\n const menuItems: TMenuItem<S>[] = [];\n const currentRecord = current as Record<string, unknown>;\n for (const [field, fieldType] of Object.entries(fields)) {\n if (current && field in currentRecord) {\n obj[field] = currentRecord[field] as TExact<U>;\n }\n const menuTitle = Sprinkle.ExtractMessage(\n fieldType,\n `Edit ${field} at ${path.join(\".\")}`,\n );\n if (\n isOptional(fieldType) &&\n current &&\n currentRecord[field] !== undefined\n ) {\n menuItems.push({\n title: `Clear ${field}`,\n action: async (sprinkle: Sprinkle<S>) => {\n obj[field] = undefined;\n return sprinkle;\n },\n });\n }\n menuItems.push({\n title: menuTitle,\n action: async (sprinkle: Sprinkle<S>) => {\n const fieldValue = await sprinkle._editStruct(\n fieldType,\n path.concat([field]),\n current && field in currentRecord\n ? (currentRecord[field] as TExact<U>)\n : undefined,\n );\n obj[field] = fieldValue;\n return sprinkle;\n },\n });\n }\n const editMenu: IMenu<S> = {\n title: \"Test\",\n items: menuItems,\n };\n await this._showMenu(editMenu, false);\n return obj as TExact<U>;\n }\n\n return this._fillInStruct<U>(type, path, {}, current);\n }\n\n async FillInStruct<U extends TSchema>(\n type: U,\n def?: TExact<U>,\n ): Promise<TExact<U>> {\n return this._fillInStruct<U>(type, [\"root\"], {}, def);\n }\n\n async _fillInStruct<U extends TSchema>(\n type: U,\n path: string[],\n defs: Record<string, TSchema>,\n def?: TExact<U>,\n ): Promise<TExact<U>> {\n if (\"$ref\" in type) {\n defs = { ...defs, ...type[\"$defs\"] };\n const resolvedType = defs[type[\"$ref\"]];\n if (!resolvedType) {\n throw new Error(\n `Could not resolve type ${type[\"$ref\"]} at ${path.join(\".\")}`,\n );\n }\n return this._fillInStruct(resolvedType, path, defs, def) as Promise<\n TExact<U>\n >;\n }\n if (isOptional(type)) {\n const shouldSet = await select({\n message: Sprinkle.ExtractMessage(\n type,\n `Set value for ${path.join(\".\")}?`,\n ),\n choices: [\n { name: \"Yes\", value: true },\n { name: \"Skip\", value: false },\n ],\n default: def !== undefined,\n });\n if (!shouldSet) {\n return undefined as TExact<U>;\n }\n // Unwrap the optional and fill the inner type\n const innerType = { ...type };\n delete (innerType as any)[OptionalKind];\n return this._fillInStruct(innerType as U, path, defs, def);\n }\n\n if (isUnion(type)) {\n const choices = [];\n const resolved = this.resolveType(type, path, defs);\n for (const variant of resolved.anyOf) {\n choices.push({\n name: Sprinkle.ExtractMessage(variant, `${variant}`),\n value: variant,\n });\n }\n const selection = await select({\n message: Sprinkle.ExtractMessage(\n resolved,\n `Enter a choice for ${path.join(\".\")}`,\n ),\n choices: choices,\n default: def ? `${def}` : undefined,\n });\n return this._fillInStruct(selection, path, defs) as Promise<TExact<U>>;\n }\n\n if (isString(type)) {\n const defaultString = (def ? def : this.defaults[\"string\"]) as\n | string\n | undefined;\n const message = Sprinkle.ExtractMessage(\n type,\n `Enter a string for ${path.join(\".\")}`,\n );\n let answer: string;\n if (isSensitive(type)) {\n answer = await password({ message });\n } else {\n answer = await input({ message, default: defaultString });\n this.defaults[\"string\"] = answer;\n }\n return answer as TExact<U>;\n }\n\n if (isBigInt(type)) {\n const answer = await input({\n message: Sprinkle.ExtractMessage(\n type,\n `Enter a bigint for ${path.join(\".\")}`,\n ),\n default: def ? (def as bigint).toString() : undefined,\n validate: (s) => {\n try {\n BigInt(s);\n return true;\n } catch {\n return \"Please enter a valid bigint.\";\n }\n },\n });\n return BigInt(answer) as TExact<U>;\n }\n\n if (isLiteral(type)) {\n return type.const as TExact<U>;\n }\n\n if (isObject(type)) {\n const obj = {} as Record<string, unknown>;\n const fields = type[\"properties\"] as Record<string, U>;\n for (const [field, fieldType] of Object.entries(fields)) {\n const fieldValue = await this._fillInStruct(\n fieldType,\n path.concat([field]),\n defs,\n def\n ? ((def as Record<string, unknown>)[field] as TExact<U>)\n : undefined,\n );\n obj[field] = fieldValue;\n }\n return obj as TExact<U>;\n }\n\n //TODO: support starting with default values for arrays and allow removal of items\n if (isArray(type)) {\n const arr: unknown[] = [];\n const itemType = type.items as U;\n let addMore = true;\n while (addMore) {\n const itemValue = await this._fillInStruct(\n itemType,\n path.concat([`[${arr.length}]`]),\n defs,\n );\n arr.push(itemValue);\n const continueAnswer = await select({\n message: `Add another item to ${path.join(\".\")}?`,\n choices: [\n { name: \"Yes\", value: true },\n { name: \"No\", value: false },\n ],\n });\n addMore = continueAnswer;\n }\n return arr as TExact<U>;\n }\n\n if (isTuple(type)) {\n const items = type.items ?? [];\n const result: unknown[] = [];\n for (let i = 0; i < items.length; i++) {\n const itemType = items[i] as U;\n const value = await this._fillInStruct(\n itemType,\n path.concat([`[${i}]`]),\n defs,\n def ? ((def as unknown[])[i] as TExact<U>) : undefined,\n );\n result.push(value);\n }\n return result as TExact<U>;\n }\n\n throw new Error(\n `Unable to fill in struct for type at path ${path.join(\".\")}`,\n );\n }\n\n resolveType<T extends TSchema>(\n type: T,\n path: string[],\n defs: Record<string, TSchema>,\n ): T {\n if (isRef(type) || isThis(type) || isImport(type)) {\n defs = { ...defs, ...type.$defs };\n const realType = defs[type.$ref];\n if (!realType) {\n throw new Error(\n `Invalid type at ${path.join(\".\")}: Unrecognized reference ${type.$ref}`,\n );\n }\n return this.resolveType(realType, path, defs) as T;\n }\n return type;\n }\n\n static ExtractMessage(type: TSchema, def: string): string {\n if (\"title\" in type) {\n return type.title!;\n }\n\n if (\"description\" in type) {\n return type.description!;\n }\n\n if (isLiteral(type)) {\n return `${type.const}`;\n }\n\n if (isObject(type)) {\n const fields = type[\"properties\"] as Record<string, TSchema>;\n if (\"type\" in fields) {\n return Sprinkle.ExtractMessage(fields[\"type\"], def);\n }\n const fieldNames = Object.keys(fields);\n if (fieldNames.length === 1) {\n return fieldNames[0]!;\n }\n }\n\n return def;\n }\n}\n"],"mappings":"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","ignoreList":[]}