wowok_agent 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/objects.ts ADDED
@@ -0,0 +1,661 @@
1
+ /**
2
+ * Provide a query interface for AI
3
+ *
4
+ */
5
+
6
+ import { Protocol, Machine_Node, Machine, Treasury_WithdrawMode, Treasury_Operation,
7
+ Repository_Type, Repository_Policy_Mode, Repository_Policy, Service_Discount_Type, Service_Sale,
8
+ Progress, History, ERROR, Errors, IsValidAddress, Bcs,
9
+ } from 'wowok';
10
+ import {WowokCache, OBJECT_KEY} from './cache'
11
+
12
+ export interface ObjectBase {
13
+ object: string;
14
+ type?: string | 'Demand' | 'Progress' | 'Service' | 'Machine' | 'Order' | 'Treasury' | 'Arbitration' | 'Arb' | 'Payment' | 'Guard' |
15
+ 'Entity' | 'Permission' | 'Resource' | 'Repository' | 'TableItem_ProgressHistory' | 'TableItem_PermissionEntity' |
16
+ 'TableItem_DemandPresenter' | 'TableItem_MachineNode' | 'TableItem_ServiceSale' | 'TableItem_TreasuryHistory' | 'TableItem_ArbVote' |
17
+ 'TableItem_RepositoryData' | 'TableItem_ResourceMark';
18
+ type_raw?: string;
19
+ owner?: any;
20
+ version?: string;
21
+ cache_expire?: number | 'INFINITE';
22
+ }
23
+
24
+ export interface ObjectPermission extends ObjectBase {
25
+ builder: string;
26
+ admin: string[];
27
+ description: string;
28
+ entity_count: number;
29
+ biz_permission: {id:number; name:string}[];
30
+ }
31
+
32
+ export interface TableItem_PermissionEntity extends ObjectBase {
33
+ entity: string;
34
+ permission: {id:number; guard?:string|null}[];
35
+ }
36
+
37
+ export interface ObjectDemand extends ObjectBase {
38
+ permission: string;
39
+ guard?: {object:string; service_id_in_guard?:number|null} | null;
40
+ description: string;
41
+ time_expire: string;
42
+ yes?: string | null;
43
+ presenter_count: number;
44
+ bounty: {object:string; balance:string; type:string}[];
45
+ }
46
+
47
+ export interface TableItem_DemandPresenter extends ObjectBase {
48
+ service: string;
49
+ presenter: string;
50
+ recommendation: string;
51
+ }
52
+
53
+ export interface ObjectMachine extends ObjectBase {
54
+ permission: string;
55
+ bPaused: boolean;
56
+ bPublished: boolean;
57
+ consensus_repository: string[];
58
+ description: string;
59
+ endpoint?: string | null;
60
+ node_count: number;
61
+ }
62
+
63
+ export interface TableItem_MachineNode extends ObjectBase {
64
+ node: Machine_Node;
65
+ }
66
+
67
+ export interface ObjectProgressHolder {
68
+ forward_name: string;
69
+ holder?: string | null;
70
+ orders: string[];
71
+ msg: string;
72
+ accomplished: boolean;
73
+ time: string;
74
+ }
75
+
76
+ export interface ObjectProgressSession {
77
+ forward: ObjectProgressHolder[];
78
+ weights: number;
79
+ threshold: number;
80
+ next_node: string;
81
+ }
82
+
83
+ export interface ObjectProgress extends ObjectBase {
84
+ machine: string;
85
+ current: string;
86
+ context_repository?: string | null;
87
+ parent?: string | null;
88
+ task?: string | null;
89
+ session: ObjectProgressSession[];
90
+ history_count: number;
91
+ namedOperator: {name:string, operator:string[]}[];
92
+ }
93
+
94
+ export interface TableItem_ProgressHistory extends ObjectBase {
95
+ history: History;
96
+ }
97
+
98
+ export interface ObjectService extends ObjectBase {
99
+ permission: string;
100
+ bPaused: boolean;
101
+ bPublished: boolean;
102
+ description: string;
103
+ arbitration: string[];
104
+ buy_guard?: string | null;
105
+ endpoint?: string | null;
106
+ extern_withdraw_treasury: string[];
107
+ machine?: string | null;
108
+ payee: string;
109
+ repository: string[];
110
+ sales_count: number;
111
+ withdraw_guard: {guard:string, percent:number}[];
112
+ refund_guard: {guard:string, percent:number}[];
113
+ customer_required_info?: {pubkey:string; required_info:string[]};
114
+ }
115
+
116
+ export interface TableItem_ServiceSale extends ObjectBase {
117
+ item: Service_Sale;
118
+ }
119
+ export interface ObjectOrder extends ObjectBase {
120
+ service: string;
121
+ amount: string;
122
+ balance: string;
123
+ payer: string;
124
+ arb: string[];
125
+ agent: string[];
126
+ progress?: string | null;
127
+ discount?: string | null;
128
+ required_info?: {pubkey:string; msg_encrypted:string};
129
+ item: Service_Sale[];
130
+ }
131
+
132
+ export interface ObjectTreasury extends ObjectBase {
133
+ permission: string;
134
+ description: string;
135
+ inflow: string;
136
+ outflow: string;
137
+ withdraw_mode: Treasury_WithdrawMode;
138
+ withdraw_guard: {guard:string, percent:number}[];
139
+ deposit_guard?: string | null;
140
+ balance: string;
141
+ history_count: number;
142
+ }
143
+ export interface TableItem_TreasuryHistory extends ObjectBase {
144
+ id: number,
145
+ operation: Treasury_Operation,
146
+ signer: string,
147
+ payment: string,
148
+ amount: string,
149
+ time: string,
150
+ }
151
+ export interface ObjectArbitration extends ObjectBase {
152
+ permission: string;
153
+ description: string;
154
+ bPaused: boolean;
155
+ endpoint?: string | null;
156
+ fee: string;
157
+ fee_treasury: string;
158
+ usage_guard?: string | null;
159
+ voting_guard: {guard:string, weights:number}[];
160
+ }
161
+
162
+ export interface ObjectArb extends ObjectBase {
163
+ arbitration: string;
164
+ order: string;
165
+ description: string;
166
+ bWithdrawn: boolean;
167
+ fee: string;
168
+ feedback: string;
169
+ indemnity?: string | null;
170
+ proposition: {proposition:string, votes:string};
171
+ voted_count: number;
172
+ }
173
+ export interface TableItem_ArbVote extends ObjectBase {
174
+ singer: string;
175
+ vote: number[];
176
+ weight: string;
177
+ time: string;
178
+ }
179
+ export interface ObjectRepository extends ObjectBase {
180
+ permission: string;
181
+ description: string;
182
+ policy_mode: Repository_Policy_Mode;
183
+ rep_type: Repository_Type;
184
+ reference: string[];
185
+ policy: Repository_Policy[];
186
+ data_count: number;
187
+ }
188
+ export interface TableItem_RepositoryData extends ObjectBase {
189
+ address: string;
190
+ key: string;
191
+ data: Uint8Array;
192
+ }
193
+ export interface ObjectPayment extends ObjectBase {
194
+ amount: string;
195
+ for_guard?: string | null;
196
+ for_object?: string | null;
197
+ from ?: string | null;
198
+ biz_id: string;
199
+ remark: string;
200
+ signer: string;
201
+ time: string;
202
+ record: {recipient:string; amount:string}[];
203
+ }
204
+ export interface ObjectDiscount extends ObjectBase {
205
+ service: string;
206
+ name: string;
207
+ off_type: Service_Discount_Type;
208
+ price_greater?: string | null;
209
+ off: string;
210
+ time_start: string;
211
+ time_end: string;
212
+ }
213
+
214
+ export interface ObjectGuard extends ObjectBase {
215
+ description: string;
216
+ input: Uint8Array;
217
+ identifier: {id:number; bWitness:boolean; value:Uint8Array}[];
218
+ }
219
+ export interface ObjectEntity extends ObjectBase {
220
+ address: string;
221
+ like: number;
222
+ dislike: number;
223
+
224
+ name?: string;
225
+ description?: string;
226
+ avatar?: string;
227
+ x?: string;
228
+ discord?: string;
229
+
230
+ homepage?: string;
231
+ resource_object?: string | null;
232
+ lastActive_digest?: string;
233
+ }
234
+
235
+ export interface ObjectResouorce_Tag {
236
+ object: string;
237
+ nick_name: string;
238
+ tags: string[];
239
+ }
240
+
241
+ export interface ObjectResouorce extends ObjectBase {
242
+ marks_count: number;
243
+ tags: ObjectResouorce_Tag[];
244
+ }
245
+
246
+ export interface TableItem_ResourceMark extends ObjectBase {
247
+ mark_name: string;
248
+ objects: string[];
249
+ }
250
+
251
+ export enum CacheType {
252
+ localStorage = 'localStorage', // for explorer
253
+ memoryStorage = 'memoryStorage', // for console
254
+ }
255
+
256
+ const MEMORY_STORAGE = new Map<string, string>();
257
+ export interface ObjectsQuery {
258
+ objects: string[];
259
+ showType?: boolean;
260
+ showContent?: boolean;
261
+ showOwner?: boolean;
262
+ no_cache?: boolean;
263
+ }
264
+ export interface ObjectsAnswer {
265
+ objects?: ObjectBase[];
266
+ error?: string;
267
+ }
268
+
269
+ export interface TableQuery {
270
+ parent: string;
271
+ cursor?: string | null | undefined;
272
+ limit?: number | null | undefined;
273
+ }
274
+ export interface TableAnswerItem {
275
+ key: {type:string; value:unknown};
276
+ object: string;
277
+ version: string;
278
+ }
279
+ export interface TableAnswer {
280
+ items: TableAnswerItem[];
281
+ nextCursor: string | null;
282
+ hasNextPage: boolean;
283
+ }
284
+
285
+ interface TableItemQuery {
286
+ parent: string;
287
+ key: {type:string, value:unknown};
288
+ }
289
+
290
+ export interface CachedData {
291
+ expire: number | 'INFINITE';
292
+ data: string | any;
293
+ }
294
+ export namespace OBJECT_QUERY {
295
+ /* json: ObjectsQuery string */
296
+ export const objects_json = async (json:string) : Promise<string> => {
297
+ try {
298
+ const q : ObjectsQuery = JSON.parse(json);
299
+ return JSON.stringify({data:await objects(q)});
300
+ } catch (e) {
301
+ return JSON.stringify({error:e?.toString()})
302
+ }
303
+ }
304
+
305
+ /* json: TableQuery string */
306
+ export const table_json = async (json:string) : Promise<string> => {
307
+ try {
308
+ const q : TableQuery = JSON.parse(json);
309
+ return JSON.stringify({data:await table(q)});
310
+ } catch (e) {
311
+ return JSON.stringify({error:e?.toString()})
312
+ }
313
+ }
314
+
315
+ export const objects = async (query: ObjectsQuery) : Promise<ObjectsAnswer> => {
316
+ var ret:ObjectBase[] = []; const pending : string[] = [];
317
+ let bCached = true; const time = new Date().getTime();
318
+ const cache = WowokCache.Instance().get();
319
+ if (cache) {
320
+ for (let i = 0; i < query.objects.length; ++i) {
321
+ try {
322
+ let data = cache.load(OBJECT_KEY(query.objects[i]))
323
+
324
+ if (data) {
325
+ const r:CachedData = JSON.parse(data);
326
+
327
+ if (r?.expire !== 'INFINITE' && (query?.no_cache || r.expire <= time) && (query.showOwner || query.showContent)) { //@ type immutable
328
+ pending.push(query.objects[i]);
329
+ } else {
330
+ const d = data2object(JSON.parse(r.data));
331
+ d.cache_expire = r.expire;
332
+ ret.push(d);
333
+ }
334
+ }
335
+ } catch (e) {
336
+ console.log(e)
337
+ }
338
+ pending.push(query.objects[i]);
339
+ }
340
+ }
341
+
342
+ if (pending.length > 0) {
343
+ const res = await Protocol.Client().multiGetObjects({ids:[...pending],
344
+ options:{showContent:query.showContent, showType:query.showType, showOwner:query.showOwner}});
345
+ const now = new Date().getTime();
346
+ const cache = WowokCache.Instance().get();
347
+
348
+ if (cache) {
349
+ res.forEach((i) => { // save
350
+ try {
351
+ if (i?.data) {
352
+ const type_raw:string | undefined = i.data?.type ?? ((i.data?.content as any)?.type ?? undefined);
353
+ const type:string | undefined = type_raw ? Protocol.Instance().object_name_from_type_repr(type_raw) : undefined;
354
+ const expire = (type === 'Guard' || type === 'Payment') ? 'INFINITE' : (cache.expire_time()+now); // guard & payment immutable
355
+ const r:CachedData = {expire:expire, data:JSON.stringify(i.data)}
356
+ cache.save(OBJECT_KEY(i.data.objectId), JSON.stringify(r));
357
+ }
358
+ } catch(e) { console.log(e) }
359
+ })
360
+ }
361
+ ret = ret.concat(res.map(v=>data2object(v?.data)));
362
+ }
363
+ return {objects:ret}
364
+ }
365
+
366
+ export const entity = async (address:string) : Promise<ObjectEntity> => {
367
+ if (!IsValidAddress(address)) ERROR(Errors.IsValidAddress, 'entity.address')
368
+ const res = await Protocol.Client().getDynamicFieldObject({parentId:Protocol.Instance().objectEntity(), name:{type:'address', value:address}});
369
+ return data2object(res?.data) as ObjectEntity
370
+ }
371
+
372
+ export const table = async (query:TableQuery) : Promise<TableAnswer> => {
373
+ const res = await Protocol.Client().getDynamicFields({parentId:query.parent, cursor:query.cursor, limit:query.limit});
374
+ return {items:res?.data?.map(v=>{
375
+ return {object:v.objectId, type:v.type, version:v.version, key:{
376
+ type:v.name.type, value:v.name.value
377
+ }}
378
+ }), nextCursor:res.nextCursor, hasNextPage:res.hasNextPage}
379
+ }
380
+
381
+ export const queryTableItem_DemandPresenter = async (demand_object:string | ObjectDemand, address:string) : Promise<ObjectBase> => {
382
+ return await tableItem(tableItemQuery_byAddress(demand_object, address))
383
+ }
384
+ export const queryTableItem_PermissionEntity = async (permission_object:string | ObjectDemand, address:string) : Promise<ObjectBase> => {
385
+ return await tableItem(tableItemQuery_byAddress(permission_object, address))
386
+ }
387
+ export const queryTableItem_ArbVote = async (arb_object:string | ObjectDemand, address:string) : Promise<ObjectBase> => {
388
+ return await tableItem(tableItemQuery_byAddress(arb_object, address))
389
+ }
390
+ export const tableItemQuery_MachineNode = async (machine_object:string | ObjectMachine, name:string) : Promise<ObjectBase> => {
391
+ return await tableItem(tableItemQuery_byString(machine_object, name))
392
+ }
393
+ export const tableItemQuery_ServiceSale = async (service_object:string | ObjectService, name:string) : Promise<ObjectBase> => {
394
+ return await tableItem(tableItemQuery_byString(service_object, name))
395
+ }
396
+ export const tableItemQuery_ProgressHistory = async (progress_object:string | ObjectProgress, index:BigInt) : Promise<ObjectBase> => {
397
+ return await tableItem(tableItemQuery_byU64(progress_object, index))
398
+ }
399
+ export const tableItemQuery_TreasuryHistory = async (treasury_object:string | ObjectTreasury, index:BigInt) : Promise<ObjectBase> => {
400
+ return await tableItem(tableItemQuery_byU64(treasury_object, index))
401
+ }
402
+ export const tableItemQuery_RepositoryData = async (repository_object:string | ObjectRepository, address:string, name:string) : Promise<ObjectBase> => {
403
+ if (typeof(repository_object) !== 'string') {
404
+ repository_object = repository_object.object;
405
+ }
406
+ return await tableItem({parent:repository_object, key:{type:Protocol.Instance().package('wowok')+'::repository::DataKey', value:{id:address, key:name}}})
407
+ }
408
+ export const tableItemQuery_ResourceMark = async (resource_object:string | ObjectResouorce, name:string) : Promise<ObjectBase> => {
409
+ return await tableItem(tableItemQuery_byString(resource_object, name))
410
+ }
411
+
412
+ function tableItemQuery_byAddress(parent:string | ObjectDemand | ObjectPermission | ObjectArb, address:string) : TableItemQuery {
413
+ if (typeof(parent) !== 'string') {
414
+ parent = parent.object;
415
+ }
416
+ return {parent:parent, key:{type:'address', value:address}};
417
+ }
418
+ function tableItemQuery_byString(parent:string | ObjectMachine | ObjectService | ObjectResouorce, name:string) : TableItemQuery {
419
+ if (typeof(parent) !== 'string') {
420
+ parent = parent.object;
421
+ }
422
+ return {parent:parent, key:{type:'0x1::string::String', value:name}};
423
+ }
424
+ function tableItemQuery_byU64 (parent:string | ObjectProgress | ObjectTreasury, index:BigInt) : TableItemQuery {
425
+ if (typeof(parent) !== 'string') {
426
+ parent = parent.object;
427
+ }
428
+ return {parent:parent, key:{type:'u64', value:index}};
429
+ }
430
+ const tableItem = async (query:TableItemQuery) : Promise<ObjectBase> => {
431
+ const res = await Protocol.Client().getDynamicFieldObject({parentId:query.parent, name:{type:query.key.type, value:query.key.value}});
432
+ return data2object(res?.data)
433
+ }
434
+
435
+ export function data2object(data?:any) : ObjectBase {
436
+ const content = (data?.content as any)?.fields;
437
+ const id = data?.objectId ?? (content?.id?.id ?? undefined);
438
+ const type_raw:string | undefined = data?.type ?? (data?.content?.type ?? undefined);
439
+ const version = data?.version ?? undefined;
440
+ const owner = data?.owner ?? undefined;
441
+ const type:string | undefined = type_raw ? Protocol.Instance().object_name_from_type_repr(type_raw) : undefined;
442
+
443
+ if (type) {
444
+ switch(type) {
445
+ case 'Permission':
446
+ return {object:id, type:type, type_raw:type_raw, owner:owner, version:version,
447
+ builder: content?.builder ??'', admin:content?.admin, description:content?.description??'',
448
+ entity_count: parseInt(content?.table?.fields?.size),
449
+ biz_permission:content?.user_define?.fields?.contents?.map((v:any) => {
450
+ return {id:parseInt(v?.fields?.key), name:v?.fields?.value}
451
+ })
452
+ } as ObjectPermission;
453
+ case 'Demand':
454
+ return {
455
+ object:id, type:type, type_raw:type_raw, owner:owner, version:version,
456
+ permission: content?.permission, description:content?.description,
457
+ guard:content?.guard ? {object:content?.guard, service_id_in_guard:content?.service_identifier}:undefined,
458
+ time_expire:content?.time_expire, yes:content?.yes,
459
+ presenter_count:parseInt(content?.presenters?.fields?.size),
460
+ bounty: content?.bounty?.map((v:any) => {
461
+ return {type:v?.fields?.type, object:v?.fields?.id?.id, balance:v?.fields?.balance}
462
+ })
463
+ } as ObjectDemand;
464
+ case 'Machine':
465
+ return {
466
+ object:id, type:type, type_raw:type_raw, owner:owner, version:version,
467
+ permission: content?.permission ?? '', description:content?.description??'',
468
+ bPaused: content?.bPaused, bPublished:content?.bPublished, endpoint:content?.endpoint,
469
+ consensus_repository:content?.consensus_repositories, node_count:parseInt(content?.nodes?.fields?.size),
470
+ } as ObjectMachine;
471
+ case 'Progress':
472
+ return {
473
+ object:id, type:type, type_raw:type_raw, owner:owner, version:version,
474
+ machine: content?.machine, current: content?.current, task:content?.task,
475
+ parent:content?.parent, history_count:parseInt(content?.history?.fields?.contents?.fields?.size),
476
+ namedOperator:content?.namedOperator?.fields?.contents?.map((v:any) => {
477
+ return {name:v?.fields?.key, operator:v?.fields?.value}
478
+ }),
479
+ session:content?.session?.fields?.contents?.map((v:any) => {
480
+ return {weights:v?.fields?.value?.fields?.weight, threshold:v?.fields?.value?.fields?.threshold,
481
+ next_node:v?.fields?.key, forward: v?.fields?.value?.fields?.forwards?.fields?.contents?.map((i:any) => {
482
+ return {forward_name:i?.fields?.key, accomplished:i?.fields?.value?.fields?.accomplished,
483
+ msg:i?.fields?.value?.fields?.msg, orders:i?.fields?.value?.fields?.orders,
484
+ time:i?.fields?.value?.fields?.time, holder:i?.fields?.value?.fields?.who
485
+ }
486
+ })
487
+ }
488
+ })
489
+ } as ObjectProgress;
490
+ case 'Order':
491
+ return {
492
+ object:id, type:type, type_raw:type_raw, owner:owner, version:version,
493
+ service:content?.service, amount: content?.amount, agent:content?.agent, arb:content?.dispute,
494
+ payer:content?.payer, progress:content?.progress, discount:content?.discount, balance:content?.payed,
495
+ required_info: content?.required_info ?
496
+ {pubkey:content?.required_info?.fields?.customer_pub, msg_encrypted:content?.required_info?.fields?.info}
497
+ : undefined,
498
+ item : content?.items?.map((v:any) => {
499
+ return {name:v?.fields?.name, price:v?.fields?.price, stock:v?.fields?.stock, endpoint:v?.fields?.endpoint}
500
+ }),
501
+ } as ObjectOrder;
502
+ case 'Service':
503
+ return {
504
+ object:id, type:type, type_raw:type_raw, owner:owner, version:version,
505
+ machine:content?.machine, permission:content?.permission, description:content?.description,
506
+ arbitration:content?.arbitrations, bPaused:content?.bPaused, bPublished:content?.bPublished,
507
+ buy_guard:content?.buy_guard, endpoint:content?.endpoint, payee:content?.payee, repository:content?.repositories,
508
+ withdraw_guard:content?.withdraw_guard?.fields?.contents?.map((v:any) => {
509
+ return {object:v?.fields?.key, percent:v?.fields?.value}
510
+ }),
511
+ refund_guard:content?.refund_guard?.fields?.contents?.map((v:any) => {
512
+ return {object:v?.fields?.key, percent:v?.fields?.value}
513
+ }),
514
+ sales_count:parseInt(content?.sales?.fields?.size), extern_withdraw_treasury:content?.extern_withdraw_treasuries,
515
+ customer_required_info:content?.customer_required ?
516
+ {pubkey:content?.customer_required?.fields?.service_pubkey, required_info:content?.customer_required?.fields?.customer_required_info}
517
+ :undefined,
518
+ } as ObjectService;
519
+ case 'Treasury':
520
+ return {
521
+ object:id, type:type, type_raw:type_raw, owner:owner, version:version,
522
+ permission:content?.permission, description:content?.description, withdraw_mode:content?.withdraw_mode,
523
+ history_count:parseInt(content?.history?.fields?.contents?.fields?.size), balance: content?.balance,
524
+ deposit_guard:content?.deposit_guard, withdraw_guard:content?.withdraw_guard?.fields?.contents?.map((v:any) => {
525
+ return {object:v?.fields?.key, percent:v?.fields?.value}
526
+ })
527
+ } as ObjectTreasury;
528
+ case 'Arbitration':
529
+ return {
530
+ object:id, type:type, type_raw:type_raw, owner:owner, version:version,
531
+ permission:content?.permission, description:content?.description, fee:content?.fee,
532
+ fee_treasury:content?.fee_treasury, usage_guard:content?.usage_guard,
533
+ endpoint:content?.endpoint, bPaused:content?.bPaused, voting_guard:content?.voting_guard?.fields?.contents?.map((v:any) => {
534
+ return {object:v?.fields?.key, weights:v?.fields?.value}
535
+ })
536
+ } as ObjectArbitration;
537
+ case 'Arb':
538
+ return {
539
+ object:id, type:type, type_raw:type_raw, owner:owner, version:version,
540
+ arbitration:content?.arbitration, description:content?.description, fee:content?.fee,
541
+ feedback:content?.feedback, indemnity:content?.indemnity, order:content?.order,
542
+ voted_count:parseInt(content?.voted?.fields?.size),
543
+ proposition:content?.proposition?.fields?.contents?.map((v:any) => {
544
+ return {proposition:v?.fields?.key, votes:v?.fields?.value}
545
+ })
546
+ } as ObjectArb;
547
+ case 'Repository':
548
+ return {
549
+ object:id, type:type, type_raw:type_raw, owner:owner, version:version,
550
+ permission:content?.permission, description:content?.description, policy_mode:content?.policy_mode,
551
+ data_count:parseInt(content?.data?.fields?.size), reference:content?.reference, rep_type:content?.type,
552
+ policy:content?.policies?.fields?.contents?.map((v:any) => {
553
+ return {key:v?.fields?.key, description:v?.fields?.value?.fields?.description,
554
+ permissionIndex:v?.fields?.value?.fields?.permission_index, dataType:v?.fields?.value?.fields?.value_type}
555
+ })
556
+ } as ObjectRepository;
557
+ case 'Payment':
558
+ return {
559
+ object:id, type:type, type_raw:type_raw, owner:owner, version:version,
560
+ signer:content?.signer, time:content?.time, remark:content?.remark, from: content?.from,
561
+ biz_id:content?.index, for_guard:content?.for_guard, for_object:content?.for_object,
562
+ amount:content?.amount, record:content?.record?.map((v:any) => {
563
+ return {recipient:v?.fields?.recipient, amount:v?.fields?.amount}
564
+ })
565
+ } as ObjectPayment;
566
+ case 'Discount':
567
+ return {
568
+ object:id, type:type, type_raw:type_raw, owner:owner, version:version,
569
+ service:content?.service, time_start:content?.time_start, time_end:content?.time_end,
570
+ price_greater:content?.price_greater, off_type:content?.type, off:content?.off,
571
+ name:content?.name
572
+ } as ObjectDiscount;
573
+ case 'Guard':
574
+ return {
575
+ object:id, type:type, type_raw:type_raw, owner:owner, version:version,
576
+ description:content?.description, input:Uint8Array.from(content?.input?.fields?.bytes),
577
+ identifier:content?.constants?.map((v:any) => {
578
+ return {id:v?.fields?.identifier, bWitness:v?.fields?.bWitness, value:Uint8Array.from(v?.fields?.value)}
579
+ })
580
+ } as ObjectGuard;
581
+ case 'Resource' :
582
+ return {
583
+ object:id, type:type, type_raw:type_raw, owner:owner, version:version,
584
+ marks_count:parseInt(content?.marks?.fields?.size),
585
+ tags:content?.tags?.map((v:any) => {
586
+ return {object:v?.fields?.object, nick_name:v?.fields?.nick, tags:v?.fields?.tags}
587
+ })
588
+ } as ObjectResouorce;
589
+ }
590
+ }
591
+
592
+ const start = type_raw?.indexOf('0x2::dynamic_field::Field<');
593
+ if (start === 0) {
594
+ const end = type_raw?.substring('0x2::dynamic_field::Field<'.length);
595
+ if(end && Protocol.Instance().hasPackage(end)) {
596
+ if (end.includes('::demand::Tips>')) {
597
+ return {
598
+ object:id, type:'DemandTable_Presenter', type_raw:type_raw, owner:owner, version:version,
599
+ service:content?.name, presenter:content?.value?.fields?.who, recommendation:content?.value?.fields?.tips
600
+ } as TableItem_DemandPresenter;
601
+ } else if (end.includes('::machine::NodePair>>>')) {
602
+ return {
603
+ object:id, type:'MachineTable_Node', type_raw:type_raw, owner:owner, version:version,
604
+ node:{name:content?.name, pairs:Machine.rpc_de_pair(content?.value)}
605
+ } as TableItem_MachineNode;
606
+ } else if (end.includes('::progress::History>')) {
607
+ return {
608
+ object:id, type:'ProgressTable_History', type_raw:type_raw, owner:owner, version:version,
609
+ history:Progress.DeHistory(content)
610
+ } as TableItem_ProgressHistory;
611
+ } else if (end.includes('::service::Sale>')) {
612
+ return {
613
+ object:id, type:'ServiceTable_Sale', type_raw:type_raw, owner:owner, version:version,
614
+ item:{item:content?.name, stock:content?.value?.fields?.stock, price:content?.value?.fields?.price,
615
+ endpoint:content?.value?.fields?.endpoint
616
+ }
617
+ } as TableItem_ServiceSale;
618
+ } else if (end.includes('::treasury::Record>')) {
619
+ return {
620
+ object:id, type:'TreasuryTable_History', type_raw:type_raw, owner:owner, version:version,
621
+ id: content?.name, payment:content?.value?.fields?.payment, signer:content?.value?.fields?.signer,
622
+ operation: content?.value?.fields?.op, amount: content?.value?.fields?.amount, time:content?.value?.fields?.time
623
+ } as TableItem_TreasuryHistory;
624
+ } else if (end.includes('::arb::Voted>')) {
625
+ return {
626
+ object:id, type:'ArbTable_Vote', type_raw:type_raw, owner:owner, version:version,
627
+ singer:content?.name, vote:content?.value?.fields?.agrees, time: content?.value?.fields?.time,
628
+ weight:content?.value?.fields?.weight
629
+ } as TableItem_ArbVote;
630
+ } else if (end.includes('::permission::Perm>>')) {
631
+ return {
632
+ object:id, type:'TableItem_PermissionEntity', type_raw:type_raw, owner:owner, version:version,
633
+ entity:content?.name, permission:content?.value?.map((v:any) => {
634
+ return {id:v?.fields.index, guard:v?.fields.guard}
635
+ })
636
+ } as TableItem_PermissionEntity;
637
+ } else if (end.includes('::repository::DataKey')) {
638
+ return {
639
+ object:id, type:'TableItem_RepositoryData', type_raw:type_raw, owner:owner, version:version,
640
+ address:content?.name?.fields?.id, key:content?.name?.fields?.key, data:Uint8Array.from(content?.value)
641
+ } as TableItem_RepositoryData;
642
+ } else if (end.includes('::entity::Ent>')) {
643
+ const info = Bcs.getInstance().de_entInfo(Uint8Array.from(content?.value?.fields?.avatar));
644
+ return {
645
+ object:id, type:'Entity', type_raw:type_raw, owner:owner, version:version,
646
+ address:content?.name, like:content?.value?.fields?.like, dislike:content?.value?.fields?.dislike,
647
+ resource_object: content?.value?.fields?.resource, lastActive_digest: data?.previousTransaction,
648
+ homepage:info?.homepage, name:info?.name, avatar:info?.avatar, x:info?.twitter, discord:info?.discord,
649
+ description:info?.description
650
+ } as ObjectEntity;
651
+ } else if (end.includes('::resource::Addresses>')) {
652
+ return {
653
+ object:id, type:'Entity', type_raw:type_raw, owner:owner, version:version,
654
+ mark_name:content?.name, objects:content?.value?.fields?.addresses
655
+ } as TableItem_ResourceMark;
656
+ }
657
+ }
658
+ }
659
+ return {object:id, type:type, type_raw:type_raw, owner:owner, version:version}
660
+ }
661
+ }