@amadeus-protocol/sdk 1.0.1 → 1.0.3

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.
@@ -1,9 +1,12 @@
1
1
  /**
2
2
  * Validation Utilities
3
3
  *
4
- * Helper functions for validating values using Effect Schemas
4
+ * Helper functions for validating values using Effect Schemas and
5
+ * standalone validation functions for Amadeus Protocol data types.
5
6
  */
6
7
  import { Schema } from 'effect';
8
+ import { AMA_TOKEN_DECIMALS, AMA_TOKEN_DECIMALS_MULTIPLIER, AMADEUS_PUBLIC_KEY_BYTE_LENGTH, AMADEUS_SEED_BYTE_LENGTH, MIN_TRANSFERABLE_AMOUNT } from './constants';
9
+ import { fromBase58 } from './encoding';
7
10
  import { AmadeusSDKError } from './types';
8
11
  /**
9
12
  * Helper function to extract error message from Effect Schema ParseError
@@ -36,4 +39,177 @@ export function validate(schema, value) {
36
39
  throw new AmadeusSDKError(getErrorMessage(error));
37
40
  }
38
41
  }
42
+ /**
43
+ * Validate an Amadeus address (Base58-encoded 48-byte public key)
44
+ *
45
+ * @param address - The address to validate
46
+ * @returns Validation result with error message if invalid
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * const result = validateAddress('abc123...')
51
+ * if (!result.valid) {
52
+ * console.error(result.error)
53
+ * }
54
+ * ```
55
+ */
56
+ export function validateAddress(address) {
57
+ if (!address || typeof address !== 'string') {
58
+ return { valid: false, error: 'Address is required' };
59
+ }
60
+ try {
61
+ const decoded = fromBase58(address);
62
+ if (decoded.length !== AMADEUS_PUBLIC_KEY_BYTE_LENGTH) {
63
+ return {
64
+ valid: false,
65
+ error: `Invalid address length: expected ${AMADEUS_PUBLIC_KEY_BYTE_LENGTH} bytes, got ${decoded.length}`
66
+ };
67
+ }
68
+ return { valid: true };
69
+ }
70
+ catch {
71
+ return { valid: false, error: 'Invalid Base58 encoding' };
72
+ }
73
+ }
74
+ /**
75
+ * Check if an address is valid (simple boolean version)
76
+ *
77
+ * @param address - The address to check
78
+ * @returns true if valid, false otherwise
79
+ */
80
+ export function isValidAddress(address) {
81
+ return validateAddress(address).valid;
82
+ }
83
+ /**
84
+ * Validate an Amadeus seed (Base58-encoded 64-byte seed)
85
+ *
86
+ * @param seed - The seed to validate
87
+ * @returns Validation result with error message if invalid
88
+ */
89
+ export function validateSeed(seed) {
90
+ if (!seed || typeof seed !== 'string') {
91
+ return { valid: false, error: 'Seed is required' };
92
+ }
93
+ try {
94
+ const decoded = fromBase58(seed);
95
+ if (decoded.length !== AMADEUS_SEED_BYTE_LENGTH) {
96
+ return {
97
+ valid: false,
98
+ error: `Invalid seed length: expected ${AMADEUS_SEED_BYTE_LENGTH} bytes, got ${decoded.length}`
99
+ };
100
+ }
101
+ return { valid: true };
102
+ }
103
+ catch {
104
+ return { valid: false, error: 'Invalid Base58 encoding' };
105
+ }
106
+ }
107
+ /**
108
+ * Check if a seed is valid (simple boolean version)
109
+ *
110
+ * @param seed - The seed to check
111
+ * @returns true if valid, false otherwise
112
+ */
113
+ export function isValidSeed(seed) {
114
+ return validateSeed(seed).valid;
115
+ }
116
+ /**
117
+ * Validate a transfer amount
118
+ *
119
+ * @param amount - The amount as a string (user input)
120
+ * @returns Validation result with error message if invalid
121
+ */
122
+ export function validateAmount(amount) {
123
+ if (!amount || typeof amount !== 'string') {
124
+ return { valid: false, error: 'Amount is required' };
125
+ }
126
+ // Check format: must be a valid number
127
+ if (!/^\d+(\.\d+)?$/.test(amount)) {
128
+ return { valid: false, error: 'Amount must be a valid number' };
129
+ }
130
+ // Check decimal places
131
+ const decimalPart = amount.split('.')[1];
132
+ if (decimalPart && decimalPart.length > AMA_TOKEN_DECIMALS) {
133
+ return {
134
+ valid: false,
135
+ error: `Amount cannot have more than ${AMA_TOKEN_DECIMALS} decimal places`
136
+ };
137
+ }
138
+ // Check value is positive
139
+ const num = Number.parseFloat(amount);
140
+ if (Number.isNaN(num) || num <= 0) {
141
+ return { valid: false, error: 'Amount must be greater than 0' };
142
+ }
143
+ // Check minimum transferable amount
144
+ if (num * AMA_TOKEN_DECIMALS_MULTIPLIER < 1) {
145
+ return {
146
+ valid: false,
147
+ error: `Amount is below the minimum transferable value (${MIN_TRANSFERABLE_AMOUNT})`
148
+ };
149
+ }
150
+ return { valid: true };
151
+ }
152
+ /**
153
+ * Check if an amount is valid (simple boolean version)
154
+ *
155
+ * @param amount - The amount to check
156
+ * @returns true if valid, false otherwise
157
+ */
158
+ export function isValidAmount(amount) {
159
+ return validateAmount(amount).valid;
160
+ }
161
+ /**
162
+ * Validate a password for wallet encryption
163
+ *
164
+ * @param password - The password to validate
165
+ * @param options - Validation options
166
+ * @returns Validation result with error message if invalid
167
+ */
168
+ export function validatePassword(password, options = {}) {
169
+ const { minLength = 8, maxLength = 128, requireLowercase = true, requireUppercase = true, requireNumber = true, requireSpecial = true } = options;
170
+ if (!password || typeof password !== 'string') {
171
+ return { valid: false, error: 'Password is required' };
172
+ }
173
+ if (password.length < minLength) {
174
+ return { valid: false, error: `Password must be at least ${minLength} characters` };
175
+ }
176
+ if (password.length > maxLength) {
177
+ return { valid: false, error: `Password must be at most ${maxLength} characters` };
178
+ }
179
+ if (requireLowercase && !/[a-z]/.test(password)) {
180
+ return { valid: false, error: 'Password must contain at least one lowercase letter' };
181
+ }
182
+ if (requireUppercase && !/[A-Z]/.test(password)) {
183
+ return { valid: false, error: 'Password must contain at least one uppercase letter' };
184
+ }
185
+ if (requireNumber && !/[0-9]/.test(password)) {
186
+ return { valid: false, error: 'Password must contain at least one number' };
187
+ }
188
+ if (requireSpecial && !/[^a-zA-Z0-9]/.test(password)) {
189
+ return { valid: false, error: 'Password must contain at least one special character' };
190
+ }
191
+ return { valid: true };
192
+ }
193
+ /**
194
+ * Validate a token symbol
195
+ *
196
+ * @param symbol - The symbol to validate
197
+ * @returns Validation result with error message if invalid
198
+ */
199
+ export function validateTokenSymbol(symbol) {
200
+ if (!symbol || typeof symbol !== 'string') {
201
+ return { valid: false, error: 'Token symbol is required' };
202
+ }
203
+ if (symbol.length < 1) {
204
+ return { valid: false, error: 'Token symbol is too short' };
205
+ }
206
+ if (symbol.length > 10) {
207
+ return { valid: false, error: 'Token symbol is too long' };
208
+ }
209
+ // Only allow alphanumeric characters
210
+ if (!/^[A-Z0-9]+$/.test(symbol)) {
211
+ return { valid: false, error: 'Token symbol must contain only uppercase letters and numbers' };
212
+ }
213
+ return { valid: true };
214
+ }
39
215
  //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAEzC;;GAEG;AACH,SAAS,eAAe,CAAC,KAAc;IACtC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,OAAO,CAAA;IACrB,CAAC;IACD,IACC,KAAK;QACL,OAAO,KAAK,KAAK,QAAQ;QACzB,SAAS,IAAI,KAAK;QAClB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAChC,CAAC;QACF,OAAO,KAAK,CAAC,OAAO,CAAA;IACrB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAI,MAAwB,EAAE,KAAc;IACnE,IAAI,CAAC;QACJ,OAAO,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAA;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,sDAAsD;QACtD,MAAM,IAAI,eAAe,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;IAClD,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amadeus-protocol/sdk",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Official TypeScript/JavaScript SDK for Amadeus Protocol - Core utilities for serialization, cryptography, transaction building, and API client",
5
5
  "repository": {
6
6
  "type": "git",