@naylence/runtime 0.3.15 → 0.3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.cjs +615 -442
- package/dist/browser/index.mjs +611 -443
- package/dist/cjs/naylence/fame/factory-manifest.js +2 -0
- package/dist/cjs/naylence/fame/node/connection-retry-policy-factory.js +22 -0
- package/dist/cjs/naylence/fame/node/connection-retry-policy.js +2 -0
- package/dist/cjs/naylence/fame/node/default-connection-retry-policy-factory.js +36 -0
- package/dist/cjs/naylence/fame/node/default-connection-retry-policy.js +51 -0
- package/dist/cjs/naylence/fame/node/factory-commons.js +15 -0
- package/dist/cjs/naylence/fame/node/index.js +6 -1
- package/dist/cjs/naylence/fame/node/node-config.js +4 -0
- package/dist/cjs/naylence/fame/node/node-factory.js +1 -0
- package/dist/cjs/naylence/fame/node/node.js +3 -0
- package/dist/cjs/naylence/fame/node/upstream-session-manager.js +63 -23
- package/dist/cjs/naylence/fame/sentinel/sentinel.js +2 -0
- package/dist/cjs/version.js +2 -2
- package/dist/esm/naylence/fame/factory-manifest.js +2 -0
- package/dist/esm/naylence/fame/node/connection-retry-policy-factory.js +18 -0
- package/dist/esm/naylence/fame/node/connection-retry-policy.js +1 -0
- package/dist/esm/naylence/fame/node/default-connection-retry-policy-factory.js +32 -0
- package/dist/esm/naylence/fame/node/default-connection-retry-policy.js +47 -0
- package/dist/esm/naylence/fame/node/factory-commons.js +15 -0
- package/dist/esm/naylence/fame/node/index.js +4 -0
- package/dist/esm/naylence/fame/node/node-config.js +4 -0
- package/dist/esm/naylence/fame/node/node-factory.js +1 -0
- package/dist/esm/naylence/fame/node/node.js +3 -0
- package/dist/esm/naylence/fame/node/upstream-session-manager.js +63 -23
- package/dist/esm/naylence/fame/sentinel/sentinel.js +2 -0
- package/dist/esm/version.js +2 -2
- package/dist/node/index.cjs +615 -442
- package/dist/node/index.mjs +611 -443
- package/dist/node/node.cjs +639 -466
- package/dist/node/node.mjs +635 -467
- package/dist/types/naylence/fame/factory-manifest.d.ts +1 -1
- package/dist/types/naylence/fame/node/connection-retry-policy-factory.d.ts +20 -0
- package/dist/types/naylence/fame/node/connection-retry-policy.d.ts +44 -0
- package/dist/types/naylence/fame/node/default-connection-retry-policy-factory.d.ts +15 -0
- package/dist/types/naylence/fame/node/default-connection-retry-policy.d.ts +36 -0
- package/dist/types/naylence/fame/node/factory-commons.d.ts +2 -0
- package/dist/types/naylence/fame/node/index.d.ts +4 -0
- package/dist/types/naylence/fame/node/node-config.d.ts +2 -0
- package/dist/types/naylence/fame/node/node.d.ts +3 -0
- package/dist/types/naylence/fame/node/upstream-session-manager.d.ts +13 -0
- package/dist/types/naylence/fame/sentinel/sentinel.d.ts +1 -0
- package/dist/types/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Provides the list of runtime factory modules for registration.
|
|
6
6
|
*/
|
|
7
|
-
export declare const MODULES: readonly ["./connector/broadcast-channel-connector-factory.js", "./connector/broadcast-channel-listener-factory.js", "./connector/http-listener-factory.js", "./connector/http-stateless-connector-factory.js", "./connector/inpage-connector-factory.js", "./connector/inpage-listener-factory.js", "./connector/websocket-connector-factory.js", "./connector/websocket-listener-factory.js", "./delivery/at-least-once-delivery-policy-factory.js", "./delivery/at-most-once-delivery-policy-factory.js", "./delivery/delivery-profile-factory.js", "./fabric/in-process-fame-fabric-factory.js", "./node/admission/admission-profile-factory.js", "./node/admission/direct-admission-client-factory.js", "./node/admission/noop-admission-client-factory.js", "./node/admission/welcome-service-client-factory.js", "./node/default-node-identity-policy-factory.js", "./node/node-factory.js", "./node/node-identity-policy-profile-factory.js", "./node/token-subject-node-identity-policy-factory.js", "./placement/static-node-placement-strategy-factory.js", "./security/auth/bearer-token-header-auth-injection-strategy-factory.js", "./security/auth/default-authorizer-factory.js", "./security/auth/jwks-jwt-token-verifier-factory.js", "./security/auth/jwt-token-issuer-factory.js", "./security/auth/jwt-token-verifier-factory.js", "./security/auth/no-auth-injection-strategy-factory.js", "./security/auth/none-token-provider-factory.js", "./security/auth/noop-authorizer-factory.js", "./security/auth/noop-token-issuer-factory.js", "./security/auth/noop-token-verifier-factory.js", "./security/auth/oauth2-authorizer-factory.js", "./security/auth/oauth2-client-credentials-token-provider-factory.js", "./security/auth/oauth2-pkce-token-provider-factory.js", "./security/auth/query-param-auth-injection-strategy-factory.js", "./security/auth/shared-secret-authorizer-factory.js", "./security/auth/shared-secret-token-provider-factory.js", "./security/auth/shared-secret-token-verifier-factory.js", "./security/auth/static-token-provider-factory.js", "./security/auth/websocket-subprotocol-auth-injection-strategy-factory.js", "./security/credential/dev-fixed-key-credential-provider-factory.js", "./security/credential/env-credential-provider-factory.js", "./security/credential/none-credential-provider-factory.js", "./security/credential/prompt-credential-provider-factory.js", "./security/credential/secret-store-credential-provider-factory.js", "./security/credential/session-key-credential-provider-factory.js", "./security/credential/static-credential-provider-factory.js", "./security/default-security-manager-factory.js", "./security/encryption/noop-encryption-manager-factory.js", "./security/encryption/noop-secure-channel-manager-factory.js", "./security/keys/default-key-manager-factory.js", "./security/keys/in-memory-key-store-factory.js", "./security/keys/noop-key-validator-factory.js", "./security/node-security-profile-factory.js", "./security/policy/default-security-policy-factory.js", "./security/policy/no-security-policy-factory.js", "./security/signing/eddsa-envelope-signer-factory.js", "./security/signing/eddsa-envelope-verifier-factory.js", "./security/trust-store/noop-trust-store-provider-factory.js", "./sentinel/capability-aware-routing-policy-factory.js", "./sentinel/composite-routing-policy-factory.js", "./sentinel/hybrid-path-routing-policy-factory.js", "./sentinel/load-balancing/composite-load-balancing-strategy-factory.js", "./sentinel/load-balancing/hrw-load-balancing-strategy-factory.js", "./sentinel/load-balancing/load-balancing-profile-factory.js", "./sentinel/load-balancing/random-load-balancing-strategy-factory.js", "./sentinel/load-balancing/round-robin-load-balancing-strategy-factory.js", "./sentinel/load-balancing/sticky-load-balancing-strategy-factory.js", "./sentinel/routing-profile-factory.js", "./sentinel/sentinel-factory.js", "./sentinel/store/route-store-factory.js", "./stickiness/simple-load-balancer-stickiness-manager-factory.js", "./telemetry/noop-trace-emitter-factory.js", "./telemetry/open-telemetry-trace-emitter-factory.js", "./telemetry/trace-emitter-profile-factory.js", "./welcome/default-welcome-service-factory.js"];
|
|
7
|
+
export declare const MODULES: readonly ["./connector/broadcast-channel-connector-factory.js", "./connector/broadcast-channel-listener-factory.js", "./connector/http-listener-factory.js", "./connector/http-stateless-connector-factory.js", "./connector/inpage-connector-factory.js", "./connector/inpage-listener-factory.js", "./connector/websocket-connector-factory.js", "./connector/websocket-listener-factory.js", "./delivery/at-least-once-delivery-policy-factory.js", "./delivery/at-most-once-delivery-policy-factory.js", "./delivery/delivery-profile-factory.js", "./fabric/in-process-fame-fabric-factory.js", "./node/admission/admission-profile-factory.js", "./node/admission/direct-admission-client-factory.js", "./node/admission/noop-admission-client-factory.js", "./node/admission/welcome-service-client-factory.js", "./node/default-connection-retry-policy-factory.js", "./node/default-node-identity-policy-factory.js", "./node/node-factory.js", "./node/node-identity-policy-profile-factory.js", "./node/token-subject-node-identity-policy-factory.js", "./placement/static-node-placement-strategy-factory.js", "./security/auth/bearer-token-header-auth-injection-strategy-factory.js", "./security/auth/default-authorizer-factory.js", "./security/auth/jwks-jwt-token-verifier-factory.js", "./security/auth/jwt-token-issuer-factory.js", "./security/auth/jwt-token-verifier-factory.js", "./security/auth/no-auth-injection-strategy-factory.js", "./security/auth/none-token-provider-factory.js", "./security/auth/noop-authorizer-factory.js", "./security/auth/noop-token-issuer-factory.js", "./security/auth/noop-token-verifier-factory.js", "./security/auth/oauth2-authorizer-factory.js", "./security/auth/oauth2-client-credentials-token-provider-factory.js", "./security/auth/oauth2-pkce-token-provider-factory.js", "./security/auth/query-param-auth-injection-strategy-factory.js", "./security/auth/shared-secret-authorizer-factory.js", "./security/auth/shared-secret-token-provider-factory.js", "./security/auth/shared-secret-token-verifier-factory.js", "./security/auth/static-token-provider-factory.js", "./security/auth/websocket-subprotocol-auth-injection-strategy-factory.js", "./security/credential/dev-fixed-key-credential-provider-factory.js", "./security/credential/env-credential-provider-factory.js", "./security/credential/none-credential-provider-factory.js", "./security/credential/prompt-credential-provider-factory.js", "./security/credential/secret-store-credential-provider-factory.js", "./security/credential/session-key-credential-provider-factory.js", "./security/credential/static-credential-provider-factory.js", "./security/default-security-manager-factory.js", "./security/encryption/noop-encryption-manager-factory.js", "./security/encryption/noop-secure-channel-manager-factory.js", "./security/keys/default-key-manager-factory.js", "./security/keys/in-memory-key-store-factory.js", "./security/keys/noop-key-validator-factory.js", "./security/node-security-profile-factory.js", "./security/policy/default-security-policy-factory.js", "./security/policy/no-security-policy-factory.js", "./security/signing/eddsa-envelope-signer-factory.js", "./security/signing/eddsa-envelope-verifier-factory.js", "./security/trust-store/noop-trust-store-provider-factory.js", "./sentinel/capability-aware-routing-policy-factory.js", "./sentinel/composite-routing-policy-factory.js", "./sentinel/hybrid-path-routing-policy-factory.js", "./sentinel/load-balancing/composite-load-balancing-strategy-factory.js", "./sentinel/load-balancing/hrw-load-balancing-strategy-factory.js", "./sentinel/load-balancing/load-balancing-profile-factory.js", "./sentinel/load-balancing/random-load-balancing-strategy-factory.js", "./sentinel/load-balancing/round-robin-load-balancing-strategy-factory.js", "./sentinel/load-balancing/sticky-load-balancing-strategy-factory.js", "./sentinel/routing-profile-factory.js", "./sentinel/sentinel-factory.js", "./sentinel/store/route-store-factory.js", "./stickiness/simple-load-balancer-stickiness-manager-factory.js", "./telemetry/noop-trace-emitter-factory.js", "./telemetry/open-telemetry-trace-emitter-factory.js", "./telemetry/trace-emitter-profile-factory.js", "./welcome/default-welcome-service-factory.js"];
|
|
8
8
|
export type FactoryModuleSpec = (typeof MODULES)[number];
|
|
9
9
|
export type FactoryModuleLoader = () => Promise<Record<string, unknown>>;
|
|
10
10
|
export declare const MODULE_LOADERS: Record<FactoryModuleSpec, FactoryModuleLoader>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { CreateResourceOptions, ResourceConfig } from '@naylence/factory';
|
|
2
|
+
import { AbstractResourceFactory } from '@naylence/factory';
|
|
3
|
+
import type { ConnectionRetryPolicy } from './connection-retry-policy.js';
|
|
4
|
+
export declare const CONNECTION_RETRY_POLICY_FACTORY_BASE_TYPE = "ConnectionRetryPolicyFactory";
|
|
5
|
+
export interface ConnectionRetryPolicyConfig extends ResourceConfig {
|
|
6
|
+
type: string;
|
|
7
|
+
/**
|
|
8
|
+
* Maximum number of connection attempts before giving up (before first successful attach).
|
|
9
|
+
* - `1` (default): Fail immediately on first error
|
|
10
|
+
* - `0`: Unlimited retries with exponential backoff
|
|
11
|
+
* - `N > 1`: Retry up to N times with exponential backoff
|
|
12
|
+
*/
|
|
13
|
+
maxInitialAttempts?: number | string;
|
|
14
|
+
max_initial_attempts?: number | string;
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}
|
|
17
|
+
export declare abstract class ConnectionRetryPolicyFactory<C extends ConnectionRetryPolicyConfig = ConnectionRetryPolicyConfig> extends AbstractResourceFactory<ConnectionRetryPolicy, C> {
|
|
18
|
+
abstract create(config?: C | Record<string, unknown> | null, ...factoryArgs: unknown[]): Promise<ConnectionRetryPolicy>;
|
|
19
|
+
static createConnectionRetryPolicy<C extends ConnectionRetryPolicyConfig = ConnectionRetryPolicyConfig>(config?: C | Record<string, unknown> | null, options?: CreateResourceOptions): Promise<ConnectionRetryPolicy>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context provided to the connection retry policy for decision-making.
|
|
3
|
+
*/
|
|
4
|
+
export interface ConnectionRetryContext {
|
|
5
|
+
/**
|
|
6
|
+
* Whether a successful attach has occurred previously in this session.
|
|
7
|
+
*/
|
|
8
|
+
hadSuccessfulAttach: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Number of attempts made so far (1-indexed, incremented before each attempt).
|
|
11
|
+
*/
|
|
12
|
+
attemptNumber: number;
|
|
13
|
+
/**
|
|
14
|
+
* The error that caused the connection failure, if any.
|
|
15
|
+
*/
|
|
16
|
+
error?: unknown;
|
|
17
|
+
/**
|
|
18
|
+
* Duration in milliseconds that the last connection was alive before failing.
|
|
19
|
+
*/
|
|
20
|
+
connectionDurationMs?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Policy for determining whether to retry upstream connection attempts.
|
|
24
|
+
*
|
|
25
|
+
* This policy is stateless - all state needed for decision-making is passed
|
|
26
|
+
* via the context parameter.
|
|
27
|
+
*/
|
|
28
|
+
export interface ConnectionRetryPolicy {
|
|
29
|
+
/**
|
|
30
|
+
* Determines whether to retry after a connection failure.
|
|
31
|
+
*
|
|
32
|
+
* @param context - Information about the current retry state
|
|
33
|
+
* @returns `true` if a retry should be attempted, `false` if the error should be thrown
|
|
34
|
+
*/
|
|
35
|
+
shouldRetry(context: ConnectionRetryContext): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Calculates the delay before the next retry attempt.
|
|
38
|
+
*
|
|
39
|
+
* @param context - Information about the current retry state
|
|
40
|
+
* @param baseDelay - The base delay in seconds (may be adjusted by exponential backoff)
|
|
41
|
+
* @returns Delay in seconds before the next attempt (including any jitter)
|
|
42
|
+
*/
|
|
43
|
+
calculateRetryDelay(context: ConnectionRetryContext, baseDelay: number): number;
|
|
44
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ConnectionRetryPolicyFactory, type ConnectionRetryPolicyConfig } from './connection-retry-policy-factory.js';
|
|
2
|
+
import type { ConnectionRetryPolicy } from './connection-retry-policy.js';
|
|
3
|
+
export interface DefaultConnectionRetryPolicyConfig extends ConnectionRetryPolicyConfig {
|
|
4
|
+
type: 'DefaultConnectionRetryPolicy';
|
|
5
|
+
}
|
|
6
|
+
export declare const FACTORY_META: {
|
|
7
|
+
readonly base: "ConnectionRetryPolicyFactory";
|
|
8
|
+
readonly key: "DefaultConnectionRetryPolicy";
|
|
9
|
+
};
|
|
10
|
+
export declare class DefaultConnectionRetryPolicyFactory extends ConnectionRetryPolicyFactory<DefaultConnectionRetryPolicyConfig> {
|
|
11
|
+
readonly type = "DefaultConnectionRetryPolicy";
|
|
12
|
+
readonly isDefault = true;
|
|
13
|
+
create(config?: DefaultConnectionRetryPolicyConfig | Record<string, unknown> | null): Promise<ConnectionRetryPolicy>;
|
|
14
|
+
}
|
|
15
|
+
export default DefaultConnectionRetryPolicyFactory;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ConnectionRetryContext, ConnectionRetryPolicy } from './connection-retry-policy.js';
|
|
2
|
+
/**
|
|
3
|
+
* Environment variable for overriding max initial attempts.
|
|
4
|
+
*/
|
|
5
|
+
export declare const ENV_VAR_SESSION_MAX_INITIAL_ATTEMPTS = "FAME_SESSION_MAX_INITIAL_ATTEMPTS";
|
|
6
|
+
/**
|
|
7
|
+
* Options for the default connection retry policy.
|
|
8
|
+
*/
|
|
9
|
+
export interface DefaultConnectionRetryPolicyOptions {
|
|
10
|
+
/**
|
|
11
|
+
* Maximum number of connection attempts before giving up (before first successful attach).
|
|
12
|
+
* - `1` (default): Fail immediately on first error
|
|
13
|
+
* - `0`: Unlimited retries with exponential backoff
|
|
14
|
+
* - `N > 1`: Retry up to N times with exponential backoff
|
|
15
|
+
*
|
|
16
|
+
* Can be overridden via FAME_SESSION_MAX_INITIAL_ATTEMPTS environment variable.
|
|
17
|
+
*/
|
|
18
|
+
maxInitialAttempts?: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Default implementation of connection retry policy.
|
|
22
|
+
*
|
|
23
|
+
* Before first successful attach:
|
|
24
|
+
* - Respects maxInitialAttempts configuration
|
|
25
|
+
* - Uses exponential backoff with jitter
|
|
26
|
+
*
|
|
27
|
+
* After first successful attach:
|
|
28
|
+
* - Always retries (unlimited) to maintain connection
|
|
29
|
+
* - Resets backoff if connection was stable for >10 seconds
|
|
30
|
+
*/
|
|
31
|
+
export declare class DefaultConnectionRetryPolicy implements ConnectionRetryPolicy {
|
|
32
|
+
readonly maxInitialAttempts: number;
|
|
33
|
+
constructor(options?: DefaultConnectionRetryPolicyOptions);
|
|
34
|
+
shouldRetry(context: ConnectionRetryContext): boolean;
|
|
35
|
+
calculateRetryDelay(_context: ConnectionRetryContext, baseDelay: number): number;
|
|
36
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AdmissionClient } from './admission/admission-client.js';
|
|
2
|
+
import type { ConnectionRetryPolicy } from './connection-retry-policy.js';
|
|
2
3
|
import type { NodeIdentityPolicy } from './node-identity-policy.js';
|
|
3
4
|
import { DefaultNodeAttachClient } from './admission/default-node-attach-client.js';
|
|
4
5
|
import type { FameNodeConfig } from './node-config.js';
|
|
@@ -40,5 +41,6 @@ export interface CommonNodeComponents {
|
|
|
40
41
|
transportListeners: TransportListener[];
|
|
41
42
|
traceEmitter: TraceEmitter | null;
|
|
42
43
|
identityPolicy?: NodeIdentityPolicy;
|
|
44
|
+
connectionRetryPolicy?: ConnectionRetryPolicy;
|
|
43
45
|
}
|
|
44
46
|
export declare function makeCommonOptions(config: FameNodeConfig, rawConfig?: Record<string, unknown> | null): Promise<CommonNodeComponents>;
|
|
@@ -26,3 +26,7 @@ export { DefaultNodeIdentityPolicyFactory, DefaultNodeIdentityPolicyConfig, } fr
|
|
|
26
26
|
export * from './token-subject-node-identity-policy.js';
|
|
27
27
|
export { TokenSubjectNodeIdentityPolicyFactory, TokenSubjectNodeIdentityPolicyConfig, } from './token-subject-node-identity-policy-factory.js';
|
|
28
28
|
export { NodeIdentityPolicyProfileFactory, NodeIdentityPolicyProfileConfig, } from './node-identity-policy-profile-factory.js';
|
|
29
|
+
export * from './connection-retry-policy.js';
|
|
30
|
+
export * from './connection-retry-policy-factory.js';
|
|
31
|
+
export * from './default-connection-retry-policy.js';
|
|
32
|
+
export { DefaultConnectionRetryPolicyFactory, DefaultConnectionRetryPolicyConfig, } from './default-connection-retry-policy-factory.js';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AdmissionConfig } from './admission/admission-client-factory.js';
|
|
2
|
+
import type { ConnectionRetryPolicyConfig } from './connection-retry-policy-factory.js';
|
|
2
3
|
import type { NodeIdentityPolicyConfig } from './node-identity-policy-factory.js';
|
|
3
4
|
import type { NodeLikeConfig } from './node-like-factory.js';
|
|
4
5
|
import type { DeliveryPolicyConfig } from '../delivery/delivery-policy-config.js';
|
|
@@ -29,5 +30,6 @@ export type FameNodeConfig = NodeLikeConfig & {
|
|
|
29
30
|
telemetry?: TraceEmitterConfig | Record<string, unknown> | null;
|
|
30
31
|
requestedCapabilities?: string[];
|
|
31
32
|
identityPolicy?: NodeIdentityPolicyConfig | Record<string, unknown> | null;
|
|
33
|
+
connectionRetryPolicy?: ConnectionRetryPolicyConfig | Record<string, unknown> | null;
|
|
32
34
|
};
|
|
33
35
|
export declare function normalizeFameNodeConfig(input?: Partial<FameNodeConfig> | Record<string, unknown> | null): FameNodeConfig;
|
|
@@ -4,6 +4,7 @@ import type { DeliveryPolicy } from '../delivery/delivery-policy.js';
|
|
|
4
4
|
import type { SecurityManager } from '../security/security-manager.js';
|
|
5
5
|
import type { CryptoProvider } from '../security/crypto/providers/crypto-provider.js';
|
|
6
6
|
import type { AdmissionClient } from './admission/admission-client.js';
|
|
7
|
+
import type { ConnectionRetryPolicy } from './connection-retry-policy.js';
|
|
7
8
|
import type { NodeEventListener } from './node-event-listener.js';
|
|
8
9
|
import type { StorageProvider, KeyValueStore } from '../storage/index.js';
|
|
9
10
|
import type { EnvelopeFactory } from '@naylence/core';
|
|
@@ -39,6 +40,7 @@ export interface FameNodeOptions {
|
|
|
39
40
|
nodeMetaStore?: KeyValueStore<NodeMetaRecord> | null;
|
|
40
41
|
transportListeners?: TransportListener[];
|
|
41
42
|
cryptoProvider?: CryptoProvider | null;
|
|
43
|
+
connectionRetryPolicy?: ConnectionRetryPolicy | null;
|
|
42
44
|
}
|
|
43
45
|
type FameNodeOptionsInput = FameNodeOptions & Record<string, unknown>;
|
|
44
46
|
export declare class FameNode extends TaskSpawner implements NodeLike {
|
|
@@ -72,6 +74,7 @@ export declare class FameNode extends TaskSpawner implements NodeLike {
|
|
|
72
74
|
private _handshakeCompleted;
|
|
73
75
|
private _welcomeExpiresAt;
|
|
74
76
|
private _attachExpiresAt;
|
|
77
|
+
private readonly _connectionRetryPolicy;
|
|
75
78
|
constructor(options?: FameNodeOptionsInput);
|
|
76
79
|
private initializeSessionManager;
|
|
77
80
|
private initializeRootSessionManager;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { TaskSpawner } from '../util/task-spawner.js';
|
|
2
2
|
import { DeliveryOriginType, FameConnector, FameEnvelope, FameEnvelopeHandler, NodeWelcomeFrame } from '@naylence/core';
|
|
3
3
|
import type { AdmissionClient } from './admission/admission-client.js';
|
|
4
|
+
import type { ConnectionRetryPolicy } from './connection-retry-policy.js';
|
|
4
5
|
import type { NodeAttachClient, AttachInfo } from './admission/node-attach-client.js';
|
|
5
6
|
import type { NodeLike } from './node-like.js';
|
|
6
7
|
import type { SessionManager } from './session-manager.js';
|
|
@@ -24,6 +25,7 @@ interface UpstreamSessionManagerOptions {
|
|
|
24
25
|
onAttach: AttachCallback;
|
|
25
26
|
onEpochChange?: EpochCallback;
|
|
26
27
|
admissionClient?: AdmissionClient | null;
|
|
28
|
+
retryPolicy?: ConnectionRetryPolicy | null;
|
|
27
29
|
}
|
|
28
30
|
type UpstreamSessionManagerOptionsInput = UpstreamSessionManagerOptions & {
|
|
29
31
|
node?: NodeLike;
|
|
@@ -68,6 +70,8 @@ export declare class UpstreamSessionManager extends TaskSpawner implements Sessi
|
|
|
68
70
|
private hadSuccessfulAttach;
|
|
69
71
|
private lastConnectorState;
|
|
70
72
|
private connectEpoch;
|
|
73
|
+
private initialAttempts;
|
|
74
|
+
private readonly connectionRetryPolicy;
|
|
71
75
|
private _visibilityHandler;
|
|
72
76
|
constructor(optionsInput: UpstreamSessionManagerOptionsInput);
|
|
73
77
|
get systemId(): string | null;
|
|
@@ -82,7 +86,16 @@ export declare class UpstreamSessionManager extends TaskSpawner implements Sessi
|
|
|
82
86
|
isReady(): boolean;
|
|
83
87
|
awaitReady(timeoutMs?: number): Promise<void>;
|
|
84
88
|
private fsmLoop;
|
|
89
|
+
/**
|
|
90
|
+
* Determine whether to fail immediately or continue retrying.
|
|
91
|
+
* Returns true if we should throw the error instead of retrying.
|
|
92
|
+
*/
|
|
93
|
+
private shouldFailFastOnError;
|
|
85
94
|
private applyBackoff;
|
|
95
|
+
/**
|
|
96
|
+
* Sleep for the specified duration, but can be interrupted by stop or wake events.
|
|
97
|
+
* @returns true if interrupted by wake event (e.g., visibility change), false otherwise
|
|
98
|
+
*/
|
|
86
99
|
private sleepWithStop;
|
|
87
100
|
private getNodeAttachGrant;
|
|
88
101
|
private waitEvent;
|
|
@@ -51,6 +51,7 @@ export declare class Sentinel extends FameNode implements RoutingNodeLike {
|
|
|
51
51
|
private readonly maxAttachTtlSec;
|
|
52
52
|
private readonly requestedLogicals;
|
|
53
53
|
private readonly attachClient;
|
|
54
|
+
private readonly connectionRetryPolicy;
|
|
54
55
|
private readonly attachTimeoutMs;
|
|
55
56
|
private readonly cleanupDelayMs;
|
|
56
57
|
private readonly rebindOnAttach;
|
package/dist/types/version.d.ts
CHANGED