@xyo-network/node-wrapper 2.101.13 → 2.101.15

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.
@@ -2,9 +2,10 @@ import { Address } from '@xylabs/hex';
2
2
  import { AccountInstance } from '@xyo-network/account-model';
3
3
  import { AddressPayload } from '@xyo-network/address-payload-plugin';
4
4
  import { NodeManifestPayload } from '@xyo-network/manifest-model';
5
- import { InstanceTypeCheck, ModuleIdentifier, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model';
5
+ import { InstanceTypeCheck, ModuleIdentifier, ModuleQueryResult } from '@xyo-network/module-model';
6
6
  import { ModuleWrapper } from '@xyo-network/module-wrapper';
7
7
  import { ChildCertification, ChildCertificationFields, NodeInstance, NodeModule } from '@xyo-network/node-model';
8
+ import { Mutex } from 'async-mutex';
8
9
  export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule> extends ModuleWrapper<TWrappedModule> implements NodeInstance<TWrappedModule['params']> {
9
10
  static instanceIdentityCheck: InstanceTypeCheck<NodeInstance>;
10
11
  static moduleIdentityCheck: import("@xyo-network/module-model").ModuleTypeCheck<NodeModule<import("@xylabs/object").BaseParamsFields & {
@@ -22,6 +23,8 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
22
23
  moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[] | undefined;
23
24
  }, import("@xyo-network/node-model").NodeModuleEventData>>;
24
25
  static requiredQueries: string[];
26
+ protected _attached?: Address[];
27
+ protected _attachedMutex: Mutex;
25
28
  attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined>;
26
29
  attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
27
30
  attached(): Promise<Address[]>;
@@ -31,7 +34,6 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
31
34
  detach(id: ModuleIdentifier): Promise<Address | undefined>;
32
35
  detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
33
36
  manifest(maxDepth?: number): Promise<NodeManifestPayload>;
34
- publicChildren(): Promise<ModuleInstance[]>;
35
37
  registered(): Promise<Address[]>;
36
38
  registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EAGd,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAIhC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAErF,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAM9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMzD,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAQpD,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
1
+ {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAkD,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClJ,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAE3F,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;IAC/B,SAAS,CAAC,cAAc,QAAc;IAEhC,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAW9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMlE,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
@@ -2,9 +2,10 @@ import { Address } from '@xylabs/hex';
2
2
  import { AccountInstance } from '@xyo-network/account-model';
3
3
  import { AddressPayload } from '@xyo-network/address-payload-plugin';
4
4
  import { NodeManifestPayload } from '@xyo-network/manifest-model';
5
- import { InstanceTypeCheck, ModuleIdentifier, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model';
5
+ import { InstanceTypeCheck, ModuleIdentifier, ModuleQueryResult } from '@xyo-network/module-model';
6
6
  import { ModuleWrapper } from '@xyo-network/module-wrapper';
7
7
  import { ChildCertification, ChildCertificationFields, NodeInstance, NodeModule } from '@xyo-network/node-model';
8
+ import { Mutex } from 'async-mutex';
8
9
  export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule> extends ModuleWrapper<TWrappedModule> implements NodeInstance<TWrappedModule['params']> {
9
10
  static instanceIdentityCheck: InstanceTypeCheck<NodeInstance>;
10
11
  static moduleIdentityCheck: import("@xyo-network/module-model").ModuleTypeCheck<NodeModule<import("@xylabs/object").BaseParamsFields & {
@@ -22,6 +23,8 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
22
23
  moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[] | undefined;
23
24
  }, import("@xyo-network/node-model").NodeModuleEventData>>;
24
25
  static requiredQueries: string[];
26
+ protected _attached?: Address[];
27
+ protected _attachedMutex: Mutex;
25
28
  attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined>;
26
29
  attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
27
30
  attached(): Promise<Address[]>;
@@ -31,7 +34,6 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
31
34
  detach(id: ModuleIdentifier): Promise<Address | undefined>;
32
35
  detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
33
36
  manifest(maxDepth?: number): Promise<NodeManifestPayload>;
34
- publicChildren(): Promise<ModuleInstance[]>;
35
37
  registered(): Promise<Address[]>;
36
38
  registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EAGd,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAIhC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAErF,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAM9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMzD,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAQpD,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
1
+ {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAkD,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClJ,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAE3F,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;IAC/B,SAAS,CAAC,cAAc,QAAc;IAEhC,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAW9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMlE,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
@@ -2,9 +2,10 @@ import { Address } from '@xylabs/hex';
2
2
  import { AccountInstance } from '@xyo-network/account-model';
3
3
  import { AddressPayload } from '@xyo-network/address-payload-plugin';
4
4
  import { NodeManifestPayload } from '@xyo-network/manifest-model';
5
- import { InstanceTypeCheck, ModuleIdentifier, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model';
5
+ import { InstanceTypeCheck, ModuleIdentifier, ModuleQueryResult } from '@xyo-network/module-model';
6
6
  import { ModuleWrapper } from '@xyo-network/module-wrapper';
7
7
  import { ChildCertification, ChildCertificationFields, NodeInstance, NodeModule } from '@xyo-network/node-model';
8
+ import { Mutex } from 'async-mutex';
8
9
  export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule> extends ModuleWrapper<TWrappedModule> implements NodeInstance<TWrappedModule['params']> {
9
10
  static instanceIdentityCheck: InstanceTypeCheck<NodeInstance>;
10
11
  static moduleIdentityCheck: import("@xyo-network/module-model").ModuleTypeCheck<NodeModule<import("@xylabs/object").BaseParamsFields & {
@@ -22,6 +23,8 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
22
23
  moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[] | undefined;
23
24
  }, import("@xyo-network/node-model").NodeModuleEventData>>;
24
25
  static requiredQueries: string[];
26
+ protected _attached?: Address[];
27
+ protected _attachedMutex: Mutex;
25
28
  attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined>;
26
29
  attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
27
30
  attached(): Promise<Address[]>;
@@ -31,7 +34,6 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
31
34
  detach(id: ModuleIdentifier): Promise<Address | undefined>;
32
35
  detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
33
36
  manifest(maxDepth?: number): Promise<NodeManifestPayload>;
34
- publicChildren(): Promise<ModuleInstance[]>;
35
37
  registered(): Promise<Address[]>;
36
38
  registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EAGd,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAIhC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAErF,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAM9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMzD,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAQpD,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
1
+ {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAkD,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClJ,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAE3F,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;IAC/B,SAAS,CAAC,cAAc,QAAc;IAEhC,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAW9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMlE,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
@@ -26,13 +26,13 @@ __export(src_exports, {
26
26
  module.exports = __toCommonJS(src_exports);
27
27
 
28
28
  // src/NodeWrapper.ts
29
- var import_exists = require("@xylabs/exists");
30
29
  var import_address_payload_plugin = require("@xyo-network/address-payload-plugin");
31
30
  var import_manifest_model = require("@xyo-network/manifest-model");
32
31
  var import_module_model = require("@xyo-network/module-model");
33
32
  var import_module_wrapper = require("@xyo-network/module-wrapper");
34
33
  var import_node_model = require("@xyo-network/node-model");
35
34
  var import_payload_model = require("@xyo-network/payload-model");
35
+ var import_async_mutex = require("async-mutex");
36
36
  (0, import_module_wrapper.constructableModuleWrapper)();
37
37
  var NodeWrapper = class extends import_module_wrapper.ModuleWrapper {
38
38
  static {
@@ -44,6 +44,8 @@ var NodeWrapper = class extends import_module_wrapper.ModuleWrapper {
44
44
  import_node_model.NodeAttachQuerySchema,
45
45
  ...import_module_wrapper.ModuleWrapper.requiredQueries
46
46
  ];
47
+ _attached;
48
+ _attachedMutex = new import_async_mutex.Mutex();
47
49
  async attach(id, external) {
48
50
  const queryPayload = {
49
51
  external,
@@ -62,11 +64,16 @@ var NodeWrapper = class extends import_module_wrapper.ModuleWrapper {
62
64
  return await this.sendQueryRaw(queryPayload, [], account);
63
65
  }
64
66
  async attached() {
65
- const queryPayload = {
66
- schema: import_node_model.NodeAttachedQuerySchema
67
- };
68
- const payloads = (await this.sendQuery(queryPayload)).filter((0, import_payload_model.isPayloadOfSchemaType)(import_address_payload_plugin.AddressSchema));
69
- return payloads.map((p) => p.address);
67
+ return await this._attachedMutex.runExclusive(async () => {
68
+ if (this._attached === void 0) {
69
+ const queryPayload = {
70
+ schema: import_node_model.NodeAttachedQuerySchema
71
+ };
72
+ const payloads = (await this.sendQuery(queryPayload)).filter((0, import_payload_model.isPayloadOfSchemaType)(import_address_payload_plugin.AddressSchema));
73
+ this._attached = payloads.map((p) => p.address);
74
+ }
75
+ return this._attached;
76
+ });
70
77
  }
71
78
  async attachedQuery(account) {
72
79
  const queryPayload = {
@@ -114,13 +121,6 @@ var NodeWrapper = class extends import_module_wrapper.ModuleWrapper {
114
121
  const payloads = (await this.sendQuery(queryPayload)).filter((0, import_payload_model.isPayloadOfSchemaType)(import_manifest_model.NodeManifestPayloadSchema));
115
122
  return payloads.pop();
116
123
  }
117
- async publicChildren() {
118
- if ((0, import_node_model.isNodeInstance)(this.module)) {
119
- return await this.module.publicChildren();
120
- }
121
- const attached = await this.attached();
122
- return (await Promise.all(attached.map((address) => this.resolve(address)))).filter(import_exists.exists);
123
- }
124
124
  async registered() {
125
125
  const queryPayload = {
126
126
  schema: import_node_model.NodeRegisteredQuerySchema
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/NodeWrapper.ts"],"sourcesContent":["export * from './NodeWrapper'\n","import { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport {\n InstanceTypeCheck,\n ModuleIdentifier,\n ModuleInstance,\n ModuleManifestQuery,\n ModuleManifestQuerySchema,\n ModuleQueryResult,\n} from '@xyo-network/module-model'\nimport { constructableModuleWrapper, ModuleWrapper } from '@xyo-network/module-wrapper'\nimport {\n ChildCertification,\n ChildCertificationFields,\n ChildCertificationSchema,\n isNodeInstance,\n isNodeModule,\n NodeAttachedQuery,\n NodeAttachedQuerySchema,\n NodeAttachQuery,\n NodeAttachQuerySchema,\n NodeCertifyQuery,\n NodeCertifyQuerySchema,\n NodeDetachQuery,\n NodeDetachQuerySchema,\n NodeInstance,\n NodeModule,\n NodeRegisteredQuery,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, WithMeta } from '@xyo-network/payload-model'\n\nconstructableModuleWrapper()\nexport class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>\n extends ModuleWrapper<TWrappedModule>\n implements NodeInstance<TWrappedModule['params']>\n{\n static override instanceIdentityCheck: InstanceTypeCheck<NodeInstance> = isNodeInstance\n static override moduleIdentityCheck = isNodeModule\n static override requiredQueries = [NodeAttachQuerySchema, ...ModuleWrapper.requiredQueries]\n\n async attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async attached(): Promise<Address[]> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async attachedQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async certify(id: ModuleIdentifier): Promise<ChildCertificationFields | undefined> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<ChildCertification>>(ChildCertificationSchema))\n return payloads.pop()\n }\n\n async certifyQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<ChildCertification>> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async detach(id: ModuleIdentifier): Promise<Address | undefined> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n override async manifest(maxDepth?: number): Promise<NodeManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth ? { maxDepth } : {}) }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n return payloads.pop() as NodeManifestPayload\n }\n\n override async publicChildren(): Promise<ModuleInstance[]> {\n if (isNodeInstance(this.module)) {\n return await this.module.publicChildren()\n }\n const attached = await this.attached()\n return (await Promise.all(attached.map((address) => this.resolve(address)))).filter(exists)\n }\n\n async registered(): Promise<Address[]> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n}\n"],"mappings":"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","names":["constructableModuleWrapper","NodeWrapper","ModuleWrapper","instanceIdentityCheck","isNodeInstance","moduleIdentityCheck","isNodeModule","requiredQueries","NodeAttachQuerySchema","attach","id","external","queryPayload","schema","payloads","sendQuery","filter","isPayloadOfSchemaType","AddressSchema","pop","address","attachQuery","account","sendQueryRaw","attached","NodeAttachedQuerySchema","map","p","attachedQuery","certify","NodeCertifyQuerySchema","ChildCertificationSchema","certifyQuery","detach","NodeDetachQuerySchema","detachQuery","manifest","maxDepth","ModuleManifestQuerySchema","NodeManifestPayloadSchema","publicChildren","module","Promise","all","resolve","exists","registered","NodeRegisteredQuerySchema","registeredQuery"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/NodeWrapper.ts"],"sourcesContent":["export * from './NodeWrapper'\n","import { Address } from '@xylabs/hex'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { InstanceTypeCheck, ModuleIdentifier, ModuleManifestQuery, ModuleManifestQuerySchema, ModuleQueryResult } from '@xyo-network/module-model'\nimport { constructableModuleWrapper, ModuleWrapper } from '@xyo-network/module-wrapper'\nimport {\n ChildCertification,\n ChildCertificationFields,\n ChildCertificationSchema,\n isNodeInstance,\n isNodeModule,\n NodeAttachedQuery,\n NodeAttachedQuerySchema,\n NodeAttachQuery,\n NodeAttachQuerySchema,\n NodeCertifyQuery,\n NodeCertifyQuerySchema,\n NodeDetachQuery,\n NodeDetachQuerySchema,\n NodeInstance,\n NodeModule,\n NodeRegisteredQuery,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nconstructableModuleWrapper()\nexport class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>\n extends ModuleWrapper<TWrappedModule>\n implements NodeInstance<TWrappedModule['params']>\n{\n static override instanceIdentityCheck: InstanceTypeCheck<NodeInstance> = isNodeInstance\n static override moduleIdentityCheck = isNodeModule\n static override requiredQueries = [NodeAttachQuerySchema, ...ModuleWrapper.requiredQueries]\n\n protected _attached?: Address[]\n protected _attachedMutex = new Mutex()\n\n async attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async attached(): Promise<Address[]> {\n return await this._attachedMutex.runExclusive(async () => {\n if (this._attached === undefined) {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n this._attached = payloads.map((p) => p.address)\n }\n return this._attached\n })\n }\n\n async attachedQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async certify(id: ModuleIdentifier): Promise<ChildCertificationFields | undefined> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<ChildCertification>>(ChildCertificationSchema))\n return payloads.pop()\n }\n\n async certifyQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<ChildCertification>> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async detach(id: ModuleIdentifier): Promise<Address | undefined> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n override async manifest(maxDepth?: number): Promise<NodeManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth ? { maxDepth } : {}) }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n return payloads.pop() as NodeManifestPayload\n }\n\n async registered(): Promise<Address[]> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;ACEA,oCAA8C;AAC9C,4BAA+D;AAC/D,0BAAuH;AACvH,4BAA0D;AAC1D,wBAkBO;AACP,2BAAgD;AAChD,yBAAsB;IAEtBA,kDAAAA;AACO,IAAMC,cAAN,cACGC,oCAAAA;EA5BV,OA4BUA;;;EAGR,OAAgBC,wBAAyDC;EACzE,OAAgBC,sBAAsBC;EACtC,OAAgBC,kBAAkB;IAACC;OAA0BN,oCAAcK;;EAEjEE;EACAC,iBAAiB,IAAIC,yBAAAA;EAE/B,MAAMC,OAAOC,IAAsBC,UAAkD;AACnF,UAAMC,eAAgC;MAAED;MAAUD;MAAIG,QAAQR;IAAsB;AACpF,UAAMS,YAAY,MAAM,KAAKC,UAAUH,YAAAA,GAAeI,WAAOC,4CAAgDC,2CAAAA,CAAAA;AAC7G,WAAOJ,SAASK,IAAG,GAAIC;EACzB;EAEA,MAAMC,YAAYX,IAAsBC,UAAoBW,SAAuE;AACjI,UAAMV,eAAgC;MAAED;MAAUD;MAAIG,QAAQR;IAAsB;AACpF,WAAO,MAAM,KAAKkB,aAAaX,cAAc,CAAA,GAAIU,OAAAA;EACnD;EAEA,MAAME,WAA+B;AACnC,WAAO,MAAM,KAAKjB,eAAekB,aAAa,YAAA;AAC5C,UAAI,KAAKnB,cAAcoB,QAAW;AAChC,cAAMd,eAAkC;UAAEC,QAAQc;QAAwB;AAC1E,cAAMb,YAAY,MAAM,KAAKC,UAAUH,YAAAA,GAAeI,WAAOC,4CAAgDC,2CAAAA,CAAAA;AAC7G,aAAKZ,YAAYQ,SAASc,IAAI,CAACC,MAAMA,EAAET,OAAO;MAChD;AACA,aAAO,KAAKd;IACd,CAAA;EACF;EAEA,MAAMwB,cAAcR,SAAuE;AACzF,UAAMV,eAAkC;MAAEC,QAAQc;IAAwB;AAC1E,WAAO,MAAM,KAAKJ,aAAaX,cAAc,CAAA,GAAIU,OAAAA;EACnD;EAEA,MAAMS,QAAQrB,IAAqE;AACjF,UAAME,eAAiC;MAAEF;MAAIG,QAAQmB;IAAuB;AAC5E,UAAMlB,YAAY,MAAM,KAAKC,UAAUH,YAAAA,GAAeI,WAAOC,4CAAoDgB,0CAAAA,CAAAA;AACjH,WAAOnB,SAASK,IAAG;EACrB;EAEA,MAAMe,aAAaxB,IAAsBY,SAA2E;AAClH,UAAMV,eAAiC;MAAEF;MAAIG,QAAQmB;IAAuB;AAC5E,WAAO,MAAM,KAAKT,aAAaX,cAAc,CAAA,GAAIU,OAAAA;EACnD;EAEA,MAAMa,OAAOzB,IAAoD;AAC/D,UAAME,eAAgC;MAAEF;MAAIG,QAAQuB;IAAsB;AAC1E,UAAMtB,YAAY,MAAM,KAAKC,UAAUH,YAAAA,GAAeI,WAAOC,4CAAgDC,2CAAAA,CAAAA;AAC7G,WAAOJ,SAASK,IAAG,GAAIC;EACzB;EAEA,MAAMiB,YAAY3B,IAAsBY,SAAuE;AAC7G,UAAMV,eAAgC;MAAEF;MAAIG,QAAQuB;IAAsB;AAC1E,WAAO,MAAM,KAAKb,aAAaX,cAAc,CAAA,GAAIU,OAAAA;EACnD;EAEA,MAAegB,SAASC,UAAiD;AACvE,UAAM3B,eAAoC;MAAEC,QAAQ2B;MAA2B,GAAID,WAAW;QAAEA;MAAS,IAAI,CAAC;IAAG;AACjH,UAAMzB,YAAY,MAAM,KAAKC,UAAUH,YAAAA,GAAeI,WAAOC,4CAAqDwB,+CAAAA,CAAAA;AAClH,WAAO3B,SAASK,IAAG;EACrB;EAEA,MAAMuB,aAAiC;AACrC,UAAM9B,eAAoC;MAAEC,QAAQ8B;IAA0B;AAC9E,UAAM7B,YAAY,MAAM,KAAKC,UAAUH,YAAAA,GAAeI,WAAOC,4CAAgDC,2CAAAA,CAAAA;AAC7G,WAAOJ,SAASc,IAAI,CAACC,MAAMA,EAAET,OAAO;EACtC;EAEA,MAAMwB,gBAAgBtB,SAAuE;AAC3F,UAAMV,eAAoC;MAAEC,QAAQ8B;IAA0B;AAC9E,WAAO,MAAM,KAAKpB,aAAaX,cAAc,CAAA,GAAIU,OAAAA;EACnD;AACF;","names":["constructableModuleWrapper","NodeWrapper","ModuleWrapper","instanceIdentityCheck","isNodeInstance","moduleIdentityCheck","isNodeModule","requiredQueries","NodeAttachQuerySchema","_attached","_attachedMutex","Mutex","attach","id","external","queryPayload","schema","payloads","sendQuery","filter","isPayloadOfSchemaType","AddressSchema","pop","address","attachQuery","account","sendQueryRaw","attached","runExclusive","undefined","NodeAttachedQuerySchema","map","p","attachedQuery","certify","NodeCertifyQuerySchema","ChildCertificationSchema","certifyQuery","detach","NodeDetachQuerySchema","detachQuery","manifest","maxDepth","ModuleManifestQuerySchema","NodeManifestPayloadSchema","registered","NodeRegisteredQuerySchema","registeredQuery"]}
@@ -2,13 +2,13 @@ var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
4
  // src/NodeWrapper.ts
5
- import { exists } from "@xylabs/exists";
6
5
  import { AddressSchema } from "@xyo-network/address-payload-plugin";
7
6
  import { NodeManifestPayloadSchema } from "@xyo-network/manifest-model";
8
7
  import { ModuleManifestQuerySchema } from "@xyo-network/module-model";
9
8
  import { constructableModuleWrapper, ModuleWrapper } from "@xyo-network/module-wrapper";
10
9
  import { ChildCertificationSchema, isNodeInstance, isNodeModule, NodeAttachedQuerySchema, NodeAttachQuerySchema, NodeCertifyQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema } from "@xyo-network/node-model";
11
10
  import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
11
+ import { Mutex } from "async-mutex";
12
12
  constructableModuleWrapper();
13
13
  var NodeWrapper = class extends ModuleWrapper {
14
14
  static {
@@ -20,6 +20,8 @@ var NodeWrapper = class extends ModuleWrapper {
20
20
  NodeAttachQuerySchema,
21
21
  ...ModuleWrapper.requiredQueries
22
22
  ];
23
+ _attached;
24
+ _attachedMutex = new Mutex();
23
25
  async attach(id, external) {
24
26
  const queryPayload = {
25
27
  external,
@@ -38,11 +40,16 @@ var NodeWrapper = class extends ModuleWrapper {
38
40
  return await this.sendQueryRaw(queryPayload, [], account);
39
41
  }
40
42
  async attached() {
41
- const queryPayload = {
42
- schema: NodeAttachedQuerySchema
43
- };
44
- const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType(AddressSchema));
45
- return payloads.map((p) => p.address);
43
+ return await this._attachedMutex.runExclusive(async () => {
44
+ if (this._attached === void 0) {
45
+ const queryPayload = {
46
+ schema: NodeAttachedQuerySchema
47
+ };
48
+ const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType(AddressSchema));
49
+ this._attached = payloads.map((p) => p.address);
50
+ }
51
+ return this._attached;
52
+ });
46
53
  }
47
54
  async attachedQuery(account) {
48
55
  const queryPayload = {
@@ -90,13 +97,6 @@ var NodeWrapper = class extends ModuleWrapper {
90
97
  const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType(NodeManifestPayloadSchema));
91
98
  return payloads.pop();
92
99
  }
93
- async publicChildren() {
94
- if (isNodeInstance(this.module)) {
95
- return await this.module.publicChildren();
96
- }
97
- const attached = await this.attached();
98
- return (await Promise.all(attached.map((address) => this.resolve(address)))).filter(exists);
99
- }
100
100
  async registered() {
101
101
  const queryPayload = {
102
102
  schema: NodeRegisteredQuerySchema
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/NodeWrapper.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport {\n InstanceTypeCheck,\n ModuleIdentifier,\n ModuleInstance,\n ModuleManifestQuery,\n ModuleManifestQuerySchema,\n ModuleQueryResult,\n} from '@xyo-network/module-model'\nimport { constructableModuleWrapper, ModuleWrapper } from '@xyo-network/module-wrapper'\nimport {\n ChildCertification,\n ChildCertificationFields,\n ChildCertificationSchema,\n isNodeInstance,\n isNodeModule,\n NodeAttachedQuery,\n NodeAttachedQuerySchema,\n NodeAttachQuery,\n NodeAttachQuerySchema,\n NodeCertifyQuery,\n NodeCertifyQuerySchema,\n NodeDetachQuery,\n NodeDetachQuerySchema,\n NodeInstance,\n NodeModule,\n NodeRegisteredQuery,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, WithMeta } from '@xyo-network/payload-model'\n\nconstructableModuleWrapper()\nexport class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>\n extends ModuleWrapper<TWrappedModule>\n implements NodeInstance<TWrappedModule['params']>\n{\n static override instanceIdentityCheck: InstanceTypeCheck<NodeInstance> = isNodeInstance\n static override moduleIdentityCheck = isNodeModule\n static override requiredQueries = [NodeAttachQuerySchema, ...ModuleWrapper.requiredQueries]\n\n async attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async attached(): Promise<Address[]> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async attachedQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async certify(id: ModuleIdentifier): Promise<ChildCertificationFields | undefined> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<ChildCertification>>(ChildCertificationSchema))\n return payloads.pop()\n }\n\n async certifyQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<ChildCertification>> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async detach(id: ModuleIdentifier): Promise<Address | undefined> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n override async manifest(maxDepth?: number): Promise<NodeManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth ? { maxDepth } : {}) }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n return payloads.pop() as NodeManifestPayload\n }\n\n override async publicChildren(): Promise<ModuleInstance[]> {\n if (isNodeInstance(this.module)) {\n return await this.module.publicChildren()\n }\n const attached = await this.attached()\n return (await Promise.all(attached.map((address) => this.resolve(address)))).filter(exists)\n }\n\n async registered(): Promise<Address[]> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n}\n"],"mappings":"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","names":["exists","AddressSchema","NodeManifestPayloadSchema","ModuleManifestQuerySchema","constructableModuleWrapper","ModuleWrapper","ChildCertificationSchema","isNodeInstance","isNodeModule","NodeAttachedQuerySchema","NodeAttachQuerySchema","NodeCertifyQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","isPayloadOfSchemaType","constructableModuleWrapper","NodeWrapper","ModuleWrapper","instanceIdentityCheck","isNodeInstance","moduleIdentityCheck","isNodeModule","requiredQueries","NodeAttachQuerySchema","attach","id","external","queryPayload","schema","payloads","sendQuery","filter","isPayloadOfSchemaType","AddressSchema","pop","address","attachQuery","account","sendQueryRaw","attached","NodeAttachedQuerySchema","map","p","attachedQuery","certify","NodeCertifyQuerySchema","ChildCertificationSchema","certifyQuery","detach","NodeDetachQuerySchema","detachQuery","manifest","maxDepth","ModuleManifestQuerySchema","NodeManifestPayloadSchema","publicChildren","module","Promise","all","resolve","exists","registered","NodeRegisteredQuerySchema","registeredQuery"]}
1
+ {"version":3,"sources":["../../src/NodeWrapper.ts"],"sourcesContent":["import { Address } from '@xylabs/hex'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { InstanceTypeCheck, ModuleIdentifier, ModuleManifestQuery, ModuleManifestQuerySchema, ModuleQueryResult } from '@xyo-network/module-model'\nimport { constructableModuleWrapper, ModuleWrapper } from '@xyo-network/module-wrapper'\nimport {\n ChildCertification,\n ChildCertificationFields,\n ChildCertificationSchema,\n isNodeInstance,\n isNodeModule,\n NodeAttachedQuery,\n NodeAttachedQuerySchema,\n NodeAttachQuery,\n NodeAttachQuerySchema,\n NodeCertifyQuery,\n NodeCertifyQuerySchema,\n NodeDetachQuery,\n NodeDetachQuerySchema,\n NodeInstance,\n NodeModule,\n NodeRegisteredQuery,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nconstructableModuleWrapper()\nexport class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>\n extends ModuleWrapper<TWrappedModule>\n implements NodeInstance<TWrappedModule['params']>\n{\n static override instanceIdentityCheck: InstanceTypeCheck<NodeInstance> = isNodeInstance\n static override moduleIdentityCheck = isNodeModule\n static override requiredQueries = [NodeAttachQuerySchema, ...ModuleWrapper.requiredQueries]\n\n protected _attached?: Address[]\n protected _attachedMutex = new Mutex()\n\n async attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async attached(): Promise<Address[]> {\n return await this._attachedMutex.runExclusive(async () => {\n if (this._attached === undefined) {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n this._attached = payloads.map((p) => p.address)\n }\n return this._attached\n })\n }\n\n async attachedQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async certify(id: ModuleIdentifier): Promise<ChildCertificationFields | undefined> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<ChildCertification>>(ChildCertificationSchema))\n return payloads.pop()\n }\n\n async certifyQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<ChildCertification>> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async detach(id: ModuleIdentifier): Promise<Address | undefined> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n override async manifest(maxDepth?: number): Promise<NodeManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth ? { maxDepth } : {}) }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n return payloads.pop() as NodeManifestPayload\n }\n\n async registered(): Promise<Address[]> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n}\n"],"mappings":"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","names":["AddressSchema","NodeManifestPayloadSchema","ModuleManifestQuerySchema","constructableModuleWrapper","ModuleWrapper","ChildCertificationSchema","isNodeInstance","isNodeModule","NodeAttachedQuerySchema","NodeAttachQuerySchema","NodeCertifyQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","isPayloadOfSchemaType","Mutex","constructableModuleWrapper","NodeWrapper","ModuleWrapper","instanceIdentityCheck","isNodeInstance","moduleIdentityCheck","isNodeModule","requiredQueries","NodeAttachQuerySchema","_attached","_attachedMutex","Mutex","attach","id","external","queryPayload","schema","payloads","sendQuery","filter","isPayloadOfSchemaType","AddressSchema","pop","address","attachQuery","account","sendQueryRaw","attached","runExclusive","undefined","NodeAttachedQuerySchema","map","p","attachedQuery","certify","NodeCertifyQuerySchema","ChildCertificationSchema","certifyQuery","detach","NodeDetachQuerySchema","detachQuery","manifest","maxDepth","ModuleManifestQuerySchema","NodeManifestPayloadSchema","registered","NodeRegisteredQuerySchema","registeredQuery"]}
@@ -2,9 +2,10 @@ import { Address } from '@xylabs/hex';
2
2
  import { AccountInstance } from '@xyo-network/account-model';
3
3
  import { AddressPayload } from '@xyo-network/address-payload-plugin';
4
4
  import { NodeManifestPayload } from '@xyo-network/manifest-model';
5
- import { InstanceTypeCheck, ModuleIdentifier, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model';
5
+ import { InstanceTypeCheck, ModuleIdentifier, ModuleQueryResult } from '@xyo-network/module-model';
6
6
  import { ModuleWrapper } from '@xyo-network/module-wrapper';
7
7
  import { ChildCertification, ChildCertificationFields, NodeInstance, NodeModule } from '@xyo-network/node-model';
8
+ import { Mutex } from 'async-mutex';
8
9
  export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule> extends ModuleWrapper<TWrappedModule> implements NodeInstance<TWrappedModule['params']> {
9
10
  static instanceIdentityCheck: InstanceTypeCheck<NodeInstance>;
10
11
  static moduleIdentityCheck: import("@xyo-network/module-model").ModuleTypeCheck<NodeModule<import("@xylabs/object").BaseParamsFields & {
@@ -22,6 +23,8 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
22
23
  moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[] | undefined;
23
24
  }, import("@xyo-network/node-model").NodeModuleEventData>>;
24
25
  static requiredQueries: string[];
26
+ protected _attached?: Address[];
27
+ protected _attachedMutex: Mutex;
25
28
  attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined>;
26
29
  attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
27
30
  attached(): Promise<Address[]>;
@@ -31,7 +34,6 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
31
34
  detach(id: ModuleIdentifier): Promise<Address | undefined>;
32
35
  detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
33
36
  manifest(maxDepth?: number): Promise<NodeManifestPayload>;
34
- publicChildren(): Promise<ModuleInstance[]>;
35
37
  registered(): Promise<Address[]>;
36
38
  registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EAGd,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAIhC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAErF,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAM9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMzD,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAQpD,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
1
+ {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAkD,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClJ,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAE3F,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;IAC/B,SAAS,CAAC,cAAc,QAAc;IAEhC,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAW9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMlE,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
@@ -2,9 +2,10 @@ import { Address } from '@xylabs/hex';
2
2
  import { AccountInstance } from '@xyo-network/account-model';
3
3
  import { AddressPayload } from '@xyo-network/address-payload-plugin';
4
4
  import { NodeManifestPayload } from '@xyo-network/manifest-model';
5
- import { InstanceTypeCheck, ModuleIdentifier, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model';
5
+ import { InstanceTypeCheck, ModuleIdentifier, ModuleQueryResult } from '@xyo-network/module-model';
6
6
  import { ModuleWrapper } from '@xyo-network/module-wrapper';
7
7
  import { ChildCertification, ChildCertificationFields, NodeInstance, NodeModule } from '@xyo-network/node-model';
8
+ import { Mutex } from 'async-mutex';
8
9
  export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule> extends ModuleWrapper<TWrappedModule> implements NodeInstance<TWrappedModule['params']> {
9
10
  static instanceIdentityCheck: InstanceTypeCheck<NodeInstance>;
10
11
  static moduleIdentityCheck: import("@xyo-network/module-model").ModuleTypeCheck<NodeModule<import("@xylabs/object").BaseParamsFields & {
@@ -22,6 +23,8 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
22
23
  moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[] | undefined;
23
24
  }, import("@xyo-network/node-model").NodeModuleEventData>>;
24
25
  static requiredQueries: string[];
26
+ protected _attached?: Address[];
27
+ protected _attachedMutex: Mutex;
25
28
  attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined>;
26
29
  attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
27
30
  attached(): Promise<Address[]>;
@@ -31,7 +34,6 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
31
34
  detach(id: ModuleIdentifier): Promise<Address | undefined>;
32
35
  detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
33
36
  manifest(maxDepth?: number): Promise<NodeManifestPayload>;
34
- publicChildren(): Promise<ModuleInstance[]>;
35
37
  registered(): Promise<Address[]>;
36
38
  registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EAGd,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAIhC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAErF,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAM9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMzD,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAQpD,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
1
+ {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAkD,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClJ,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAE3F,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;IAC/B,SAAS,CAAC,cAAc,QAAc;IAEhC,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAW9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMlE,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
@@ -2,9 +2,10 @@ import { Address } from '@xylabs/hex';
2
2
  import { AccountInstance } from '@xyo-network/account-model';
3
3
  import { AddressPayload } from '@xyo-network/address-payload-plugin';
4
4
  import { NodeManifestPayload } from '@xyo-network/manifest-model';
5
- import { InstanceTypeCheck, ModuleIdentifier, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model';
5
+ import { InstanceTypeCheck, ModuleIdentifier, ModuleQueryResult } from '@xyo-network/module-model';
6
6
  import { ModuleWrapper } from '@xyo-network/module-wrapper';
7
7
  import { ChildCertification, ChildCertificationFields, NodeInstance, NodeModule } from '@xyo-network/node-model';
8
+ import { Mutex } from 'async-mutex';
8
9
  export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule> extends ModuleWrapper<TWrappedModule> implements NodeInstance<TWrappedModule['params']> {
9
10
  static instanceIdentityCheck: InstanceTypeCheck<NodeInstance>;
10
11
  static moduleIdentityCheck: import("@xyo-network/module-model").ModuleTypeCheck<NodeModule<import("@xylabs/object").BaseParamsFields & {
@@ -22,6 +23,8 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
22
23
  moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[] | undefined;
23
24
  }, import("@xyo-network/node-model").NodeModuleEventData>>;
24
25
  static requiredQueries: string[];
26
+ protected _attached?: Address[];
27
+ protected _attachedMutex: Mutex;
25
28
  attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined>;
26
29
  attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
27
30
  attached(): Promise<Address[]>;
@@ -31,7 +34,6 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
31
34
  detach(id: ModuleIdentifier): Promise<Address | undefined>;
32
35
  detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
33
36
  manifest(maxDepth?: number): Promise<NodeManifestPayload>;
34
- publicChildren(): Promise<ModuleInstance[]>;
35
37
  registered(): Promise<Address[]>;
36
38
  registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EAGd,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAIhC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAErF,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAM9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMzD,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAQpD,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
1
+ {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAkD,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClJ,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAE3F,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;IAC/B,SAAS,CAAC,cAAc,QAAc;IAEhC,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAW9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMlE,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
@@ -26,13 +26,13 @@ __export(src_exports, {
26
26
  module.exports = __toCommonJS(src_exports);
27
27
 
28
28
  // src/NodeWrapper.ts
29
- var import_exists = require("@xylabs/exists");
30
29
  var import_address_payload_plugin = require("@xyo-network/address-payload-plugin");
31
30
  var import_manifest_model = require("@xyo-network/manifest-model");
32
31
  var import_module_model = require("@xyo-network/module-model");
33
32
  var import_module_wrapper = require("@xyo-network/module-wrapper");
34
33
  var import_node_model = require("@xyo-network/node-model");
35
34
  var import_payload_model = require("@xyo-network/payload-model");
35
+ var import_async_mutex = require("async-mutex");
36
36
  (0, import_module_wrapper.constructableModuleWrapper)();
37
37
  var NodeWrapper = class extends import_module_wrapper.ModuleWrapper {
38
38
  static {
@@ -44,6 +44,8 @@ var NodeWrapper = class extends import_module_wrapper.ModuleWrapper {
44
44
  import_node_model.NodeAttachQuerySchema,
45
45
  ...import_module_wrapper.ModuleWrapper.requiredQueries
46
46
  ];
47
+ _attached;
48
+ _attachedMutex = new import_async_mutex.Mutex();
47
49
  async attach(id, external) {
48
50
  const queryPayload = {
49
51
  external,
@@ -62,11 +64,16 @@ var NodeWrapper = class extends import_module_wrapper.ModuleWrapper {
62
64
  return await this.sendQueryRaw(queryPayload, [], account);
63
65
  }
64
66
  async attached() {
65
- const queryPayload = {
66
- schema: import_node_model.NodeAttachedQuerySchema
67
- };
68
- const payloads = (await this.sendQuery(queryPayload)).filter((0, import_payload_model.isPayloadOfSchemaType)(import_address_payload_plugin.AddressSchema));
69
- return payloads.map((p) => p.address);
67
+ return await this._attachedMutex.runExclusive(async () => {
68
+ if (this._attached === void 0) {
69
+ const queryPayload = {
70
+ schema: import_node_model.NodeAttachedQuerySchema
71
+ };
72
+ const payloads = (await this.sendQuery(queryPayload)).filter((0, import_payload_model.isPayloadOfSchemaType)(import_address_payload_plugin.AddressSchema));
73
+ this._attached = payloads.map((p) => p.address);
74
+ }
75
+ return this._attached;
76
+ });
70
77
  }
71
78
  async attachedQuery(account) {
72
79
  const queryPayload = {
@@ -114,13 +121,6 @@ var NodeWrapper = class extends import_module_wrapper.ModuleWrapper {
114
121
  const payloads = (await this.sendQuery(queryPayload)).filter((0, import_payload_model.isPayloadOfSchemaType)(import_manifest_model.NodeManifestPayloadSchema));
115
122
  return payloads.pop();
116
123
  }
117
- async publicChildren() {
118
- if ((0, import_node_model.isNodeInstance)(this.module)) {
119
- return await this.module.publicChildren();
120
- }
121
- const attached = await this.attached();
122
- return (await Promise.all(attached.map((address) => this.resolve(address)))).filter(import_exists.exists);
123
- }
124
124
  async registered() {
125
125
  const queryPayload = {
126
126
  schema: import_node_model.NodeRegisteredQuerySchema
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/NodeWrapper.ts"],"sourcesContent":["export * from './NodeWrapper'\n","import { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport {\n InstanceTypeCheck,\n ModuleIdentifier,\n ModuleInstance,\n ModuleManifestQuery,\n ModuleManifestQuerySchema,\n ModuleQueryResult,\n} from '@xyo-network/module-model'\nimport { constructableModuleWrapper, ModuleWrapper } from '@xyo-network/module-wrapper'\nimport {\n ChildCertification,\n ChildCertificationFields,\n ChildCertificationSchema,\n isNodeInstance,\n isNodeModule,\n NodeAttachedQuery,\n NodeAttachedQuerySchema,\n NodeAttachQuery,\n NodeAttachQuerySchema,\n NodeCertifyQuery,\n NodeCertifyQuerySchema,\n NodeDetachQuery,\n NodeDetachQuerySchema,\n NodeInstance,\n NodeModule,\n NodeRegisteredQuery,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, WithMeta } from '@xyo-network/payload-model'\n\nconstructableModuleWrapper()\nexport class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>\n extends ModuleWrapper<TWrappedModule>\n implements NodeInstance<TWrappedModule['params']>\n{\n static override instanceIdentityCheck: InstanceTypeCheck<NodeInstance> = isNodeInstance\n static override moduleIdentityCheck = isNodeModule\n static override requiredQueries = [NodeAttachQuerySchema, ...ModuleWrapper.requiredQueries]\n\n async attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async attached(): Promise<Address[]> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async attachedQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async certify(id: ModuleIdentifier): Promise<ChildCertificationFields | undefined> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<ChildCertification>>(ChildCertificationSchema))\n return payloads.pop()\n }\n\n async certifyQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<ChildCertification>> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async detach(id: ModuleIdentifier): Promise<Address | undefined> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n override async manifest(maxDepth?: number): Promise<NodeManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth ? { maxDepth } : {}) }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n return payloads.pop() as NodeManifestPayload\n }\n\n override async publicChildren(): Promise<ModuleInstance[]> {\n if (isNodeInstance(this.module)) {\n return await this.module.publicChildren()\n }\n const attached = await this.attached()\n return (await Promise.all(attached.map((address) => this.resolve(address)))).filter(exists)\n }\n\n async registered(): Promise<Address[]> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n}\n"],"mappings":"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","names":["constructableModuleWrapper","NodeWrapper","ModuleWrapper","instanceIdentityCheck","isNodeInstance","moduleIdentityCheck","isNodeModule","requiredQueries","NodeAttachQuerySchema","attach","id","external","queryPayload","schema","payloads","sendQuery","filter","isPayloadOfSchemaType","AddressSchema","pop","address","attachQuery","account","sendQueryRaw","attached","NodeAttachedQuerySchema","map","p","attachedQuery","certify","NodeCertifyQuerySchema","ChildCertificationSchema","certifyQuery","detach","NodeDetachQuerySchema","detachQuery","manifest","maxDepth","ModuleManifestQuerySchema","NodeManifestPayloadSchema","publicChildren","module","Promise","all","resolve","exists","registered","NodeRegisteredQuerySchema","registeredQuery"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/NodeWrapper.ts"],"sourcesContent":["export * from './NodeWrapper'\n","import { Address } from '@xylabs/hex'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { InstanceTypeCheck, ModuleIdentifier, ModuleManifestQuery, ModuleManifestQuerySchema, ModuleQueryResult } from '@xyo-network/module-model'\nimport { constructableModuleWrapper, ModuleWrapper } from '@xyo-network/module-wrapper'\nimport {\n ChildCertification,\n ChildCertificationFields,\n ChildCertificationSchema,\n isNodeInstance,\n isNodeModule,\n NodeAttachedQuery,\n NodeAttachedQuerySchema,\n NodeAttachQuery,\n NodeAttachQuerySchema,\n NodeCertifyQuery,\n NodeCertifyQuerySchema,\n NodeDetachQuery,\n NodeDetachQuerySchema,\n NodeInstance,\n NodeModule,\n NodeRegisteredQuery,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nconstructableModuleWrapper()\nexport class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>\n extends ModuleWrapper<TWrappedModule>\n implements NodeInstance<TWrappedModule['params']>\n{\n static override instanceIdentityCheck: InstanceTypeCheck<NodeInstance> = isNodeInstance\n static override moduleIdentityCheck = isNodeModule\n static override requiredQueries = [NodeAttachQuerySchema, ...ModuleWrapper.requiredQueries]\n\n protected _attached?: Address[]\n protected _attachedMutex = new Mutex()\n\n async attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async attached(): Promise<Address[]> {\n return await this._attachedMutex.runExclusive(async () => {\n if (this._attached === undefined) {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n this._attached = payloads.map((p) => p.address)\n }\n return this._attached\n })\n }\n\n async attachedQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async certify(id: ModuleIdentifier): Promise<ChildCertificationFields | undefined> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<ChildCertification>>(ChildCertificationSchema))\n return payloads.pop()\n }\n\n async certifyQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<ChildCertification>> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async detach(id: ModuleIdentifier): Promise<Address | undefined> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n override async manifest(maxDepth?: number): Promise<NodeManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth ? { maxDepth } : {}) }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n return payloads.pop() as NodeManifestPayload\n }\n\n async registered(): Promise<Address[]> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n}\n"],"mappings":"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","names":["constructableModuleWrapper","NodeWrapper","ModuleWrapper","instanceIdentityCheck","isNodeInstance","moduleIdentityCheck","isNodeModule","requiredQueries","NodeAttachQuerySchema","_attached","_attachedMutex","Mutex","attach","id","external","queryPayload","schema","payloads","sendQuery","filter","isPayloadOfSchemaType","AddressSchema","pop","address","attachQuery","account","sendQueryRaw","attached","runExclusive","undefined","NodeAttachedQuerySchema","map","p","attachedQuery","certify","NodeCertifyQuerySchema","ChildCertificationSchema","certifyQuery","detach","NodeDetachQuerySchema","detachQuery","manifest","maxDepth","ModuleManifestQuerySchema","NodeManifestPayloadSchema","registered","NodeRegisteredQuerySchema","registeredQuery"]}
@@ -2,13 +2,13 @@ var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
4
  // src/NodeWrapper.ts
5
- import { exists } from "@xylabs/exists";
6
5
  import { AddressSchema } from "@xyo-network/address-payload-plugin";
7
6
  import { NodeManifestPayloadSchema } from "@xyo-network/manifest-model";
8
7
  import { ModuleManifestQuerySchema } from "@xyo-network/module-model";
9
8
  import { constructableModuleWrapper, ModuleWrapper } from "@xyo-network/module-wrapper";
10
9
  import { ChildCertificationSchema, isNodeInstance, isNodeModule, NodeAttachedQuerySchema, NodeAttachQuerySchema, NodeCertifyQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema } from "@xyo-network/node-model";
11
10
  import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
11
+ import { Mutex } from "async-mutex";
12
12
  constructableModuleWrapper();
13
13
  var NodeWrapper = class extends ModuleWrapper {
14
14
  static {
@@ -20,6 +20,8 @@ var NodeWrapper = class extends ModuleWrapper {
20
20
  NodeAttachQuerySchema,
21
21
  ...ModuleWrapper.requiredQueries
22
22
  ];
23
+ _attached;
24
+ _attachedMutex = new Mutex();
23
25
  async attach(id, external) {
24
26
  const queryPayload = {
25
27
  external,
@@ -38,11 +40,16 @@ var NodeWrapper = class extends ModuleWrapper {
38
40
  return await this.sendQueryRaw(queryPayload, [], account);
39
41
  }
40
42
  async attached() {
41
- const queryPayload = {
42
- schema: NodeAttachedQuerySchema
43
- };
44
- const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType(AddressSchema));
45
- return payloads.map((p) => p.address);
43
+ return await this._attachedMutex.runExclusive(async () => {
44
+ if (this._attached === void 0) {
45
+ const queryPayload = {
46
+ schema: NodeAttachedQuerySchema
47
+ };
48
+ const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType(AddressSchema));
49
+ this._attached = payloads.map((p) => p.address);
50
+ }
51
+ return this._attached;
52
+ });
46
53
  }
47
54
  async attachedQuery(account) {
48
55
  const queryPayload = {
@@ -90,13 +97,6 @@ var NodeWrapper = class extends ModuleWrapper {
90
97
  const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType(NodeManifestPayloadSchema));
91
98
  return payloads.pop();
92
99
  }
93
- async publicChildren() {
94
- if (isNodeInstance(this.module)) {
95
- return await this.module.publicChildren();
96
- }
97
- const attached = await this.attached();
98
- return (await Promise.all(attached.map((address) => this.resolve(address)))).filter(exists);
99
- }
100
100
  async registered() {
101
101
  const queryPayload = {
102
102
  schema: NodeRegisteredQuerySchema
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/NodeWrapper.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport {\n InstanceTypeCheck,\n ModuleIdentifier,\n ModuleInstance,\n ModuleManifestQuery,\n ModuleManifestQuerySchema,\n ModuleQueryResult,\n} from '@xyo-network/module-model'\nimport { constructableModuleWrapper, ModuleWrapper } from '@xyo-network/module-wrapper'\nimport {\n ChildCertification,\n ChildCertificationFields,\n ChildCertificationSchema,\n isNodeInstance,\n isNodeModule,\n NodeAttachedQuery,\n NodeAttachedQuerySchema,\n NodeAttachQuery,\n NodeAttachQuerySchema,\n NodeCertifyQuery,\n NodeCertifyQuerySchema,\n NodeDetachQuery,\n NodeDetachQuerySchema,\n NodeInstance,\n NodeModule,\n NodeRegisteredQuery,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, WithMeta } from '@xyo-network/payload-model'\n\nconstructableModuleWrapper()\nexport class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>\n extends ModuleWrapper<TWrappedModule>\n implements NodeInstance<TWrappedModule['params']>\n{\n static override instanceIdentityCheck: InstanceTypeCheck<NodeInstance> = isNodeInstance\n static override moduleIdentityCheck = isNodeModule\n static override requiredQueries = [NodeAttachQuerySchema, ...ModuleWrapper.requiredQueries]\n\n async attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async attached(): Promise<Address[]> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async attachedQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async certify(id: ModuleIdentifier): Promise<ChildCertificationFields | undefined> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<ChildCertification>>(ChildCertificationSchema))\n return payloads.pop()\n }\n\n async certifyQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<ChildCertification>> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async detach(id: ModuleIdentifier): Promise<Address | undefined> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n override async manifest(maxDepth?: number): Promise<NodeManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth ? { maxDepth } : {}) }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n return payloads.pop() as NodeManifestPayload\n }\n\n override async publicChildren(): Promise<ModuleInstance[]> {\n if (isNodeInstance(this.module)) {\n return await this.module.publicChildren()\n }\n const attached = await this.attached()\n return (await Promise.all(attached.map((address) => this.resolve(address)))).filter(exists)\n }\n\n async registered(): Promise<Address[]> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n}\n"],"mappings":"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","names":["exists","AddressSchema","NodeManifestPayloadSchema","ModuleManifestQuerySchema","constructableModuleWrapper","ModuleWrapper","ChildCertificationSchema","isNodeInstance","isNodeModule","NodeAttachedQuerySchema","NodeAttachQuerySchema","NodeCertifyQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","isPayloadOfSchemaType","constructableModuleWrapper","NodeWrapper","ModuleWrapper","instanceIdentityCheck","isNodeInstance","moduleIdentityCheck","isNodeModule","requiredQueries","NodeAttachQuerySchema","attach","id","external","queryPayload","schema","payloads","sendQuery","filter","isPayloadOfSchemaType","AddressSchema","pop","address","attachQuery","account","sendQueryRaw","attached","NodeAttachedQuerySchema","map","p","attachedQuery","certify","NodeCertifyQuerySchema","ChildCertificationSchema","certifyQuery","detach","NodeDetachQuerySchema","detachQuery","manifest","maxDepth","ModuleManifestQuerySchema","NodeManifestPayloadSchema","publicChildren","module","Promise","all","resolve","exists","registered","NodeRegisteredQuerySchema","registeredQuery"]}
1
+ {"version":3,"sources":["../../src/NodeWrapper.ts"],"sourcesContent":["import { Address } from '@xylabs/hex'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { InstanceTypeCheck, ModuleIdentifier, ModuleManifestQuery, ModuleManifestQuerySchema, ModuleQueryResult } from '@xyo-network/module-model'\nimport { constructableModuleWrapper, ModuleWrapper } from '@xyo-network/module-wrapper'\nimport {\n ChildCertification,\n ChildCertificationFields,\n ChildCertificationSchema,\n isNodeInstance,\n isNodeModule,\n NodeAttachedQuery,\n NodeAttachedQuerySchema,\n NodeAttachQuery,\n NodeAttachQuerySchema,\n NodeCertifyQuery,\n NodeCertifyQuerySchema,\n NodeDetachQuery,\n NodeDetachQuerySchema,\n NodeInstance,\n NodeModule,\n NodeRegisteredQuery,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nconstructableModuleWrapper()\nexport class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>\n extends ModuleWrapper<TWrappedModule>\n implements NodeInstance<TWrappedModule['params']>\n{\n static override instanceIdentityCheck: InstanceTypeCheck<NodeInstance> = isNodeInstance\n static override moduleIdentityCheck = isNodeModule\n static override requiredQueries = [NodeAttachQuerySchema, ...ModuleWrapper.requiredQueries]\n\n protected _attached?: Address[]\n protected _attachedMutex = new Mutex()\n\n async attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async attached(): Promise<Address[]> {\n return await this._attachedMutex.runExclusive(async () => {\n if (this._attached === undefined) {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n this._attached = payloads.map((p) => p.address)\n }\n return this._attached\n })\n }\n\n async attachedQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async certify(id: ModuleIdentifier): Promise<ChildCertificationFields | undefined> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<ChildCertification>>(ChildCertificationSchema))\n return payloads.pop()\n }\n\n async certifyQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<ChildCertification>> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async detach(id: ModuleIdentifier): Promise<Address | undefined> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n override async manifest(maxDepth?: number): Promise<NodeManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth ? { maxDepth } : {}) }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n return payloads.pop() as NodeManifestPayload\n }\n\n async registered(): Promise<Address[]> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n}\n"],"mappings":"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","names":["AddressSchema","NodeManifestPayloadSchema","ModuleManifestQuerySchema","constructableModuleWrapper","ModuleWrapper","ChildCertificationSchema","isNodeInstance","isNodeModule","NodeAttachedQuerySchema","NodeAttachQuerySchema","NodeCertifyQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","isPayloadOfSchemaType","Mutex","constructableModuleWrapper","NodeWrapper","ModuleWrapper","instanceIdentityCheck","isNodeInstance","moduleIdentityCheck","isNodeModule","requiredQueries","NodeAttachQuerySchema","_attached","_attachedMutex","Mutex","attach","id","external","queryPayload","schema","payloads","sendQuery","filter","isPayloadOfSchemaType","AddressSchema","pop","address","attachQuery","account","sendQueryRaw","attached","runExclusive","undefined","NodeAttachedQuerySchema","map","p","attachedQuery","certify","NodeCertifyQuerySchema","ChildCertificationSchema","certifyQuery","detach","NodeDetachQuerySchema","detachQuery","manifest","maxDepth","ModuleManifestQuerySchema","NodeManifestPayloadSchema","registered","NodeRegisteredQuerySchema","registeredQuery"]}
@@ -2,9 +2,10 @@ import { Address } from '@xylabs/hex';
2
2
  import { AccountInstance } from '@xyo-network/account-model';
3
3
  import { AddressPayload } from '@xyo-network/address-payload-plugin';
4
4
  import { NodeManifestPayload } from '@xyo-network/manifest-model';
5
- import { InstanceTypeCheck, ModuleIdentifier, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model';
5
+ import { InstanceTypeCheck, ModuleIdentifier, ModuleQueryResult } from '@xyo-network/module-model';
6
6
  import { ModuleWrapper } from '@xyo-network/module-wrapper';
7
7
  import { ChildCertification, ChildCertificationFields, NodeInstance, NodeModule } from '@xyo-network/node-model';
8
+ import { Mutex } from 'async-mutex';
8
9
  export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule> extends ModuleWrapper<TWrappedModule> implements NodeInstance<TWrappedModule['params']> {
9
10
  static instanceIdentityCheck: InstanceTypeCheck<NodeInstance>;
10
11
  static moduleIdentityCheck: import("@xyo-network/module-model").ModuleTypeCheck<NodeModule<import("@xylabs/object").BaseParamsFields & {
@@ -22,6 +23,8 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
22
23
  moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[] | undefined;
23
24
  }, import("@xyo-network/node-model").NodeModuleEventData>>;
24
25
  static requiredQueries: string[];
26
+ protected _attached?: Address[];
27
+ protected _attachedMutex: Mutex;
25
28
  attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined>;
26
29
  attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
27
30
  attached(): Promise<Address[]>;
@@ -31,7 +34,6 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
31
34
  detach(id: ModuleIdentifier): Promise<Address | undefined>;
32
35
  detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
33
36
  manifest(maxDepth?: number): Promise<NodeManifestPayload>;
34
- publicChildren(): Promise<ModuleInstance[]>;
35
37
  registered(): Promise<Address[]>;
36
38
  registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EAGd,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAIhC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAErF,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAM9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMzD,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAQpD,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
1
+ {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAkD,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClJ,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAE3F,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;IAC/B,SAAS,CAAC,cAAc,QAAc;IAEhC,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAW9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMlE,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
@@ -2,9 +2,10 @@ import { Address } from '@xylabs/hex';
2
2
  import { AccountInstance } from '@xyo-network/account-model';
3
3
  import { AddressPayload } from '@xyo-network/address-payload-plugin';
4
4
  import { NodeManifestPayload } from '@xyo-network/manifest-model';
5
- import { InstanceTypeCheck, ModuleIdentifier, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model';
5
+ import { InstanceTypeCheck, ModuleIdentifier, ModuleQueryResult } from '@xyo-network/module-model';
6
6
  import { ModuleWrapper } from '@xyo-network/module-wrapper';
7
7
  import { ChildCertification, ChildCertificationFields, NodeInstance, NodeModule } from '@xyo-network/node-model';
8
+ import { Mutex } from 'async-mutex';
8
9
  export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule> extends ModuleWrapper<TWrappedModule> implements NodeInstance<TWrappedModule['params']> {
9
10
  static instanceIdentityCheck: InstanceTypeCheck<NodeInstance>;
10
11
  static moduleIdentityCheck: import("@xyo-network/module-model").ModuleTypeCheck<NodeModule<import("@xylabs/object").BaseParamsFields & {
@@ -22,6 +23,8 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
22
23
  moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[] | undefined;
23
24
  }, import("@xyo-network/node-model").NodeModuleEventData>>;
24
25
  static requiredQueries: string[];
26
+ protected _attached?: Address[];
27
+ protected _attachedMutex: Mutex;
25
28
  attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined>;
26
29
  attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
27
30
  attached(): Promise<Address[]>;
@@ -31,7 +34,6 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
31
34
  detach(id: ModuleIdentifier): Promise<Address | undefined>;
32
35
  detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
33
36
  manifest(maxDepth?: number): Promise<NodeManifestPayload>;
34
- publicChildren(): Promise<ModuleInstance[]>;
35
37
  registered(): Promise<Address[]>;
36
38
  registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EAGd,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAIhC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAErF,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAM9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMzD,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAQpD,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
1
+ {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAkD,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClJ,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAE3F,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;IAC/B,SAAS,CAAC,cAAc,QAAc;IAEhC,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAW9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMlE,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
@@ -2,9 +2,10 @@ import { Address } from '@xylabs/hex';
2
2
  import { AccountInstance } from '@xyo-network/account-model';
3
3
  import { AddressPayload } from '@xyo-network/address-payload-plugin';
4
4
  import { NodeManifestPayload } from '@xyo-network/manifest-model';
5
- import { InstanceTypeCheck, ModuleIdentifier, ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model';
5
+ import { InstanceTypeCheck, ModuleIdentifier, ModuleQueryResult } from '@xyo-network/module-model';
6
6
  import { ModuleWrapper } from '@xyo-network/module-wrapper';
7
7
  import { ChildCertification, ChildCertificationFields, NodeInstance, NodeModule } from '@xyo-network/node-model';
8
+ import { Mutex } from 'async-mutex';
8
9
  export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule> extends ModuleWrapper<TWrappedModule> implements NodeInstance<TWrappedModule['params']> {
9
10
  static instanceIdentityCheck: InstanceTypeCheck<NodeInstance>;
10
11
  static moduleIdentityCheck: import("@xyo-network/module-model").ModuleTypeCheck<NodeModule<import("@xylabs/object").BaseParamsFields & {
@@ -22,6 +23,8 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
22
23
  moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[] | undefined;
23
24
  }, import("@xyo-network/node-model").NodeModuleEventData>>;
24
25
  static requiredQueries: string[];
26
+ protected _attached?: Address[];
27
+ protected _attachedMutex: Mutex;
25
28
  attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined>;
26
29
  attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
27
30
  attached(): Promise<Address[]>;
@@ -31,7 +34,6 @@ export declare class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
31
34
  detach(id: ModuleIdentifier): Promise<Address | undefined>;
32
35
  detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
33
36
  manifest(maxDepth?: number): Promise<NodeManifestPayload>;
34
- publicChildren(): Promise<ModuleInstance[]>;
35
37
  registered(): Promise<Address[]>;
36
38
  registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>>;
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EAGd,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAIhC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAErF,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAM9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMzD,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAQpD,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
1
+ {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAiB,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAA;AAC5F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAkD,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClJ,OAAO,EAA8B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACvF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EAYxB,YAAY,EACZ,UAAU,EAGX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,qBAAa,WAAW,CAAC,cAAc,SAAS,UAAU,GAAG,UAAU,CACrE,SAAQ,aAAa,CAAC,cAAc,CACpC,YAAW,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAgB,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAiB;IACvF,OAAgB,mBAAmB;;;;;;;;;;;;;+DAAe;IAClD,OAAgB,eAAe,WAA4D;IAE3F,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;IAC/B,SAAS,CAAC,cAAc,QAAc;IAEhC,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM9E,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK5H,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAW9B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAKpF,OAAO,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAM5E,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAK7G,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM1D,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAK/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMlE,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMhC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAI7F"}
@@ -31,15 +31,17 @@ __export(src_exports, {
31
31
  module.exports = __toCommonJS(src_exports);
32
32
 
33
33
  // src/NodeWrapper.ts
34
- var import_exists = require("@xylabs/exists");
35
34
  var import_address_payload_plugin = require("@xyo-network/address-payload-plugin");
36
35
  var import_manifest_model = require("@xyo-network/manifest-model");
37
36
  var import_module_model = require("@xyo-network/module-model");
38
37
  var import_module_wrapper = require("@xyo-network/module-wrapper");
39
38
  var import_node_model = require("@xyo-network/node-model");
40
39
  var import_payload_model = require("@xyo-network/payload-model");
40
+ var import_async_mutex = require("async-mutex");
41
41
  (0, import_module_wrapper.constructableModuleWrapper)();
42
42
  var _NodeWrapper = class _NodeWrapper extends import_module_wrapper.ModuleWrapper {
43
+ _attached;
44
+ _attachedMutex = new import_async_mutex.Mutex();
43
45
  async attach(id, external) {
44
46
  var _a;
45
47
  const queryPayload = {
@@ -59,11 +61,16 @@ var _NodeWrapper = class _NodeWrapper extends import_module_wrapper.ModuleWrappe
59
61
  return await this.sendQueryRaw(queryPayload, [], account);
60
62
  }
61
63
  async attached() {
62
- const queryPayload = {
63
- schema: import_node_model.NodeAttachedQuerySchema
64
- };
65
- const payloads = (await this.sendQuery(queryPayload)).filter((0, import_payload_model.isPayloadOfSchemaType)(import_address_payload_plugin.AddressSchema));
66
- return payloads.map((p) => p.address);
64
+ return await this._attachedMutex.runExclusive(async () => {
65
+ if (this._attached === void 0) {
66
+ const queryPayload = {
67
+ schema: import_node_model.NodeAttachedQuerySchema
68
+ };
69
+ const payloads = (await this.sendQuery(queryPayload)).filter((0, import_payload_model.isPayloadOfSchemaType)(import_address_payload_plugin.AddressSchema));
70
+ this._attached = payloads.map((p) => p.address);
71
+ }
72
+ return this._attached;
73
+ });
67
74
  }
68
75
  async attachedQuery(account) {
69
76
  const queryPayload = {
@@ -112,13 +119,6 @@ var _NodeWrapper = class _NodeWrapper extends import_module_wrapper.ModuleWrappe
112
119
  const payloads = (await this.sendQuery(queryPayload)).filter((0, import_payload_model.isPayloadOfSchemaType)(import_manifest_model.NodeManifestPayloadSchema));
113
120
  return payloads.pop();
114
121
  }
115
- async publicChildren() {
116
- if ((0, import_node_model.isNodeInstance)(this.module)) {
117
- return await this.module.publicChildren();
118
- }
119
- const attached = await this.attached();
120
- return (await Promise.all(attached.map((address) => this.resolve(address)))).filter(import_exists.exists);
121
- }
122
122
  async registered() {
123
123
  const queryPayload = {
124
124
  schema: import_node_model.NodeRegisteredQuerySchema
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/NodeWrapper.ts"],"sourcesContent":["export * from './NodeWrapper'\n","import { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport {\n InstanceTypeCheck,\n ModuleIdentifier,\n ModuleInstance,\n ModuleManifestQuery,\n ModuleManifestQuerySchema,\n ModuleQueryResult,\n} from '@xyo-network/module-model'\nimport { constructableModuleWrapper, ModuleWrapper } from '@xyo-network/module-wrapper'\nimport {\n ChildCertification,\n ChildCertificationFields,\n ChildCertificationSchema,\n isNodeInstance,\n isNodeModule,\n NodeAttachedQuery,\n NodeAttachedQuerySchema,\n NodeAttachQuery,\n NodeAttachQuerySchema,\n NodeCertifyQuery,\n NodeCertifyQuerySchema,\n NodeDetachQuery,\n NodeDetachQuerySchema,\n NodeInstance,\n NodeModule,\n NodeRegisteredQuery,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, WithMeta } from '@xyo-network/payload-model'\n\nconstructableModuleWrapper()\nexport class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>\n extends ModuleWrapper<TWrappedModule>\n implements NodeInstance<TWrappedModule['params']>\n{\n static override instanceIdentityCheck: InstanceTypeCheck<NodeInstance> = isNodeInstance\n static override moduleIdentityCheck = isNodeModule\n static override requiredQueries = [NodeAttachQuerySchema, ...ModuleWrapper.requiredQueries]\n\n async attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async attached(): Promise<Address[]> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async attachedQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async certify(id: ModuleIdentifier): Promise<ChildCertificationFields | undefined> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<ChildCertification>>(ChildCertificationSchema))\n return payloads.pop()\n }\n\n async certifyQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<ChildCertification>> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async detach(id: ModuleIdentifier): Promise<Address | undefined> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n override async manifest(maxDepth?: number): Promise<NodeManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth ? { maxDepth } : {}) }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n return payloads.pop() as NodeManifestPayload\n }\n\n override async publicChildren(): Promise<ModuleInstance[]> {\n if (isNodeInstance(this.module)) {\n return await this.module.publicChildren()\n }\n const attached = await this.attached()\n return (await Promise.all(attached.map((address) => this.resolve(address)))).filter(exists)\n }\n\n async registered(): Promise<Address[]> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;ACAA,oBAAuB;AAGvB,oCAA8C;AAC9C,4BAA+D;AAC/D,0BAOO;AACP,4BAA0D;AAC1D,wBAkBO;AACP,2BAAgD;IAEhDA,kDAAAA;AACO,IAAMC,eAAN,MAAMA,qBACHC,oCAAAA;EAOR,MAAMC,OAAOC,IAAsBC,UAAkD;AA5CvF;AA6CI,UAAMC,eAAgC;MAAED;MAAUD;MAAIG,QAAQC;IAAsB;AACpF,UAAMC,YAAY,MAAM,KAAKC,UAAUJ,YAAAA,GAAeK,WAAOC,4CAAgDC,2CAAAA,CAAAA;AAC7G,YAAOJ,cAASK,IAAG,MAAZL,mBAAgBM;EACzB;EAEA,MAAMC,YAAYZ,IAAsBC,UAAoBY,SAAuE;AACjI,UAAMX,eAAgC;MAAED;MAAUD;MAAIG,QAAQC;IAAsB;AACpF,WAAO,MAAM,KAAKU,aAAaZ,cAAc,CAAA,GAAIW,OAAAA;EACnD;EAEA,MAAME,WAA+B;AACnC,UAAMb,eAAkC;MAAEC,QAAQa;IAAwB;AAC1E,UAAMX,YAAY,MAAM,KAAKC,UAAUJ,YAAAA,GAAeK,WAAOC,4CAAgDC,2CAAAA,CAAAA;AAC7G,WAAOJ,SAASY,IAAI,CAACC,MAAMA,EAAEP,OAAO;EACtC;EAEA,MAAMQ,cAAcN,SAAuE;AACzF,UAAMX,eAAkC;MAAEC,QAAQa;IAAwB;AAC1E,WAAO,MAAM,KAAKF,aAAaZ,cAAc,CAAA,GAAIW,OAAAA;EACnD;EAEA,MAAMO,QAAQpB,IAAqE;AACjF,UAAME,eAAiC;MAAEF;MAAIG,QAAQkB;IAAuB;AAC5E,UAAMhB,YAAY,MAAM,KAAKC,UAAUJ,YAAAA,GAAeK,WAAOC,4CAAoDc,0CAAAA,CAAAA;AACjH,WAAOjB,SAASK,IAAG;EACrB;EAEA,MAAMa,aAAavB,IAAsBa,SAA2E;AAClH,UAAMX,eAAiC;MAAEF;MAAIG,QAAQkB;IAAuB;AAC5E,WAAO,MAAM,KAAKP,aAAaZ,cAAc,CAAA,GAAIW,OAAAA;EACnD;EAEA,MAAMW,OAAOxB,IAAoD;AA7EnE;AA8EI,UAAME,eAAgC;MAAEF;MAAIG,QAAQsB;IAAsB;AAC1E,UAAMpB,YAAY,MAAM,KAAKC,UAAUJ,YAAAA,GAAeK,WAAOC,4CAAgDC,2CAAAA,CAAAA;AAC7G,YAAOJ,cAASK,IAAG,MAAZL,mBAAgBM;EACzB;EAEA,MAAMe,YAAY1B,IAAsBa,SAAuE;AAC7G,UAAMX,eAAgC;MAAEF;MAAIG,QAAQsB;IAAsB;AAC1E,WAAO,MAAM,KAAKX,aAAaZ,cAAc,CAAA,GAAIW,OAAAA;EACnD;EAEA,MAAec,SAASC,UAAiD;AACvE,UAAM1B,eAAoC;MAAEC,QAAQ0B;MAA2B,GAAID,WAAW;QAAEA;MAAS,IAAI,CAAC;IAAG;AACjH,UAAMvB,YAAY,MAAM,KAAKC,UAAUJ,YAAAA,GAAeK,WAAOC,4CAAqDsB,+CAAAA,CAAAA;AAClH,WAAOzB,SAASK,IAAG;EACrB;EAEA,MAAeqB,iBAA4C;AACzD,YAAIC,kCAAe,KAAKC,MAAM,GAAG;AAC/B,aAAO,MAAM,KAAKA,OAAOF,eAAc;IACzC;AACA,UAAMhB,WAAW,MAAM,KAAKA,SAAQ;AACpC,YAAQ,MAAMmB,QAAQC,IAAIpB,SAASE,IAAI,CAACN,YAAY,KAAKyB,QAAQzB,OAAAA,CAAAA,CAAAA,GAAYJ,OAAO8B,oBAAAA;EACtF;EAEA,MAAMC,aAAiC;AACrC,UAAMpC,eAAoC;MAAEC,QAAQoC;IAA0B;AAC9E,UAAMlC,YAAY,MAAM,KAAKC,UAAUJ,YAAAA,GAAeK,WAAOC,4CAAgDC,2CAAAA,CAAAA;AAC7G,WAAOJ,SAASY,IAAI,CAACC,MAAMA,EAAEP,OAAO;EACtC;EAEA,MAAM6B,gBAAgB3B,SAAuE;AAC3F,UAAMX,eAAoC;MAAEC,QAAQoC;IAA0B;AAC9E,WAAO,MAAM,KAAKzB,aAAaZ,cAAc,CAAA,GAAIW,OAAAA;EACnD;AACF;AA3EUf;AAGR,cAJWD,cAIK4C,yBAAyDT;AACzE,cALWnC,cAKK6C,uBAAsBC;AACtC,cANW9C,cAMK+C,mBAAkB;EAACxC;KAA0BN,oCAAc8C;;AANtE,IAAM/C,cAAN;","names":["constructableModuleWrapper","NodeWrapper","ModuleWrapper","attach","id","external","queryPayload","schema","NodeAttachQuerySchema","payloads","sendQuery","filter","isPayloadOfSchemaType","AddressSchema","pop","address","attachQuery","account","sendQueryRaw","attached","NodeAttachedQuerySchema","map","p","attachedQuery","certify","NodeCertifyQuerySchema","ChildCertificationSchema","certifyQuery","detach","NodeDetachQuerySchema","detachQuery","manifest","maxDepth","ModuleManifestQuerySchema","NodeManifestPayloadSchema","publicChildren","isNodeInstance","module","Promise","all","resolve","exists","registered","NodeRegisteredQuerySchema","registeredQuery","instanceIdentityCheck","moduleIdentityCheck","isNodeModule","requiredQueries"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/NodeWrapper.ts"],"sourcesContent":["export * from './NodeWrapper'\n","import { Address } from '@xylabs/hex'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { InstanceTypeCheck, ModuleIdentifier, ModuleManifestQuery, ModuleManifestQuerySchema, ModuleQueryResult } from '@xyo-network/module-model'\nimport { constructableModuleWrapper, ModuleWrapper } from '@xyo-network/module-wrapper'\nimport {\n ChildCertification,\n ChildCertificationFields,\n ChildCertificationSchema,\n isNodeInstance,\n isNodeModule,\n NodeAttachedQuery,\n NodeAttachedQuerySchema,\n NodeAttachQuery,\n NodeAttachQuerySchema,\n NodeCertifyQuery,\n NodeCertifyQuerySchema,\n NodeDetachQuery,\n NodeDetachQuerySchema,\n NodeInstance,\n NodeModule,\n NodeRegisteredQuery,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nconstructableModuleWrapper()\nexport class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>\n extends ModuleWrapper<TWrappedModule>\n implements NodeInstance<TWrappedModule['params']>\n{\n static override instanceIdentityCheck: InstanceTypeCheck<NodeInstance> = isNodeInstance\n static override moduleIdentityCheck = isNodeModule\n static override requiredQueries = [NodeAttachQuerySchema, ...ModuleWrapper.requiredQueries]\n\n protected _attached?: Address[]\n protected _attachedMutex = new Mutex()\n\n async attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async attached(): Promise<Address[]> {\n return await this._attachedMutex.runExclusive(async () => {\n if (this._attached === undefined) {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n this._attached = payloads.map((p) => p.address)\n }\n return this._attached\n })\n }\n\n async attachedQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async certify(id: ModuleIdentifier): Promise<ChildCertificationFields | undefined> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<ChildCertification>>(ChildCertificationSchema))\n return payloads.pop()\n }\n\n async certifyQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<ChildCertification>> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async detach(id: ModuleIdentifier): Promise<Address | undefined> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n override async manifest(maxDepth?: number): Promise<NodeManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth ? { maxDepth } : {}) }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n return payloads.pop() as NodeManifestPayload\n }\n\n async registered(): Promise<Address[]> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n}\n"],"mappings":"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","names":["constructableModuleWrapper","NodeWrapper","ModuleWrapper","_attached","_attachedMutex","Mutex","attach","id","external","queryPayload","schema","NodeAttachQuerySchema","payloads","sendQuery","filter","isPayloadOfSchemaType","AddressSchema","pop","address","attachQuery","account","sendQueryRaw","attached","runExclusive","undefined","NodeAttachedQuerySchema","map","p","attachedQuery","certify","NodeCertifyQuerySchema","ChildCertificationSchema","certifyQuery","detach","NodeDetachQuerySchema","detachQuery","manifest","maxDepth","ModuleManifestQuerySchema","NodeManifestPayloadSchema","registered","NodeRegisteredQuerySchema","registeredQuery","instanceIdentityCheck","isNodeInstance","moduleIdentityCheck","isNodeModule","requiredQueries"]}
@@ -7,15 +7,17 @@ var __publicField = (obj, key, value) => {
7
7
  };
8
8
 
9
9
  // src/NodeWrapper.ts
10
- import { exists } from "@xylabs/exists";
11
10
  import { AddressSchema } from "@xyo-network/address-payload-plugin";
12
11
  import { NodeManifestPayloadSchema } from "@xyo-network/manifest-model";
13
12
  import { ModuleManifestQuerySchema } from "@xyo-network/module-model";
14
13
  import { constructableModuleWrapper, ModuleWrapper } from "@xyo-network/module-wrapper";
15
14
  import { ChildCertificationSchema, isNodeInstance, isNodeModule, NodeAttachedQuerySchema, NodeAttachQuerySchema, NodeCertifyQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema } from "@xyo-network/node-model";
16
15
  import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
16
+ import { Mutex } from "async-mutex";
17
17
  constructableModuleWrapper();
18
18
  var _NodeWrapper = class _NodeWrapper extends ModuleWrapper {
19
+ _attached;
20
+ _attachedMutex = new Mutex();
19
21
  async attach(id, external) {
20
22
  var _a;
21
23
  const queryPayload = {
@@ -35,11 +37,16 @@ var _NodeWrapper = class _NodeWrapper extends ModuleWrapper {
35
37
  return await this.sendQueryRaw(queryPayload, [], account);
36
38
  }
37
39
  async attached() {
38
- const queryPayload = {
39
- schema: NodeAttachedQuerySchema
40
- };
41
- const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType(AddressSchema));
42
- return payloads.map((p) => p.address);
40
+ return await this._attachedMutex.runExclusive(async () => {
41
+ if (this._attached === void 0) {
42
+ const queryPayload = {
43
+ schema: NodeAttachedQuerySchema
44
+ };
45
+ const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType(AddressSchema));
46
+ this._attached = payloads.map((p) => p.address);
47
+ }
48
+ return this._attached;
49
+ });
43
50
  }
44
51
  async attachedQuery(account) {
45
52
  const queryPayload = {
@@ -88,13 +95,6 @@ var _NodeWrapper = class _NodeWrapper extends ModuleWrapper {
88
95
  const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType(NodeManifestPayloadSchema));
89
96
  return payloads.pop();
90
97
  }
91
- async publicChildren() {
92
- if (isNodeInstance(this.module)) {
93
- return await this.module.publicChildren();
94
- }
95
- const attached = await this.attached();
96
- return (await Promise.all(attached.map((address) => this.resolve(address)))).filter(exists);
97
- }
98
98
  async registered() {
99
99
  const queryPayload = {
100
100
  schema: NodeRegisteredQuerySchema
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/NodeWrapper.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport {\n InstanceTypeCheck,\n ModuleIdentifier,\n ModuleInstance,\n ModuleManifestQuery,\n ModuleManifestQuerySchema,\n ModuleQueryResult,\n} from '@xyo-network/module-model'\nimport { constructableModuleWrapper, ModuleWrapper } from '@xyo-network/module-wrapper'\nimport {\n ChildCertification,\n ChildCertificationFields,\n ChildCertificationSchema,\n isNodeInstance,\n isNodeModule,\n NodeAttachedQuery,\n NodeAttachedQuerySchema,\n NodeAttachQuery,\n NodeAttachQuerySchema,\n NodeCertifyQuery,\n NodeCertifyQuerySchema,\n NodeDetachQuery,\n NodeDetachQuerySchema,\n NodeInstance,\n NodeModule,\n NodeRegisteredQuery,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, WithMeta } from '@xyo-network/payload-model'\n\nconstructableModuleWrapper()\nexport class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>\n extends ModuleWrapper<TWrappedModule>\n implements NodeInstance<TWrappedModule['params']>\n{\n static override instanceIdentityCheck: InstanceTypeCheck<NodeInstance> = isNodeInstance\n static override moduleIdentityCheck = isNodeModule\n static override requiredQueries = [NodeAttachQuerySchema, ...ModuleWrapper.requiredQueries]\n\n async attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async attached(): Promise<Address[]> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async attachedQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async certify(id: ModuleIdentifier): Promise<ChildCertificationFields | undefined> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<ChildCertification>>(ChildCertificationSchema))\n return payloads.pop()\n }\n\n async certifyQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<ChildCertification>> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async detach(id: ModuleIdentifier): Promise<Address | undefined> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n override async manifest(maxDepth?: number): Promise<NodeManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth ? { maxDepth } : {}) }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n return payloads.pop() as NodeManifestPayload\n }\n\n override async publicChildren(): Promise<ModuleInstance[]> {\n if (isNodeInstance(this.module)) {\n return await this.module.publicChildren()\n }\n const attached = await this.attached()\n return (await Promise.all(attached.map((address) => this.resolve(address)))).filter(exists)\n }\n\n async registered(): Promise<Address[]> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n}\n"],"mappings":"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","names":["exists","AddressSchema","NodeManifestPayloadSchema","ModuleManifestQuerySchema","constructableModuleWrapper","ModuleWrapper","ChildCertificationSchema","isNodeInstance","isNodeModule","NodeAttachedQuerySchema","NodeAttachQuerySchema","NodeCertifyQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","isPayloadOfSchemaType","constructableModuleWrapper","NodeWrapper","ModuleWrapper","attach","id","external","queryPayload","schema","NodeAttachQuerySchema","payloads","sendQuery","filter","isPayloadOfSchemaType","AddressSchema","pop","address","attachQuery","account","sendQueryRaw","attached","NodeAttachedQuerySchema","map","p","attachedQuery","certify","NodeCertifyQuerySchema","ChildCertificationSchema","certifyQuery","detach","NodeDetachQuerySchema","detachQuery","manifest","maxDepth","ModuleManifestQuerySchema","NodeManifestPayloadSchema","publicChildren","isNodeInstance","module","Promise","all","resolve","exists","registered","NodeRegisteredQuerySchema","registeredQuery","instanceIdentityCheck","moduleIdentityCheck","isNodeModule","requiredQueries"]}
1
+ {"version":3,"sources":["../../src/NodeWrapper.ts"],"sourcesContent":["import { Address } from '@xylabs/hex'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { InstanceTypeCheck, ModuleIdentifier, ModuleManifestQuery, ModuleManifestQuerySchema, ModuleQueryResult } from '@xyo-network/module-model'\nimport { constructableModuleWrapper, ModuleWrapper } from '@xyo-network/module-wrapper'\nimport {\n ChildCertification,\n ChildCertificationFields,\n ChildCertificationSchema,\n isNodeInstance,\n isNodeModule,\n NodeAttachedQuery,\n NodeAttachedQuerySchema,\n NodeAttachQuery,\n NodeAttachQuerySchema,\n NodeCertifyQuery,\n NodeCertifyQuerySchema,\n NodeDetachQuery,\n NodeDetachQuerySchema,\n NodeInstance,\n NodeModule,\n NodeRegisteredQuery,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { isPayloadOfSchemaType, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nconstructableModuleWrapper()\nexport class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>\n extends ModuleWrapper<TWrappedModule>\n implements NodeInstance<TWrappedModule['params']>\n{\n static override instanceIdentityCheck: InstanceTypeCheck<NodeInstance> = isNodeInstance\n static override moduleIdentityCheck = isNodeModule\n static override requiredQueries = [NodeAttachQuerySchema, ...ModuleWrapper.requiredQueries]\n\n protected _attached?: Address[]\n protected _attachedMutex = new Mutex()\n\n async attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async attached(): Promise<Address[]> {\n return await this._attachedMutex.runExclusive(async () => {\n if (this._attached === undefined) {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n this._attached = payloads.map((p) => p.address)\n }\n return this._attached\n })\n }\n\n async attachedQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async certify(id: ModuleIdentifier): Promise<ChildCertificationFields | undefined> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<ChildCertification>>(ChildCertificationSchema))\n return payloads.pop()\n }\n\n async certifyQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<ChildCertification>> {\n const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n async detach(id: ModuleIdentifier): Promise<Address | undefined> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.pop()?.address\n }\n\n async detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n\n override async manifest(maxDepth?: number): Promise<NodeManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth ? { maxDepth } : {}) }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<NodeManifestPayload>>(NodeManifestPayloadSchema))\n return payloads.pop() as NodeManifestPayload\n }\n\n async registered(): Promise<Address[]> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))\n return payloads.map((p) => p.address)\n }\n\n async registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n return await this.sendQueryRaw(queryPayload, [], account)\n }\n}\n"],"mappings":";;;;;;;;;AAEA,SAAyBA,qBAAqB;AAC9C,SAA8BC,iCAAiC;AAC/D,SAAmEC,iCAAoD;AACvH,SAASC,4BAA4BC,qBAAqB;AAC1D,SAGEC,0BACAC,gBACAC,cAEAC,yBAEAC,uBAEAC,wBAEAC,uBAIAC,iCACK;AACP,SAASC,6BAAuC;AAChD,SAASC,aAAa;AAEtBC,2BAAAA;AACO,IAAMC,eAAN,MAAMA,qBACHC,cAAAA;EAOEC;EACAC,iBAAiB,IAAIC,MAAAA;EAE/B,MAAMC,OAAOC,IAAsBC,UAAkD;AAtCvF;AAuCI,UAAMC,eAAgC;MAAED;MAAUD;MAAIG,QAAQC;IAAsB;AACpF,UAAMC,YAAY,MAAM,KAAKC,UAAUJ,YAAAA,GAAeK,OAAOC,sBAAgDC,aAAAA,CAAAA;AAC7G,YAAOJ,cAASK,IAAG,MAAZL,mBAAgBM;EACzB;EAEA,MAAMC,YAAYZ,IAAsBC,UAAoBY,SAAuE;AACjI,UAAMX,eAAgC;MAAED;MAAUD;MAAIG,QAAQC;IAAsB;AACpF,WAAO,MAAM,KAAKU,aAAaZ,cAAc,CAAA,GAAIW,OAAAA;EACnD;EAEA,MAAME,WAA+B;AACnC,WAAO,MAAM,KAAKlB,eAAemB,aAAa,YAAA;AAC5C,UAAI,KAAKpB,cAAcqB,QAAW;AAChC,cAAMf,eAAkC;UAAEC,QAAQe;QAAwB;AAC1E,cAAMb,YAAY,MAAM,KAAKC,UAAUJ,YAAAA,GAAeK,OAAOC,sBAAgDC,aAAAA,CAAAA;AAC7G,aAAKb,YAAYS,SAASc,IAAI,CAACC,MAAMA,EAAET,OAAO;MAChD;AACA,aAAO,KAAKf;IACd,CAAA;EACF;EAEA,MAAMyB,cAAcR,SAAuE;AACzF,UAAMX,eAAkC;MAAEC,QAAQe;IAAwB;AAC1E,WAAO,MAAM,KAAKJ,aAAaZ,cAAc,CAAA,GAAIW,OAAAA;EACnD;EAEA,MAAMS,QAAQtB,IAAqE;AACjF,UAAME,eAAiC;MAAEF;MAAIG,QAAQoB;IAAuB;AAC5E,UAAMlB,YAAY,MAAM,KAAKC,UAAUJ,YAAAA,GAAeK,OAAOC,sBAAoDgB,wBAAAA,CAAAA;AACjH,WAAOnB,SAASK,IAAG;EACrB;EAEA,MAAMe,aAAazB,IAAsBa,SAA2E;AAClH,UAAMX,eAAiC;MAAEF;MAAIG,QAAQoB;IAAuB;AAC5E,WAAO,MAAM,KAAKT,aAAaZ,cAAc,CAAA,GAAIW,OAAAA;EACnD;EAEA,MAAMa,OAAO1B,IAAoD;AA5EnE;AA6EI,UAAME,eAAgC;MAAEF;MAAIG,QAAQwB;IAAsB;AAC1E,UAAMtB,YAAY,MAAM,KAAKC,UAAUJ,YAAAA,GAAeK,OAAOC,sBAAgDC,aAAAA,CAAAA;AAC7G,YAAOJ,cAASK,IAAG,MAAZL,mBAAgBM;EACzB;EAEA,MAAMiB,YAAY5B,IAAsBa,SAAuE;AAC7G,UAAMX,eAAgC;MAAEF;MAAIG,QAAQwB;IAAsB;AAC1E,WAAO,MAAM,KAAKb,aAAaZ,cAAc,CAAA,GAAIW,OAAAA;EACnD;EAEA,MAAegB,SAASC,UAAiD;AACvE,UAAM5B,eAAoC;MAAEC,QAAQ4B;MAA2B,GAAID,WAAW;QAAEA;MAAS,IAAI,CAAC;IAAG;AACjH,UAAMzB,YAAY,MAAM,KAAKC,UAAUJ,YAAAA,GAAeK,OAAOC,sBAAqDwB,yBAAAA,CAAAA;AAClH,WAAO3B,SAASK,IAAG;EACrB;EAEA,MAAMuB,aAAiC;AACrC,UAAM/B,eAAoC;MAAEC,QAAQ+B;IAA0B;AAC9E,UAAM7B,YAAY,MAAM,KAAKC,UAAUJ,YAAAA,GAAeK,OAAOC,sBAAgDC,aAAAA,CAAAA;AAC7G,WAAOJ,SAASc,IAAI,CAACC,MAAMA,EAAET,OAAO;EACtC;EAEA,MAAMwB,gBAAgBtB,SAAuE;AAC3F,UAAMX,eAAoC;MAAEC,QAAQ+B;IAA0B;AAC9E,WAAO,MAAM,KAAKpB,aAAaZ,cAAc,CAAA,GAAIW,OAAAA;EACnD;AACF;AA3EUlB;AAGR,cAJWD,cAIK0C,yBAAyDC;AACzE,cALW3C,cAKK4C,uBAAsBC;AACtC,cANW7C,cAMK8C,mBAAkB;EAACpC;KAA0BT,cAAc6C;;AANtE,IAAM9C,cAAN;","names":["AddressSchema","NodeManifestPayloadSchema","ModuleManifestQuerySchema","constructableModuleWrapper","ModuleWrapper","ChildCertificationSchema","isNodeInstance","isNodeModule","NodeAttachedQuerySchema","NodeAttachQuerySchema","NodeCertifyQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","isPayloadOfSchemaType","Mutex","constructableModuleWrapper","NodeWrapper","ModuleWrapper","_attached","_attachedMutex","Mutex","attach","id","external","queryPayload","schema","NodeAttachQuerySchema","payloads","sendQuery","filter","isPayloadOfSchemaType","AddressSchema","pop","address","attachQuery","account","sendQueryRaw","attached","runExclusive","undefined","NodeAttachedQuerySchema","map","p","attachedQuery","certify","NodeCertifyQuerySchema","ChildCertificationSchema","certifyQuery","detach","NodeDetachQuerySchema","detachQuery","manifest","maxDepth","ModuleManifestQuerySchema","NodeManifestPayloadSchema","registered","NodeRegisteredQuerySchema","registeredQuery","instanceIdentityCheck","isNodeInstance","moduleIdentityCheck","isNodeModule","requiredQueries"]}
package/package.json CHANGED
@@ -12,13 +12,13 @@
12
12
  "dependencies": {
13
13
  "@xylabs/exists": "^3.3.3",
14
14
  "@xylabs/hex": "^3.3.3",
15
- "@xyo-network/account-model": "~2.101.13",
16
- "@xyo-network/address-payload-plugin": "~2.101.13",
17
- "@xyo-network/manifest-model": "~2.101.13",
18
- "@xyo-network/module-model": "~2.101.13",
19
- "@xyo-network/module-wrapper": "~2.101.13",
20
- "@xyo-network/node-model": "~2.101.13",
21
- "@xyo-network/payload-model": "~2.101.13"
15
+ "@xyo-network/account-model": "~2.101.15",
16
+ "@xyo-network/address-payload-plugin": "~2.101.15",
17
+ "@xyo-network/manifest-model": "~2.101.15",
18
+ "@xyo-network/module-model": "~2.101.15",
19
+ "@xyo-network/module-wrapper": "~2.101.15",
20
+ "@xyo-network/node-model": "~2.101.15",
21
+ "@xyo-network/payload-model": "~2.101.15"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@xylabs/ts-scripts-yarn3": "^3.10.4",
@@ -64,6 +64,6 @@
64
64
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
65
65
  },
66
66
  "sideEffects": false,
67
- "version": "2.101.13",
67
+ "version": "2.101.15",
68
68
  "type": "module"
69
69
  }
@@ -1,16 +1,8 @@
1
- import { exists } from '@xylabs/exists'
2
1
  import { Address } from '@xylabs/hex'
3
2
  import { AccountInstance } from '@xyo-network/account-model'
4
3
  import { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'
5
4
  import { NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'
6
- import {
7
- InstanceTypeCheck,
8
- ModuleIdentifier,
9
- ModuleInstance,
10
- ModuleManifestQuery,
11
- ModuleManifestQuerySchema,
12
- ModuleQueryResult,
13
- } from '@xyo-network/module-model'
5
+ import { InstanceTypeCheck, ModuleIdentifier, ModuleManifestQuery, ModuleManifestQuerySchema, ModuleQueryResult } from '@xyo-network/module-model'
14
6
  import { constructableModuleWrapper, ModuleWrapper } from '@xyo-network/module-wrapper'
15
7
  import {
16
8
  ChildCertification,
@@ -32,6 +24,7 @@ import {
32
24
  NodeRegisteredQuerySchema,
33
25
  } from '@xyo-network/node-model'
34
26
  import { isPayloadOfSchemaType, WithMeta } from '@xyo-network/payload-model'
27
+ import { Mutex } from 'async-mutex'
35
28
 
36
29
  constructableModuleWrapper()
37
30
  export class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
@@ -42,6 +35,9 @@ export class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
42
35
  static override moduleIdentityCheck = isNodeModule
43
36
  static override requiredQueries = [NodeAttachQuerySchema, ...ModuleWrapper.requiredQueries]
44
37
 
38
+ protected _attached?: Address[]
39
+ protected _attachedMutex = new Mutex()
40
+
45
41
  async attach(id: ModuleIdentifier, external?: boolean): Promise<Address | undefined> {
46
42
  const queryPayload: NodeAttachQuery = { external, id, schema: NodeAttachQuerySchema }
47
43
  const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))
@@ -54,9 +50,14 @@ export class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
54
50
  }
55
51
 
56
52
  async attached(): Promise<Address[]> {
57
- const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }
58
- const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))
59
- return payloads.map((p) => p.address)
53
+ return await this._attachedMutex.runExclusive(async () => {
54
+ if (this._attached === undefined) {
55
+ const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }
56
+ const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))
57
+ this._attached = payloads.map((p) => p.address)
58
+ }
59
+ return this._attached
60
+ })
60
61
  }
61
62
 
62
63
  async attachedQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {
@@ -92,14 +93,6 @@ export class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>
92
93
  return payloads.pop() as NodeManifestPayload
93
94
  }
94
95
 
95
- override async publicChildren(): Promise<ModuleInstance[]> {
96
- if (isNodeInstance(this.module)) {
97
- return await this.module.publicChildren()
98
- }
99
- const attached = await this.attached()
100
- return (await Promise.all(attached.map((address) => this.resolve(address)))).filter(exists)
101
- }
102
-
103
96
  async registered(): Promise<Address[]> {
104
97
  const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }
105
98
  const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<WithMeta<AddressPayload>>(AddressSchema))