wowok 1.7.13 → 1.7.16

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 (48) hide show
  1. package/dist/arbitration.d.ts.map +1 -1
  2. package/dist/arbitration.js +21 -32
  3. package/dist/arbitration.js.map +1 -1
  4. package/dist/entity.d.ts +1 -0
  5. package/dist/entity.d.ts.map +1 -1
  6. package/dist/entity.js +12 -6
  7. package/dist/entity.js.map +1 -1
  8. package/dist/exception.d.ts +2 -1
  9. package/dist/exception.d.ts.map +1 -1
  10. package/dist/exception.js +1 -0
  11. package/dist/exception.js.map +1 -1
  12. package/dist/guard.d.ts.map +1 -1
  13. package/dist/guard.js +8 -4
  14. package/dist/guard.js.map +1 -1
  15. package/dist/payment.d.ts +2 -2
  16. package/dist/payment.d.ts.map +1 -1
  17. package/dist/payment.js +2 -2
  18. package/dist/payment.js.map +1 -1
  19. package/dist/protocol.d.ts +21 -19
  20. package/dist/protocol.d.ts.map +1 -1
  21. package/dist/protocol.js +211 -58
  22. package/dist/protocol.js.map +1 -1
  23. package/dist/service.d.ts +2 -2
  24. package/dist/service.d.ts.map +1 -1
  25. package/dist/service.js +5 -6
  26. package/dist/service.js.map +1 -1
  27. package/package.json +5 -2
  28. package/src/arbitration.ts +0 -551
  29. package/src/demand.ts +0 -300
  30. package/src/entity.ts +0 -171
  31. package/src/exception.ts +0 -37
  32. package/src/guard.ts +0 -810
  33. package/src/index.ts +0 -40
  34. package/src/machine.ts +0 -542
  35. package/src/passport.ts +0 -777
  36. package/src/payment.ts +0 -94
  37. package/src/permission.ts +0 -550
  38. package/src/progress.ts +0 -367
  39. package/src/protocol.ts +0 -549
  40. package/src/repository.ts +0 -680
  41. package/src/resource.ts +0 -155
  42. package/src/service.ts +0 -1349
  43. package/src/treasury.ts +0 -425
  44. package/src/utils.ts +0 -660
  45. package/src/wowok.ts +0 -70
  46. package/tsconfig.json +0 -30
  47. package/tsconfig.tsbuildinfo +0 -1
  48. package/webpack.config.cjs +0 -23
