@olane/o-core 0.7.13-alpha.0 → 0.7.13-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/core/interfaces/o-core.config.d.ts +6 -0
- package/dist/src/core/interfaces/o-core.config.d.ts.map +1 -1
- package/dist/src/core/o-core.d.ts +5 -0
- package/dist/src/core/o-core.d.ts.map +1 -1
- package/dist/src/core/o-core.js +30 -16
- package/dist/src/router/o-address.d.ts +10 -0
- package/dist/src/router/o-address.d.ts.map +1 -1
- package/dist/src/router/o-address.js +26 -0
- package/package.json +3 -3
|
@@ -19,5 +19,11 @@ export interface oCoreConfig {
|
|
|
19
19
|
cwd?: string;
|
|
20
20
|
systemName?: string;
|
|
21
21
|
joinToken?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Internal flag - bypasses nested address validation.
|
|
24
|
+
* Should only be used by framework internals or tests.
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
_allowNestedAddress?: boolean;
|
|
22
28
|
}
|
|
23
29
|
//# sourceMappingURL=o-core.config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"o-core.config.d.ts","sourceRoot":"","sources":["../../../../src/core/interfaces/o-core.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"o-core.config.d.ts","sourceRoot":"","sources":["../../../../src/core/interfaces/o-core.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B"}
|
|
@@ -220,6 +220,11 @@ export declare abstract class oCore extends oObject {
|
|
|
220
220
|
*/
|
|
221
221
|
stop(): Promise<void>;
|
|
222
222
|
teardown(): Promise<void>;
|
|
223
|
+
/**
|
|
224
|
+
* Reset node state to allow restart after stop
|
|
225
|
+
* Called at the end of teardown()
|
|
226
|
+
*/
|
|
227
|
+
protected resetState(): void;
|
|
223
228
|
get dependencies(): oDependency[];
|
|
224
229
|
/**
|
|
225
230
|
* Start sending periodic heartbeats to the monitor node
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"o-core.d.ts","sourceRoot":"","sources":["../../../src/core/o-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,YAAY,EACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAEhF,8BAAsB,KAAM,SAAQ,OAAO;IAY7B,QAAQ,CAAC,MAAM,EAAE,WAAW;IAXjC,OAAO,EAAE,QAAQ,CAAC;IAClB,KAAK,EAAE,SAAS,CAAqB;IACrC,MAAM,EAAE,KAAK,EAAE,CAAM;IACrB,iBAAiB,EAAG,kBAAkB,CAAC;IACvC,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,OAAO,EAAE,QAAQ,CAAkB;IACnC,cAAc,EAAE,eAAe,CAAyB;IACxD,MAAM,EAAG,OAAO,CAAC;IACjB,mBAAmB,EAAG,oBAAoB,CAAC;IAClD,OAAO,CAAC,iBAAiB,CAAC,CAAiB;gBAEtB,MAAM,EAAE,WAAW;
|
|
1
|
+
{"version":3,"file":"o-core.d.ts","sourceRoot":"","sources":["../../../src/core/o-core.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/o-core.js
CHANGED
|
@@ -17,6 +17,11 @@ export class oCore extends oObject {
|
|
|
17
17
|
this.errors = [];
|
|
18
18
|
this.metrics = new oMetrics();
|
|
19
19
|
this.requestManager = new oRequestManager();
|
|
20
|
+
// Validate that initial address is not nested
|
|
21
|
+
// Nested addresses should only be created at runtime during registration
|
|
22
|
+
if (config.address && !config._allowNestedAddress) {
|
|
23
|
+
config.address.validateNotNested();
|
|
24
|
+
}
|
|
20
25
|
this.address = config.address || new oAddress('o://node');
|
|
21
26
|
this.hierarchyManager = new oHierarchyManager({
|
|
22
27
|
leaders: this.config.leader ? [this.config.leader] : [],
|
|
@@ -114,7 +119,7 @@ export class oCore extends oObject {
|
|
|
114
119
|
const { nextHopAddress, targetAddress } = options?.noRouting
|
|
115
120
|
? { nextHopAddress: address, targetAddress: address }
|
|
116
121
|
: await this.router.translate(address, this);
|
|
117
|
-
if (nextHopAddress
|
|
122
|
+
if (nextHopAddress?.toStaticAddress().equals(this.address.toStaticAddress())) {
|
|
118
123
|
return this.useSelf(data);
|
|
119
124
|
}
|
|
120
125
|
const connection = await this.connect({
|
|
@@ -371,26 +376,35 @@ export class oCore extends oObject {
|
|
|
371
376
|
async teardown() {
|
|
372
377
|
this.logger.debug('Tearing down node...');
|
|
373
378
|
this.state = NodeState.STOPPING;
|
|
374
|
-
for (const child of this.hierarchyManager.children) {
|
|
375
|
-
this.logger.debug('Stopping child: ' + child.toString());
|
|
376
|
-
await this.useChild(child, {
|
|
377
|
-
method: 'stop',
|
|
378
|
-
params: {},
|
|
379
|
-
}).catch((error) => {
|
|
380
|
-
if (error.message === 'No data received') {
|
|
381
|
-
// ignore
|
|
382
|
-
}
|
|
383
|
-
else {
|
|
384
|
-
this.logger.error('Potential error stopping child', error);
|
|
385
|
-
}
|
|
386
|
-
});
|
|
387
|
-
this.logger.debug('Child stopped: ' + child.toString());
|
|
388
|
-
}
|
|
389
379
|
this.hierarchyManager.clear();
|
|
390
380
|
// Teardown notification manager
|
|
391
381
|
if (this.notificationManager) {
|
|
392
382
|
await this.notificationManager.teardown();
|
|
393
383
|
}
|
|
384
|
+
// Reset state to allow restart
|
|
385
|
+
this.resetState();
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Reset node state to allow restart after stop
|
|
389
|
+
* Called at the end of teardown()
|
|
390
|
+
*/
|
|
391
|
+
resetState() {
|
|
392
|
+
// Reset state tracking
|
|
393
|
+
this.errors = [];
|
|
394
|
+
this.metrics = new oMetrics();
|
|
395
|
+
this.requestManager = new oRequestManager();
|
|
396
|
+
// Clear heartbeat
|
|
397
|
+
if (this.heartbeatInterval) {
|
|
398
|
+
clearInterval(this.heartbeatInterval);
|
|
399
|
+
this.heartbeatInterval = undefined;
|
|
400
|
+
}
|
|
401
|
+
// Reset address to config address with no transports
|
|
402
|
+
this.address = new oAddress(this.config.address.toStaticAddress().value, []);
|
|
403
|
+
// Reset hierarchy manager to initial state
|
|
404
|
+
this.hierarchyManager = new oHierarchyManager({
|
|
405
|
+
leaders: this.config.leader ? [this.config.leader] : [],
|
|
406
|
+
parents: this.config.parent ? [this.config.parent] : [],
|
|
407
|
+
});
|
|
394
408
|
}
|
|
395
409
|
get dependencies() {
|
|
396
410
|
return this.config.dependencies?.map((d) => new oDependency(d)) || [];
|
|
@@ -11,6 +11,16 @@ export declare class oAddress extends oObject {
|
|
|
11
11
|
transportsEqual(other: oAddress): boolean;
|
|
12
12
|
setTransports(transports: oTransport[]): void;
|
|
13
13
|
validate(): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Check if this address contains a nested path
|
|
16
|
+
* @returns true if address contains '/' in the path portion (e.g., 'o://parent/child')
|
|
17
|
+
*/
|
|
18
|
+
isNested(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Validates that this address is not nested (for constructor validation)
|
|
21
|
+
* @throws Error if address contains nested paths
|
|
22
|
+
*/
|
|
23
|
+
validateNotNested(): void;
|
|
14
24
|
get paths(): string;
|
|
15
25
|
get protocol(): string;
|
|
16
26
|
get root(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"o-address.d.ts","sourceRoot":"","sources":["../../../src/router/o-address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAI1D,qBAAa,QAAS,SAAQ,OAAO;aAIjB,KAAK,EAAE,MAAM;IAHxB,UAAU,EAAE,UAAU,EAAE,CAAC;gBAGd,KAAK,EAAE,MAAM,EAC7B,UAAU,GAAE,UAAU,EAAO;IAM/B,IAAI,gBAAgB,IAAI,UAAU,EAAE,CAEnC;IAED,IAAI,gBAAgB,IAAI,UAAU,EAAE,CAEnC;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAIhC,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAMzC,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI;IAI7C,QAAQ,IAAI,OAAO;IAOnB,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,eAAe,IAAI,QAAQ;IAQ3B,aAAa,IAAI,QAAQ;IAQzB,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI;QACR,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB;IAOD,iBAAiB,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO;IAI3C,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC;IAI3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIhD,MAAM,CAAC,MAAM,IAAI,QAAQ;IAIzB,MAAM,CAAC,IAAI,IAAI,QAAQ;IAIvB,MAAM,CAAC,QAAQ,IAAI,QAAQ;IAI3B,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO;IAI3C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,GAAG,QAAQ;CAkClE"}
|
|
1
|
+
{"version":3,"file":"o-address.d.ts","sourceRoot":"","sources":["../../../src/router/o-address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAI1D,qBAAa,QAAS,SAAQ,OAAO;aAIjB,KAAK,EAAE,MAAM;IAHxB,UAAU,EAAE,UAAU,EAAE,CAAC;gBAGd,KAAK,EAAE,MAAM,EAC7B,UAAU,GAAE,UAAU,EAAO;IAM/B,IAAI,gBAAgB,IAAI,UAAU,EAAE,CAEnC;IAED,IAAI,gBAAgB,IAAI,UAAU,EAAE,CAEnC;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAIhC,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAMzC,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI;IAI7C,QAAQ,IAAI,OAAO;IAOnB;;;OAGG;IACH,QAAQ,IAAI,OAAO;IAKnB;;;OAGG;IACH,iBAAiB,IAAI,IAAI;IAiBzB,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,eAAe,IAAI,QAAQ;IAQ3B,aAAa,IAAI,QAAQ;IAQzB,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI;QACR,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB;IAOD,iBAAiB,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO;IAI3C,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC;IAI3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIhD,MAAM,CAAC,MAAM,IAAI,QAAQ;IAIzB,MAAM,CAAC,IAAI,IAAI,QAAQ;IAIvB,MAAM,CAAC,QAAQ,IAAI,QAAQ;IAI3B,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO;IAI3C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,GAAG,QAAQ;CAkClE"}
|
|
@@ -29,6 +29,32 @@ export class oAddress extends oObject {
|
|
|
29
29
|
}
|
|
30
30
|
return true;
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Check if this address contains a nested path
|
|
34
|
+
* @returns true if address contains '/' in the path portion (e.g., 'o://parent/child')
|
|
35
|
+
*/
|
|
36
|
+
isNested() {
|
|
37
|
+
const paths = this.paths; // Strips 'o://' prefix
|
|
38
|
+
return paths.includes('/');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Validates that this address is not nested (for constructor validation)
|
|
42
|
+
* @throws Error if address contains nested paths
|
|
43
|
+
*/
|
|
44
|
+
validateNotNested() {
|
|
45
|
+
if (this.isNested()) {
|
|
46
|
+
throw new Error(`Invalid address: "${this.value}". ` +
|
|
47
|
+
`Nested addresses should not be created directly in node constructors. ` +
|
|
48
|
+
`Use simple addresses (e.g., "o://tool-name") and let the system ` +
|
|
49
|
+
`create hierarchical addresses during parent/leader registration. ` +
|
|
50
|
+
`\n\nExample:\n` +
|
|
51
|
+
` ✅ CORRECT: new oNodeAddress('o://my-tool')\n` +
|
|
52
|
+
` ❌ WRONG: new oNodeAddress('o://my-tool/type2')\n\n` +
|
|
53
|
+
`If you need nested addresses at runtime, they will be created ` +
|
|
54
|
+
`automatically during registration with parent/leader.\n\n` +
|
|
55
|
+
`For more info, see CLAUDE.md Section 4: Parent-Child System`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
32
58
|
get paths() {
|
|
33
59
|
return this.value.replace('o://', '');
|
|
34
60
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@olane/o-core",
|
|
3
|
-
"version": "0.7.13-alpha.
|
|
3
|
+
"version": "0.7.13-alpha.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"types": "dist/src/index.d.ts",
|
|
@@ -63,12 +63,12 @@
|
|
|
63
63
|
"typescript": "^5.8.3"
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@olane/o-protocol": "0.7.13-alpha.
|
|
66
|
+
"@olane/o-protocol": "0.7.13-alpha.1",
|
|
67
67
|
"chalk": "^5.4.1",
|
|
68
68
|
"debug": "^4.4.1",
|
|
69
69
|
"dotenv": "^16.5.0",
|
|
70
70
|
"multiformats": "^13.3.7",
|
|
71
71
|
"stream-json": "^1.9.1"
|
|
72
72
|
},
|
|
73
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "7abba2239f85eb07a87401528b6df96e72449fe0"
|
|
74
74
|
}
|