@sundaeswap/sprinkles 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/dist/cjs/Sprinkle/__tests__/encryption.test.js +22 -8
  2. package/dist/cjs/Sprinkle/__tests__/encryption.test.js.map +1 -1
  3. package/dist/cjs/Sprinkle/__tests__/enhancements.test.js +37 -46
  4. package/dist/cjs/Sprinkle/__tests__/enhancements.test.js.map +1 -1
  5. package/dist/cjs/Sprinkle/__tests__/field-utils.test.js +170 -0
  6. package/dist/cjs/Sprinkle/__tests__/field-utils.test.js.map +1 -0
  7. package/dist/cjs/Sprinkle/__tests__/fill-in-struct.test.js +283 -81
  8. package/dist/cjs/Sprinkle/__tests__/fill-in-struct.test.js.map +1 -1
  9. package/dist/cjs/Sprinkle/__tests__/formatting.test.js +97 -0
  10. package/dist/cjs/Sprinkle/__tests__/formatting.test.js.map +1 -0
  11. package/dist/cjs/Sprinkle/__tests__/show-menu.test.js +97 -7
  12. package/dist/cjs/Sprinkle/__tests__/show-menu.test.js.map +1 -1
  13. package/dist/cjs/Sprinkle/__tests__/tx-dialog.test.js +30 -0
  14. package/dist/cjs/Sprinkle/__tests__/tx-dialog.test.js.map +1 -1
  15. package/dist/cjs/Sprinkle/encryption.js +131 -0
  16. package/dist/cjs/Sprinkle/encryption.js.map +1 -0
  17. package/dist/cjs/Sprinkle/index.js +427 -438
  18. package/dist/cjs/Sprinkle/index.js.map +1 -1
  19. package/dist/cjs/Sprinkle/menus/array-menu.js +195 -0
  20. package/dist/cjs/Sprinkle/menus/array-menu.js.map +1 -0
  21. package/dist/cjs/Sprinkle/menus/field-menu.js +161 -0
  22. package/dist/cjs/Sprinkle/menus/field-menu.js.map +1 -0
  23. package/dist/cjs/Sprinkle/menus/index.js +33 -0
  24. package/dist/cjs/Sprinkle/menus/index.js.map +1 -0
  25. package/dist/cjs/Sprinkle/menus/object-menu.js +324 -0
  26. package/dist/cjs/Sprinkle/menus/object-menu.js.map +1 -0
  27. package/dist/cjs/Sprinkle/prompts.js +459 -0
  28. package/dist/cjs/Sprinkle/prompts.js.map +1 -0
  29. package/dist/cjs/Sprinkle/schemas.js +97 -0
  30. package/dist/cjs/Sprinkle/schemas.js.map +1 -0
  31. package/dist/cjs/Sprinkle/tx-dialog.js +101 -0
  32. package/dist/cjs/Sprinkle/tx-dialog.js.map +1 -0
  33. package/dist/cjs/Sprinkle/type-guards.js +89 -0
  34. package/dist/cjs/Sprinkle/type-guards.js.map +1 -0
  35. package/dist/cjs/Sprinkle/types.js +73 -0
  36. package/dist/cjs/Sprinkle/types.js.map +1 -0
  37. package/dist/cjs/Sprinkle/utils/field-utils.js +154 -0
  38. package/dist/cjs/Sprinkle/utils/field-utils.js.map +1 -0
  39. package/dist/cjs/Sprinkle/utils/formatting.js +126 -0
  40. package/dist/cjs/Sprinkle/utils/formatting.js.map +1 -0
  41. package/dist/cjs/Sprinkle/utils/index.js +56 -0
  42. package/dist/cjs/Sprinkle/utils/index.js.map +1 -0
  43. package/dist/cjs/Sprinkle/wallet.js +98 -0
  44. package/dist/cjs/Sprinkle/wallet.js.map +1 -0
  45. package/dist/esm/Sprinkle/__tests__/encryption.test.js +22 -8
  46. package/dist/esm/Sprinkle/__tests__/encryption.test.js.map +1 -1
  47. package/dist/esm/Sprinkle/__tests__/enhancements.test.js +37 -46
  48. package/dist/esm/Sprinkle/__tests__/enhancements.test.js.map +1 -1
  49. package/dist/esm/Sprinkle/__tests__/field-utils.test.js +168 -0
  50. package/dist/esm/Sprinkle/__tests__/field-utils.test.js.map +1 -0
  51. package/dist/esm/Sprinkle/__tests__/fill-in-struct.test.js +284 -82
  52. package/dist/esm/Sprinkle/__tests__/fill-in-struct.test.js.map +1 -1
  53. package/dist/esm/Sprinkle/__tests__/formatting.test.js +95 -0
  54. package/dist/esm/Sprinkle/__tests__/formatting.test.js.map +1 -0
  55. package/dist/esm/Sprinkle/__tests__/show-menu.test.js +98 -8
  56. package/dist/esm/Sprinkle/__tests__/show-menu.test.js.map +1 -1
  57. package/dist/esm/Sprinkle/__tests__/tx-dialog.test.js +30 -0
  58. package/dist/esm/Sprinkle/__tests__/tx-dialog.test.js.map +1 -1
  59. package/dist/esm/Sprinkle/encryption.js +117 -0
  60. package/dist/esm/Sprinkle/encryption.js.map +1 -0
  61. package/dist/esm/Sprinkle/index.js +248 -425
  62. package/dist/esm/Sprinkle/index.js.map +1 -1
  63. package/dist/esm/Sprinkle/menus/array-menu.js +190 -0
  64. package/dist/esm/Sprinkle/menus/array-menu.js.map +1 -0
  65. package/dist/esm/Sprinkle/menus/field-menu.js +155 -0
  66. package/dist/esm/Sprinkle/menus/field-menu.js.map +1 -0
  67. package/dist/esm/Sprinkle/menus/index.js +8 -0
  68. package/dist/esm/Sprinkle/menus/index.js.map +1 -0
  69. package/dist/esm/Sprinkle/menus/object-menu.js +318 -0
  70. package/dist/esm/Sprinkle/menus/object-menu.js.map +1 -0
  71. package/dist/esm/Sprinkle/prompts.js +443 -0
  72. package/dist/esm/Sprinkle/prompts.js.map +1 -0
  73. package/dist/esm/Sprinkle/schemas.js +91 -0
  74. package/dist/esm/Sprinkle/schemas.js.map +1 -0
  75. package/dist/esm/Sprinkle/tx-dialog.js +90 -0
  76. package/dist/esm/Sprinkle/tx-dialog.js.map +1 -0
  77. package/dist/esm/Sprinkle/type-guards.js +66 -0
  78. package/dist/esm/Sprinkle/type-guards.js.map +1 -0
  79. package/dist/esm/Sprinkle/types.js +66 -0
  80. package/dist/esm/Sprinkle/types.js.map +1 -0
  81. package/dist/esm/Sprinkle/utils/field-utils.js +145 -0
  82. package/dist/esm/Sprinkle/utils/field-utils.js.map +1 -0
  83. package/dist/esm/Sprinkle/utils/formatting.js +118 -0
  84. package/dist/esm/Sprinkle/utils/formatting.js.map +1 -0
  85. package/dist/esm/Sprinkle/utils/index.js +7 -0
  86. package/dist/esm/Sprinkle/utils/index.js.map +1 -0
  87. package/dist/esm/Sprinkle/wallet.js +90 -0
  88. package/dist/esm/Sprinkle/wallet.js.map +1 -0
  89. package/dist/types/Sprinkle/encryption.d.ts +43 -0
  90. package/dist/types/Sprinkle/encryption.d.ts.map +1 -0
  91. package/dist/types/Sprinkle/index.d.ts +17 -177
  92. package/dist/types/Sprinkle/index.d.ts.map +1 -1
  93. package/dist/types/Sprinkle/menus/array-menu.d.ts +31 -0
  94. package/dist/types/Sprinkle/menus/array-menu.d.ts.map +1 -0
  95. package/dist/types/Sprinkle/menus/field-menu.d.ts +34 -0
  96. package/dist/types/Sprinkle/menus/field-menu.d.ts.map +1 -0
  97. package/dist/types/Sprinkle/menus/index.d.ts +10 -0
  98. package/dist/types/Sprinkle/menus/index.d.ts.map +1 -0
  99. package/dist/types/Sprinkle/menus/object-menu.d.ts +34 -0
  100. package/dist/types/Sprinkle/menus/object-menu.d.ts.map +1 -0
  101. package/dist/types/Sprinkle/prompts.d.ts +119 -0
  102. package/dist/types/Sprinkle/prompts.d.ts.map +1 -0
  103. package/dist/types/Sprinkle/schemas.d.ts +125 -0
  104. package/dist/types/Sprinkle/schemas.d.ts.map +1 -0
  105. package/dist/types/Sprinkle/tx-dialog.d.ts +37 -0
  106. package/dist/types/Sprinkle/tx-dialog.d.ts.map +1 -0
  107. package/dist/types/Sprinkle/type-guards.d.ts +45 -0
  108. package/dist/types/Sprinkle/type-guards.d.ts.map +1 -0
  109. package/dist/types/Sprinkle/types.d.ts +115 -0
  110. package/dist/types/Sprinkle/types.d.ts.map +1 -0
  111. package/dist/types/Sprinkle/utils/field-utils.d.ts +47 -0
  112. package/dist/types/Sprinkle/utils/field-utils.d.ts.map +1 -0
  113. package/dist/types/Sprinkle/utils/formatting.d.ts +30 -0
  114. package/dist/types/Sprinkle/utils/formatting.d.ts.map +1 -0
  115. package/dist/types/Sprinkle/wallet.d.ts +27 -0
  116. package/dist/types/Sprinkle/wallet.d.ts.map +1 -0
  117. package/dist/types/tsconfig.build.tsbuildinfo +1 -1
  118. package/package.json +1 -1
  119. package/src/Sprinkle/__tests__/encryption.test.ts +23 -8
  120. package/src/Sprinkle/__tests__/enhancements.test.ts +34 -47
  121. package/src/Sprinkle/__tests__/field-utils.test.ts +191 -0
  122. package/src/Sprinkle/__tests__/fill-in-struct.test.ts +301 -86
  123. package/src/Sprinkle/__tests__/formatting.test.ts +115 -0
  124. package/src/Sprinkle/__tests__/show-menu.test.ts +102 -8
  125. package/src/Sprinkle/__tests__/tx-dialog.test.ts +30 -0
  126. package/src/Sprinkle/encryption.ts +130 -0
  127. package/src/Sprinkle/index.ts +368 -598
  128. package/src/Sprinkle/menus/array-menu.ts +191 -0
  129. package/src/Sprinkle/menus/field-menu.ts +145 -0
  130. package/src/Sprinkle/menus/index.ts +12 -0
  131. package/src/Sprinkle/menus/object-menu.ts +336 -0
  132. package/src/Sprinkle/prompts.ts +551 -0
  133. package/src/Sprinkle/schemas.ts +111 -0
  134. package/src/Sprinkle/tx-dialog.ts +100 -0
  135. package/src/Sprinkle/type-guards.ts +93 -0
  136. package/src/Sprinkle/types.ts +116 -0
  137. package/src/Sprinkle/utils/field-utils.ts +158 -0
  138. package/src/Sprinkle/utils/formatting.ts +127 -0
  139. package/src/Sprinkle/utils/index.ts +17 -0
  140. package/src/Sprinkle/wallet.ts +133 -0
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.bigIntReplacer = bigIntReplacer;
7
+ exports.bigIntReviver = bigIntReviver;
8
+ exports.cloneWithBigInt = cloneWithBigInt;
9
+ exports.collectSensitivePaths = collectSensitivePaths;
10
+ exports.decryptSensitiveFields = decryptSensitiveFields;
11
+ exports.encryptSensitiveFields = encryptSensitiveFields;
12
+ exports.getNestedValue = getNestedValue;
13
+ exports.maskSensitiveFields = maskSensitiveFields;
14
+ exports.setNestedValue = setNestedValue;
15
+ var _typeGuards = require("./type-guards.js");
16
+ /**
17
+ * Encryption utilities for sensitive field handling.
18
+ * Functions for encrypting, decrypting, and masking sensitive data in settings.
19
+ */
20
+
21
+ /**
22
+ * Recursively collect paths to all sensitive fields in a schema.
23
+ */
24
+ function collectSensitivePaths(type, prefix = "") {
25
+ const paths = [];
26
+ if ((0, _typeGuards.isObject)(type)) {
27
+ const fields = type["properties"];
28
+ for (const [field, fieldType] of Object.entries(fields)) {
29
+ const fieldPath = prefix ? `${prefix}.${field}` : field;
30
+ if ((0, _typeGuards.isSensitive)(fieldType)) {
31
+ paths.push(fieldPath);
32
+ }
33
+ paths.push(...collectSensitivePaths(fieldType, fieldPath));
34
+ }
35
+ }
36
+ if ((0, _typeGuards.isUnion)(type)) {
37
+ for (const variant of type.anyOf) {
38
+ paths.push(...collectSensitivePaths(variant, prefix));
39
+ }
40
+ }
41
+ return paths;
42
+ }
43
+
44
+ /**
45
+ * Get a nested value from an object by dot-separated path.
46
+ */
47
+ function getNestedValue(obj, path) {
48
+ return path.split(".").reduce((o, k) => o?.[k], obj);
49
+ }
50
+
51
+ /**
52
+ * Set a nested value in an object by dot-separated path.
53
+ */
54
+ function setNestedValue(obj, path, value) {
55
+ const keys = path.split(".");
56
+ const last = keys.pop();
57
+ const parent = keys.reduce((o, k) => o?.[k], obj);
58
+ if (parent && typeof parent === "object") {
59
+ parent[last] = value;
60
+ }
61
+ }
62
+
63
+ /**
64
+ * JSON replacer that converts BigInt to string with 'n' suffix.
65
+ */
66
+ function bigIntReplacer(_key, value) {
67
+ return typeof value === "bigint" ? `${value.toString()}n` : value;
68
+ }
69
+
70
+ /**
71
+ * JSON reviver that converts strings with 'n' suffix back to BigInt.
72
+ */
73
+ function bigIntReviver(_key, value) {
74
+ if (typeof value === "string" && /^\d+n$/.test(value)) {
75
+ return BigInt(value.slice(0, -1));
76
+ }
77
+ return value;
78
+ }
79
+
80
+ /**
81
+ * Deep clone an object, preserving BigInt values.
82
+ */
83
+ function cloneWithBigInt(obj) {
84
+ return JSON.parse(JSON.stringify(obj, bigIntReplacer), bigIntReviver);
85
+ }
86
+
87
+ /**
88
+ * Encrypt all sensitive fields in a settings object.
89
+ */
90
+ function encryptSensitiveFields(settings, type, encryption) {
91
+ const clone = cloneWithBigInt(settings);
92
+ const sensitivePaths = collectSensitivePaths(type);
93
+ for (const p of sensitivePaths) {
94
+ const value = getNestedValue(clone, p);
95
+ if (typeof value === "string" && value.length > 0) {
96
+ setNestedValue(clone, p, encryption.encrypt(value));
97
+ }
98
+ }
99
+ return clone;
100
+ }
101
+
102
+ /**
103
+ * Decrypt all sensitive fields in a settings object.
104
+ */
105
+ async function decryptSensitiveFields(settings, type, encryption) {
106
+ const clone = cloneWithBigInt(settings);
107
+ const sensitivePaths = collectSensitivePaths(type);
108
+ for (const p of sensitivePaths) {
109
+ const value = getNestedValue(clone, p);
110
+ if (typeof value === "string" && value.length > 0) {
111
+ setNestedValue(clone, p, await encryption.decrypt(value));
112
+ }
113
+ }
114
+ return clone;
115
+ }
116
+
117
+ /**
118
+ * Mask all sensitive fields in a settings object for display.
119
+ */
120
+ function maskSensitiveFields(settings, type) {
121
+ const clone = cloneWithBigInt(settings);
122
+ const sensitivePaths = collectSensitivePaths(type);
123
+ for (const p of sensitivePaths) {
124
+ const value = getNestedValue(clone, p);
125
+ if (typeof value === "string" && value.length > 0) {
126
+ setNestedValue(clone, p, "********");
127
+ }
128
+ }
129
+ return clone;
130
+ }
131
+ //# sourceMappingURL=encryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.js","names":["_typeGuards","require","collectSensitivePaths","type","prefix","paths","isObject","fields","field","fieldType","Object","entries","fieldPath","isSensitive","push","isUnion","variant","anyOf","getNestedValue","obj","path","split","reduce","o","k","setNestedValue","value","keys","last","pop","parent","bigIntReplacer","_key","toString","bigIntReviver","test","BigInt","slice","cloneWithBigInt","JSON","parse","stringify","encryptSensitiveFields","settings","encryption","clone","sensitivePaths","p","length","encrypt","decryptSensitiveFields","decrypt","maskSensitiveFields"],"sources":["../../../src/Sprinkle/encryption.ts"],"sourcesContent":["/**\n * Encryption utilities for sensitive field handling.\n * Functions for encrypting, decrypting, and masking sensitive data in settings.\n */\n\nimport type { TSchema } from \"@sinclair/typebox\";\nimport { isObject, isUnion, isSensitive } from \"./type-guards.js\";\nimport type { IEncryptionOptions } from \"./types.js\";\n\n/**\n * Recursively collect paths to all sensitive fields in a schema.\n */\nexport function 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(...collectSensitivePaths(fieldType, fieldPath));\n }\n }\n if (isUnion(type)) {\n for (const variant of type.anyOf) {\n paths.push(...collectSensitivePaths(variant, prefix));\n }\n }\n return paths;\n}\n\n/**\n * Get a nested value from an object by dot-separated path.\n */\nexport function getNestedValue(obj: any, path: string): unknown {\n return path.split(\".\").reduce((o, k) => o?.[k], obj);\n}\n\n/**\n * Set a nested value in an object by dot-separated path.\n */\nexport function 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/**\n * JSON replacer that converts BigInt to string with 'n' suffix.\n */\nexport function bigIntReplacer(_key: string, value: unknown): unknown {\n return typeof value === \"bigint\" ? `${value.toString()}n` : value;\n}\n\n/**\n * JSON reviver that converts strings with 'n' suffix back to BigInt.\n */\nexport function 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/**\n * Deep clone an object, preserving BigInt values.\n */\nexport function cloneWithBigInt<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj, bigIntReplacer), bigIntReviver);\n}\n\n/**\n * Encrypt all sensitive fields in a settings object.\n */\nexport function encryptSensitiveFields<T>(\n settings: T,\n type: TSchema,\n encryption: IEncryptionOptions,\n): T {\n const clone = cloneWithBigInt(settings);\n const sensitivePaths = collectSensitivePaths(type);\n for (const p of sensitivePaths) {\n const value = getNestedValue(clone, p);\n if (typeof value === \"string\" && value.length > 0) {\n setNestedValue(clone, p, encryption.encrypt(value));\n }\n }\n return clone;\n}\n\n/**\n * Decrypt all sensitive fields in a settings object.\n */\nexport async function decryptSensitiveFields<T>(\n settings: T,\n type: TSchema,\n encryption: IEncryptionOptions,\n): Promise<T> {\n const clone = cloneWithBigInt(settings);\n const sensitivePaths = collectSensitivePaths(type);\n for (const p of sensitivePaths) {\n const value = getNestedValue(clone, p);\n if (typeof value === \"string\" && value.length > 0) {\n setNestedValue(clone, p, await encryption.decrypt(value));\n }\n }\n return clone;\n}\n\n/**\n * Mask all sensitive fields in a settings object for display.\n */\nexport function maskSensitiveFields<T>(settings: T, type: TSchema): T {\n const clone = cloneWithBigInt(settings);\n const sensitivePaths = collectSensitivePaths(type);\n for (const p of sensitivePaths) {\n const value = getNestedValue(clone, p);\n if (typeof value === \"string\" && value.length > 0) {\n setNestedValue(clone, p, \"********\");\n }\n }\n return clone;\n}\n"],"mappings":"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","ignoreList":[]}