package/src/utils.ts DELETED
@@ -1,660 +0,0 @@
1
-
2
- import { SuiObjectResponse, DynamicFieldPage } from '@mysten/sui/client';
3
- import { ERROR, Errors } from './exception.js';
4
- import { isValidSuiAddress, normalizeSuiAddress} from '@mysten/sui/utils'
5
- import { RepositoryValueType, ValueType, Protocol, ContextType, OperatorType } from './protocol.js'
6
- import { bcs } from '@mysten/sui/bcs';
7
-
8
- export const MAX_U8 = BigInt('255');
9
- export const MAX_U64 = BigInt('18446744073709551615');
10
- export const MAX_U128 = BigInt('340282366920938463463374607431768211455');
11
- export const MAX_U256 = BigInt('115792089237316195423570985008687907853269984665640564039457584007913129639935');
12
-
13
- export const OPTION_NONE = 0;
14
-
15
- export const ValueTypeConvert = (type:ValueType | null | undefined) : RepositoryValueType | number => {
16
- if (type === ValueType.TYPE_U8 || type === ValueType.TYPE_U64 || type === ValueType.TYPE_U128 ||
17
- type === ValueType.TYPE_U256) {
18
- return RepositoryValueType.PositiveNumber
19
- } else if (type === ValueType.TYPE_VEC_U8 || type === ValueType.TYPE_VEC_U64 || type === ValueType.TYPE_VEC_U128 ||
20
- type === ValueType.TYPE_VEC_U256|| type === ValueType.TYPE_VEC_BOOL) {
21
- return RepositoryValueType.PositiveNumber_Vec
22
- } else if (type === ValueType.TYPE_ADDRESS) {
23
- return RepositoryValueType.Address
24
- } else if (type === ValueType.TYPE_VEC_ADDRESS) {
25
- return RepositoryValueType.Address_Vec
26
- } else if (type === ValueType.TYPE_STRING) {
27
- return RepositoryValueType.String
28
- } else if (type === ValueType.TYPE_VEC_STRING) {
29
- return RepositoryValueType.String_Vec
30
- } else if (type === ValueType.TYPE_BOOL) {
31
- return RepositoryValueType.Bool
32
- }
33
- return -1;
34
- }
35
-
36
- export const readOption = (arr: number[], de:ValueType) : {bNone:boolean, value:any} => {
37
- let o = arr.splice(0, 1);
38
- if (o[0] == 1) { // true
39
- return {bNone:false, value:Bcs.getInstance().de(de, Uint8Array.from(arr))};
40
- } else if (o[0] == 0) {
41
- return {bNone:true, value:OPTION_NONE};
42
- } else {
43
- ERROR(Errors.Fail, 'readOption: option invalid')
44
- return {bNone:true, value:OPTION_NONE}
45
- }
46
- }
47
-
48
- export const readOptionString = (arr: number[]) : {bNone:boolean, value:any}=> {
49
- let o = arr.splice(0, 1);
50
- if (o[0] == 1) { // true
51
- let r = ulebDecode(Uint8Array.from(arr));
52
- let value = Bcs.getInstance().de(ValueType.TYPE_STRING, Uint8Array.from(arr));
53
- arr.splice(0, r.value+r.length);
54
- return {bNone:false, value:value};
55
- } else if (o[0] == 0) {
56
- return {bNone:true, value:OPTION_NONE};
57
- } else {
58
- ERROR(Errors.Fail, 'readOption: option invalid')
59
- return {bNone:true, value:OPTION_NONE}
60
- }
61
- }
62
-
63
- export const ulebDecode = (arr: Uint8Array) : {value: number, length: number} => {
64
- let total = 0;
65
- let shift = 0;
66
- let len = 0;
67
-
68
- // eslint-disable-next-line no-constant-condition
69
- while (true) {
70
- let byte = arr[len];
71
- len += 1;
72
- total |= (byte & 0x7f) << shift;
73
- if ((byte & 0x80) === 0) {
74
- break;
75
- }
76
- shift += 7;
77
- }
78
-
79
- return {
80
- value: total,
81
- length: len,
82
- };
83
- }
84
-
85
- export const readVec = (arr: any[], cb:(arr:any[], i:number, length:number) => any) : any[] => {
86
- let r = ulebDecode(Uint8Array.from(arr));
87
- arr.splice(0, r.length) ;
88
-
89
- let result = [];
90
- for (let i = 0; i < r.value; i++) {
91
- result.push(cb(arr, i, r.value));
92
- }
93
- return result;
94
- }
95
-
96
- export const cb_U8 = (arr:any[], i:number, length:number) : any => {
97
- return arr.shift();
98
- }
99
- export const cb_U64 = (arr:any[], i:number, length:number) : any => {
100
- return arr.splice(0, 8);
101
- }
102
- export const cb_U128 = (arr:any[], i:number, length:number) : any => {
103
- return arr.splice(0, 16);
104
- }
105
- export const cb_U256 = (arr:any[], i:number, length:number) : any => {
106
- return arr.splice(0, 32);
107
- }
108
-
109
- export const concatenate = (resultConstructor:any, ...arrays:any[]) => {
110
- let totalLength = 0;
111
- for (const arr of arrays) {
112
- totalLength += arr.length;
113
- }
114
- const result = new resultConstructor(totalLength);
115
- let offset = 0;
116
- for (const arr of arrays) {
117
- result.set(arr, offset);
118
- offset += arr.length;
119
- }
120
- return result;
121
- }
122
-
123
- export function deepCopy<T>(obj: T): T {
124
- if (obj === null || typeof obj !== 'object') {
125
- return obj;
126
- }
127
-
128
- const copy: any = Array.isArray(obj) ? [] : {};
129
- for (const key in obj) {
130
- if (obj.hasOwnProperty(key)) {
131
- copy[key] = deepCopy(obj[key]);
132
- }
133
- }
134
- return copy;
135
- }
136
-
137
- export const parseObjectType = (chain_type:string | null | undefined, header:string='payment::Payment<') : string => {
138
- if (chain_type) {
139
- const i = chain_type.indexOf(header);
140
- if (i > 0) {
141
- let r = chain_type.slice(i + header.length, chain_type.length-1);
142
- return r
143
- }
144
- }
145
- return '';
146
- }
147
-
148
- export const array_equal = (arr1: any[], arr2: any[]) => {
149
- if (arr1.length !== arr2.length) {
150
- return false;
151
- }
152
- return !arr1.some((item) => !arr2.includes(item));
153
- }
154
-
155
- export const array_unique = (arr:any[]) : any[] => {
156
- var newArr = [];
157
- for(var i = 0; i < arr.length; i++) {
158
- if(newArr.indexOf(arr[i]) == -1) {
159
- newArr.push(arr[i]);
160
- }
161
- }
162
- return newArr;
163
- }
164
-
165
- export function capitalize (s:string) : string {
166
- return s && s[0].toUpperCase() + s.slice(1)
167
- }
168
-
169
- // for: "0xsdjfkskf<0x2::sui::coin<xxx>, 0xfdfff<>>"
170
- export function parse_object_type(object_data:string) : string[] {
171
- var object_type : string[] = [];
172
- let type_pos = object_data.indexOf('<');
173
- if (type_pos >= 0) {
174
- let t = object_data.slice((type_pos+1), object_data.length-1);
175
- object_type = t.split(',');
176
- }
177
- return object_type;
178
- }
179
-
180
- export class Bcs {
181
- private static _instance : any;
182
-
183
- private VecMapStruct = bcs.struct('VecMap', {
184
- contents: bcs.vector(bcs.tuple([bcs.string(), bcs.string()])),
185
- });
186
-
187
- private EntStruct = bcs.struct('EntStruct', {
188
- description: bcs.string(),
189
- info: this.VecMapStruct,
190
- resource: bcs.option(bcs.Address),
191
- like: bcs.u32(),
192
- dislike: bcs.u32(),
193
- });
194
- private TagStruct = bcs.struct('TagStruct', {
195
- nick: bcs.string(),
196
- tags: bcs.vector(bcs.string()),
197
- })
198
- private Guards = bcs.struct('Guards', {
199
- address: bcs.option(bcs.Address),
200
- })
201
- private Perm = bcs.struct('Perm', {
202
- index: bcs.u64(),
203
- guard: bcs.option(bcs.Address)
204
- })
205
- private Perms = bcs.struct('Perms', {
206
- perms: bcs.vector(this.Perm),
207
- })
208
-
209
- private constructor() { }
210
- static getInstance() : Bcs {
211
- if (!Bcs._instance) {
212
- Bcs._instance = new Bcs();
213
- };
214
- return Bcs._instance;
215
- }
216
-
217
- ser_option_u32(data:Uint8Array | any) : Uint8Array {
218
- return bcs.option(bcs.u32()).serialize(data).toBytes();
219
- }
220
-
221
- ser(type:ValueType | ContextType, data:Uint8Array | any) : Uint8Array {
222
- switch(type) {
223
- case ValueType.TYPE_BOOL:
224
- return bcs.bool().serialize(data).toBytes();
225
- case ValueType.TYPE_ADDRESS:
226
- return bcs.Address.serialize(data).toBytes();
227
- case ValueType.TYPE_U64:
228
- return bcs.u64().serialize(data).toBytes();
229
- case ValueType.TYPE_U8:
230
- return bcs.u8().serialize(data).toBytes();
231
- case ValueType.TYPE_VEC_U8:
232
- return bcs.vector(bcs.u8()).serialize(data).toBytes();
233
- case ValueType.TYPE_U128:
234
- return bcs.u128().serialize(data).toBytes();
235
- case ValueType.TYPE_VEC_ADDRESS:
236
- return bcs.vector(bcs.Address).serialize(data).toBytes();
237
- case ValueType.TYPE_VEC_BOOL:
238
- return bcs.vector(bcs.bool()).serialize(data).toBytes();
239
- case ValueType.TYPE_VEC_VEC_U8:
240
- return bcs.vector(bcs.vector(bcs.u8())).serialize(data).toBytes();
241
- case ValueType.TYPE_VEC_U64:
242
- return bcs.vector(bcs.u64()).serialize(data).toBytes();
243
- case ValueType.TYPE_VEC_U128:
244
- return bcs.vector(bcs.u128()).serialize(data).toBytes();
245
- case ValueType.TYPE_OPTION_ADDRESS:
246
- return bcs.option(bcs.Address).serialize(data).toBytes();
247
- case ValueType.TYPE_OPTION_BOOL:
248
- return bcs.option(bcs.bool()).serialize(data).toBytes();
249
- case ValueType.TYPE_OPTION_U8:
250
- return bcs.option(bcs.u8()).serialize(data).toBytes();
251
- case ValueType.TYPE_OPTION_U64:
252
- return bcs.option(bcs.u64()).serialize(data).toBytes();
253
- case ValueType.TYPE_OPTION_U128:
254
- return bcs.option(bcs.u128()).serialize(data).toBytes();
255
- case ValueType.TYPE_OPTION_U256:
256
- return bcs.option(bcs.u256()).serialize(data).toBytes();
257
- case ValueType.TYPE_OPTION_STRING:
258
- return bcs.option(bcs.string()).serialize(data).toBytes();
259
- case ValueType.TYPE_VEC_U256:
260
- return bcs.vector(bcs.u256()).serialize(data).toBytes();
261
- case ValueType.TYPE_U256:
262
- return bcs.u256().serialize(data).toBytes();
263
- case ValueType.TYPE_STRING:
264
- return bcs.string().serialize(data).toBytes();
265
- case ValueType.TYPE_VEC_STRING:
266
- return bcs.vector(bcs.string()).serialize(data).toBytes();
267
- default:
268
- ERROR(Errors.bcsTypeInvalid, 'ser');
269
- }
270
- return new Uint8Array();
271
- }
272
-
273
- de(type:ValueType, data:Uint8Array | any) : any {
274
- switch(type) {
275
- case ValueType.TYPE_BOOL:
276
- return bcs.bool().parse(data);
277
- case ValueType.TYPE_ADDRESS:
278
- return bcs.Address.parse(data);
279
- case ValueType.TYPE_U64:
280
- return bcs.u64().parse(data);
281
- case ValueType.TYPE_U8:
282
- return bcs.u8().parse(data);
283
- case ValueType.TYPE_VEC_U8:
284
- return bcs.vector(bcs.u8()).parse(data);
285
- case ValueType.TYPE_U128:
286
- return bcs.u128().parse(data);
287
- case ValueType.TYPE_VEC_ADDRESS:
288
- return bcs.vector(bcs.Address).parse(data);
289
- case ValueType.TYPE_VEC_BOOL:
290
- return bcs.vector(bcs.bool()).parse(data);
291
- case ValueType.TYPE_VEC_VEC_U8:
292
- return bcs.vector(bcs.vector(bcs.u8())).parse(data);
293
- case ValueType.TYPE_VEC_U64:
294
- return bcs.vector(bcs.u64()).parse(data);
295
- case ValueType.TYPE_VEC_U128:
296
- return bcs.vector(bcs.u128()).parse(data);
297
- case ValueType.TYPE_OPTION_ADDRESS:
298
- return bcs.option(bcs.Address).parse(data);
299
- case ValueType.TYPE_OPTION_BOOL:
300
- return bcs.option(bcs.bool()).parse(data);
301
- case ValueType.TYPE_OPTION_U8:
302
- return bcs.option(bcs.u8()).parse(data);
303
- case ValueType.TYPE_OPTION_U64:
304
- return bcs.option(bcs.u64()).parse(data);
305
- case ValueType.TYPE_OPTION_U128:
306
- return bcs.option(bcs.u128()).parse(data);
307
- case ValueType.TYPE_OPTION_U256:
308
- return bcs.option(bcs.u256()).parse(data);
309
- case ValueType.TYPE_OPTION_STRING:
310
- return bcs.option(bcs.string()).parse(data);
311
- case ValueType.TYPE_VEC_U256:
312
- return bcs.vector(bcs.u256()).parse(data);
313
- case ValueType.TYPE_STRING:
314
- return bcs.string().parse(data);
315
- case ValueType.TYPE_VEC_STRING:
316
- return bcs.vector(bcs.string()).parse(data);
317
- case ValueType.TYPE_U256:
318
- return bcs.u256().parse(data);
319
- default:
320
- ERROR(Errors.bcsTypeInvalid, 'de');
321
- }
322
- }
323
-
324
- de_ent(data:Uint8Array | undefined) : any | undefined {
325
- if (!data || data.length < 2) return undefined
326
- const struct_vec = bcs.vector(bcs.u8()).parse(data);
327
- return this.EntStruct.parse(Uint8Array.from(struct_vec))
328
- }
329
-
330
- de_tags(data:Uint8Array | undefined) : any | undefined {
331
- if (!data || data.length === 0) return undefined;
332
- const struct_vec = bcs.vector(bcs.u8()).parse(data);
333
- return this.TagStruct.parse(Uint8Array.from(struct_vec));
334
- }
335
- de_perms(data:Uint8Array | undefined) : any | undefined {
336
- if (!data || data.length < 1) return undefined
337
- const r = this.Perms.parse(data);
338
- return r.perms.map((v:any) => { //@ none, some
339
- return {index: v?.index, guard:v?.guard ?? undefined }
340
- })
341
- }
342
- }
343
-
344
- export function stringToUint8Array(str:string) {
345
- const encoder = new TextEncoder();
346
- const view = encoder.encode(str);
347
- return new Uint8Array(view.buffer);
348
- }
349
-
350
- export function numToUint8Array(num:number) : Uint8Array {
351
- if (!num) return new Uint8Array(0)
352
- const a = [];
353
- a.unshift(num & 255)
354
- while (num >= 256) {
355
- num = num >>> 8
356
- a.unshift(num & 255)
357
- }
358
- return new Uint8Array(a)
359
- }
360
-
361
- export const isArr = (origin: any): boolean => {
362
- let str = '[object Array]'
363
- return Object.prototype.toString.call(origin) == str ? true : false
364
- }
365
-
366
-
367
- export const deepClone = <T>(origin: T, target?: Record<string, any> | T ): T => {
368
- let tar = target || {}
369
-
370
- for (const key in origin) {
371
- if (Object.prototype.hasOwnProperty.call(origin, key)) {
372
- if (typeof origin[key] === 'object' && origin[key] !== null) {
373
- tar[key] = isArr(origin[key]) ? [] : {}
374
- deepClone(origin[key], tar[key])
375
- } else {
376
- tar[key] = origin[key]
377
- }
378
- }
379
- }
380
-
381
- return tar as T
382
- }
383
-
384
- export const MAX_DESCRIPTION_LENGTH = 4000;
385
- export const MAX_LOCATION_LENGTH = 256;
386
- export const MAX_NAME_LENGTH = 64;
387
- export const MAX_ENDPOINT_LENGTH = 1024;
388
- // export const OptionNone = (txb:TransactionBlock) : TransactionArgument => { return txb.pure([], BCS.U8) };
389
- export const IsValidStringLength = (str: string, max_len:number) : boolean => {
390
- return Bcs.getInstance().ser(ValueType.TYPE_STRING, str).length <= max_len
391
- }
392
- export const IsValidDesription = (description:string) : boolean => {
393
- return IsValidStringLength(description, MAX_DESCRIPTION_LENGTH)
394
- }
395
- export const IsValidLocation = (location:string) : boolean => {
396
- return IsValidStringLength(location, MAX_LOCATION_LENGTH)
397
- }
398
- export const IsValidName = (name?:string) : boolean => {
399
- if(!name || name.length === 0) {
400
- return false;
401
- }
402
- return IsValidStringLength(name, MAX_NAME_LENGTH)
403
- }
404
-
405
- export const IsValidName_AllowEmpty = (name:string) : boolean => { return IsValidStringLength(name, MAX_NAME_LENGTH)}
406
- export const IsValidEndpoint = (endpoint:string) : boolean => {
407
- return (endpoint.length > 0 && endpoint.length <= MAX_ENDPOINT_LENGTH && isValidHttpUrl(endpoint)) ;
408
- }
409
- export const IsValidAddress = (addr:string | undefined | null) : boolean => {
410
- if (!addr || !isValidSuiAddress(addr)) {
411
- return false;
412
- }
413
- return true
414
- }
415
- export const IsValidCoinType = (coin_type?:string | null) : boolean => {
416
- if (!coin_type) {
417
- return false;
418
- }
419
- return coin_type.startsWith('0x2::coin::Coin') || coin_type.startsWith('0x0000000000000000000000000000000000000000000000000000000000000002')
420
- }
421
-
422
-
423
- export const getUTCDayStartByDivision = (interval=86400000): number => { // 1 day default
424
- const now = Date.now();
425
- return Math.floor(now / interval) * interval;
426
- }
427
-
428
- export const IsValidBigint = (value:string | number | undefined | bigint, max:bigint=MAX_U256, min?:bigint) : boolean => {
429
- if (value === '' || value === undefined) return false;
430
- try {
431
- const v = BigInt(value);
432
- if (v <= max) {
433
- if (min !== undefined) {
434
- return v >= min;
435
- }
436
- return true
437
- }
438
- } catch (e) {
439
- }; return false
440
- }
441
-
442
- export const IsValidU8 = (value:string | number | undefined | bigint, min=0) : boolean => {
443
- return IsValidBigint(value, MAX_U8, BigInt(min))
444
- }
445
- export const IsValidU64 = (value:string | number | undefined | bigint, min=0) : boolean => {
446
- return IsValidBigint(value, MAX_U64, BigInt(min))
447
- }
448
- export const IsValidU128 = (value:string | number | undefined | bigint, min=0) : boolean => {
449
- return IsValidBigint(value, MAX_U128, BigInt(min))
450
- }
451
- export const IsValidU256 = (value:string | number | undefined | bigint, min=0) : boolean => {
452
- return IsValidBigint(value, MAX_U256, BigInt(min))
453
- }
454
-
455
- export const IsValidTokenType = (argType?: string) : boolean => {
456
- if (!argType || argType.length === 0) {
457
- return false;
458
- }
459
- let arr = argType.split('::');
460
- if (arr.length !== 3) {
461
- return false;
462
- }
463
- if ((!IsValidAddress(arr[0]) && arr[0] != '0x2') || arr[1].length === 0 || arr[2].length === 0) {
464
- return false;
465
- }
466
- return true;
467
- }
468
- export const IsValidArgType = (argType?: string) : boolean => {
469
- if (!argType || argType.length === 0) {
470
- return false;
471
- }
472
- let arr = argType.split('::');
473
- if (arr.length < 3) {
474
- return false;
475
- }
476
- return true;
477
- }
478
- export const IsValidInt = (value: number | string) : boolean => {
479
- if (typeof(value) === 'string') {
480
- value = parseInt(value as string);
481
- }
482
- return Number.isSafeInteger(value)
483
- }
484
- export const IsValidPercent = (value: number | string | bigint) : boolean => {
485
- return IsValidBigint(value, BigInt(100), BigInt(0))
486
- }
487
-
488
- export const IsValidArray = (arr: any, validFunc:any) : boolean => {
489
- for (let i = 0; i < arr.length; i++) {
490
- if (!validFunc(arr[i])) {
491
- return false
492
- }
493
- }
494
- return true
495
- }
496
-
497
- export const ResolveU64 = (value:bigint) : bigint => {
498
- const max = MAX_U64;
499
- if (value > max) {
500
- return max;
501
- } else {
502
- return value
503
- }
504
- }
505
-
506
- function removeTrailingZeros(numberString: string): string {
507
- const trimmedString = numberString.trim();
508
- const decimalIndex = trimmedString.indexOf('.');
509
-
510
- if (decimalIndex !== -1) {
511
- let endIndex = trimmedString.length - 1;
512
-
513
- while (trimmedString[endIndex] === '0') {
514
- endIndex--;
515
- }
516
-
517
- if (trimmedString[endIndex] === '.') {
518
- endIndex--;
519
- }
520
-
521
- return trimmedString.slice(0, endIndex + 1);
522
- }
523
-
524
- return trimmedString;
525
- }
526
-
527
- export const ResolveBalance = (balance:string, decimals:number) : string => {
528
- if (!balance) return ''
529
- if (balance === '0') return '0'
530
- if (decimals <= 0) return balance;
531
- var pos = decimals - balance.length;
532
- if (pos === 0) {
533
- return removeTrailingZeros('.' + (balance));
534
- } else if (pos < 0) {
535
- let start = balance.slice(0, Math.abs(pos));
536
- let end = balance.slice(Math.abs(pos));
537
- return removeTrailingZeros(start + '.' + end);
538
- } else {
539
- return removeTrailingZeros('.' + balance.padStart(decimals, '0'));
540
- }
541
- }
542
-
543
- export type ArgType = {
544
- isCoin: boolean;
545
- coin: string;
546
- token: string;
547
- }
548
- export const ParseType = (type:string) : ArgType => {
549
- if (type) {
550
- const COIN = '0x2::coin::Coin<';
551
- let i = type.indexOf(COIN);
552
- if (i >= 0) {
553
- let coin = type.slice(i+COIN.length, type.length-1);
554
- if (coin.indexOf('<') === -1) {
555
- while (coin[coin.length-1] == '>') {
556
- coin = coin.slice(0, -1);
557
- };
558
- let t = coin.lastIndexOf('::');
559
- return {isCoin:true, coin:coin, token:coin.slice(t+2)}
560
- }
561
- }
562
- }
563
- return {isCoin:false, coin:'', token:''}
564
- }
565
-
566
-
567
- export function insertAtHead(array:Uint8Array, value:number) {
568
- const newLength = array.length + 1;
569
- const newArray = new Uint8Array(newLength);
570
- newArray.set([value], 0);
571
- newArray.set(array, 1);
572
- return newArray;
573
- }
574
-
575
- export function toFixed(x:number) {
576
- let res = '';
577
- if (Math.abs(x) < 1.0) {
578
- var e = parseInt(x.toString().split('e-')[1]);
579
- if (e) {
580
- x *= Math.pow(10,e-1);
581
- res = '0.' + (new Array(e)).join('0') + x.toString().substring(2);
582
- }
583
- } else {
584
- var e = parseInt(x.toString().split('+')[1]);
585
- if (e > 20) {
586
- e -= 20;
587
- x /= Math.pow(10,e);
588
- res = x + (new Array(e+1)).join('0');
589
- }
590
- }
591
- return res;
592
- }
593
-
594
- export function isValidHttpUrl(url:string) : boolean {
595
- let r:any;
596
- try {
597
- r = new URL(url);
598
- } catch (_) {
599
- return false;
600
- }
601
-
602
- return r.protocol === "http:" || r.protocol === "https:" || r.protocol === 'ipfs:';
603
- }
604
-
605
- export interface query_object_param {
606
- id:string;
607
- onBegin?:(id:string)=>void;
608
- onObjectRes?:(id:string, res:SuiObjectResponse)=>void;
609
- onDynamicRes?:(id:string, res:DynamicFieldPage)=>void;
610
- onFieldsRes?:(id:string, fields_res:SuiObjectResponse[])=>void;
611
- onObjectErr?:(id:string, err:any)=>void;
612
- onDynamicErr?:(id:string, err:any)=>void;
613
- onFieldsErr?:(id:string, err:any)=>void;
614
- }
615
-
616
- export const uint2address = (value: number | bigint | string) : string => {
617
- return normalizeSuiAddress(value.toString(16));
618
- }
619
-
620
- export const query_object = (param:query_object_param) => {
621
- if (param.id) {
622
- if(param?.onBegin) param.onBegin(param.id);
623
- Protocol.Client().getObject({id:param.id, options:{showContent:true, showType:true, showOwner:true}}).then((res) => {
624
- if (res.error) {
625
- if(param?.onObjectErr) param.onObjectErr(param.id, res.error);
626
- } else {
627
- if(param?.onObjectRes) param.onObjectRes(param.id, res);
628
- }
629
- }).catch((err) => {
630
- //console.log(err)
631
- if (param?.onObjectErr) param.onObjectErr(param.id, err);
632
- });
633
-
634
- Protocol.Client().getDynamicFields({parentId:param.id}).then((res) => {
635
- if (param?.onDynamicRes) param.onDynamicRes(param.id, res);
636
-
637
- if (res.data.length > 0) {
638
- Protocol.Client().multiGetObjects({ids:res.data.map(v => v.objectId), options:{showContent:true}}).then((fields) => {
639
- if (param?.onFieldsRes) param.onFieldsRes(param.id, fields);
640
- }).catch((err) => {
641
- //console.log(err)
642
- if (param?.onFieldsErr) param.onFieldsErr(param.id, err);
643
- })
644
- }
645
- }).catch((err) => {
646
- //console.log(err)
647
- if (param?.onDynamicErr) param.onDynamicErr(param.id, err);
648
- })
649
- }
650
- }
651
-
652
- export const FirstLetterUppercase = (str:string|undefined|null) : string => {
653
- if (!str) return '';
654
- return str.substring(0, 1).toUpperCase() + str.substring(1);
655
- }
656
-
657
-
658
- export function hasDuplicates<T>(array: T[]): boolean {
659
- return array.some((item, index) => array.findIndex(i => i === item) !== index);
660
- }