@frontmcp/sdk 0.2.5 → 0.3.0
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/README.md +81 -99
- package/package.json +24 -2
- package/src/adapter/adapter.instance.d.ts +11 -0
- package/src/adapter/adapter.instance.js +65 -0
- package/src/adapter/adapter.instance.js.map +1 -0
- package/src/adapter/adapter.regsitry.d.ts +13 -0
- package/src/adapter/adapter.regsitry.js +54 -0
- package/src/adapter/adapter.regsitry.js.map +1 -0
- package/src/adapter/adapter.utils.d.ts +10 -0
- package/src/adapter/adapter.utils.js +83 -0
- package/src/adapter/adapter.utils.js.map +1 -0
- package/src/app/app.registry.d.ts +12 -0
- package/src/app/app.registry.js +64 -0
- package/src/app/app.registry.js.map +1 -0
- package/src/app/app.utils.d.ts +15 -0
- package/src/app/app.utils.js +58 -0
- package/src/app/app.utils.js.map +1 -0
- package/src/app/instances/app.local.instance.d.ts +25 -0
- package/src/app/instances/app.local.instance.js +70 -0
- package/src/app/instances/app.local.instance.js.map +1 -0
- package/src/app/instances/app.remote.instance.d.ts +13 -0
- package/src/app/instances/app.remote.instance.js +36 -0
- package/src/app/instances/app.remote.instance.js.map +1 -0
- package/src/app/instances/index.d.ts +2 -0
- package/src/app/instances/index.js +6 -0
- package/src/app/instances/index.js.map +1 -0
- package/src/auth/auth.registry.d.ts +13 -0
- package/src/auth/auth.registry.js +81 -0
- package/src/auth/auth.registry.js.map +1 -0
- package/src/auth/auth.utils.d.ts +10 -0
- package/src/auth/auth.utils.js +85 -0
- package/src/auth/auth.utils.js.map +1 -0
- package/src/auth/flows/oauth.authorize.flow.d.ts +231 -0
- package/src/auth/flows/oauth.authorize.flow.js +154 -0
- package/src/auth/flows/oauth.authorize.flow.js.map +1 -0
- package/src/auth/flows/oauth.register.flow.d.ts +202 -0
- package/src/auth/flows/oauth.register.flow.js +201 -0
- package/src/auth/flows/oauth.register.flow.js.map +1 -0
- package/src/auth/flows/oauth.token.flow.d.ts +242 -0
- package/src/auth/flows/oauth.token.flow.js +181 -0
- package/src/auth/flows/oauth.token.flow.js.map +1 -0
- package/src/auth/flows/session.verify.flow.d.ts +404 -0
- package/src/auth/flows/session.verify.flow.js +205 -0
- package/src/auth/flows/session.verify.flow.js.map +1 -0
- package/src/auth/flows/well-known.jwks.flow.d.ts +261 -0
- package/src/auth/flows/well-known.jwks.flow.js +82 -0
- package/src/auth/flows/well-known.jwks.flow.js.map +1 -0
- package/src/auth/flows/well-known.oauth-authorization-server.flow.d.ts +282 -0
- package/src/auth/flows/well-known.oauth-authorization-server.flow.js +123 -0
- package/src/auth/flows/well-known.oauth-authorization-server.flow.js.map +1 -0
- package/src/auth/flows/well-known.prm.flow.d.ts +159 -0
- package/src/auth/flows/well-known.prm.flow.js +107 -0
- package/src/auth/flows/well-known.prm.flow.js.map +1 -0
- package/src/auth/instances/instance.local-primary-auth.d.ts +19 -0
- package/src/auth/instances/instance.local-primary-auth.js +76 -0
- package/src/auth/instances/instance.local-primary-auth.js.map +1 -0
- package/src/auth/instances/instance.remote-primary-auth.d.ts +14 -0
- package/src/auth/instances/instance.remote-primary-auth.js +47 -0
- package/src/auth/instances/instance.remote-primary-auth.js.map +1 -0
- package/src/auth/jwks/index.d.ts +2 -0
- package/src/auth/jwks/index.js +6 -0
- package/src/auth/jwks/index.js.map +1 -0
- package/src/auth/jwks/jwks.service.d.ts +41 -0
- package/src/auth/jwks/jwks.service.js +235 -0
- package/src/auth/jwks/jwks.service.js.map +1 -0
- package/src/auth/jwks/jwks.types.d.ts +25 -0
- package/src/auth/jwks/jwks.types.js +3 -0
- package/src/auth/jwks/jwks.types.js.map +1 -0
- package/src/auth/jwks/jwks.utils.d.ts +4 -0
- package/src/auth/jwks/jwks.utils.js +32 -0
- package/src/auth/jwks/jwks.utils.js.map +1 -0
- package/src/auth/oauth/flows/oauth.authorize.flow.d.ts +31 -0
- package/src/auth/oauth/flows/oauth.authorize.flow.js +33 -0
- package/src/auth/oauth/flows/oauth.authorize.flow.js.map +1 -0
- package/src/auth/oauth/flows/oauth.device-authorization.flow.d.ts +46 -0
- package/src/auth/oauth/flows/oauth.device-authorization.flow.js +48 -0
- package/src/auth/oauth/flows/oauth.device-authorization.flow.js.map +1 -0
- package/src/auth/oauth/flows/oauth.introspect.flow.d.ts +26 -0
- package/src/auth/oauth/flows/oauth.introspect.flow.js +28 -0
- package/src/auth/oauth/flows/oauth.introspect.flow.js.map +1 -0
- package/src/auth/oauth/flows/oauth.par.flow.d.ts +27 -0
- package/src/auth/oauth/flows/oauth.par.flow.js +29 -0
- package/src/auth/oauth/flows/oauth.par.flow.js.map +1 -0
- package/src/auth/oauth/flows/oauth.revoke.flow.d.ts +25 -0
- package/src/auth/oauth/flows/oauth.revoke.flow.js +27 -0
- package/src/auth/oauth/flows/oauth.revoke.flow.js.map +1 -0
- package/src/auth/oauth/flows/oauth.token.flow.d.ts +57 -0
- package/src/auth/oauth/flows/oauth.token.flow.js +59 -0
- package/src/auth/oauth/flows/oauth.token.flow.js.map +1 -0
- package/src/auth/oauth/flows/oauth.userinfo.flow.d.ts +22 -0
- package/src/auth/oauth/flows/oauth.userinfo.flow.js +24 -0
- package/src/auth/oauth/flows/oauth.userinfo.flow.js.map +1 -0
- package/src/auth/oauth/flows/oidc.logout.flow.d.ts +18 -0
- package/src/auth/oauth/flows/oidc.logout.flow.js +20 -0
- package/src/auth/oauth/flows/oidc.logout.flow.js.map +1 -0
- package/src/auth/path.utils.d.ts +20 -0
- package/src/auth/path.utils.js +71 -0
- package/src/auth/path.utils.js.map +1 -0
- package/src/auth/session/index.d.ts +4 -0
- package/src/auth/session/index.js +10 -0
- package/src/auth/session/index.js.map +1 -0
- package/src/auth/session/record/session.base.d.ts +103 -0
- package/src/auth/session/record/session.base.js +123 -0
- package/src/auth/session/record/session.base.js.map +1 -0
- package/src/auth/session/record/session.stateful.d.ts +20 -0
- package/src/auth/session/record/session.stateful.js +55 -0
- package/src/auth/session/record/session.stateful.js.map +1 -0
- package/src/auth/session/record/session.stateless.d.ts +17 -0
- package/src/auth/session/record/session.stateless.js +30 -0
- package/src/auth/session/record/session.stateless.js.map +1 -0
- package/src/auth/session/record/session.transparent.d.ts +17 -0
- package/src/auth/session/record/session.transparent.js +22 -0
- package/src/auth/session/record/session.transparent.js.map +1 -0
- package/src/auth/session/session.crypto.d.ts +7 -0
- package/src/auth/session/session.crypto.js +47 -0
- package/src/auth/session/session.crypto.js.map +1 -0
- package/src/auth/session/session.schema.d.ts +5 -0
- package/src/auth/session/session.schema.js +13 -0
- package/src/auth/session/session.schema.js.map +1 -0
- package/src/auth/session/session.service.d.ts +17 -0
- package/src/auth/session/session.service.js +111 -0
- package/src/auth/session/session.service.js.map +1 -0
- package/src/auth/session/session.transport.d.ts +4 -0
- package/src/auth/session/session.transport.js +20 -0
- package/src/auth/session/session.transport.js.map +1 -0
- package/src/auth/session/session.types.d.ts +65 -0
- package/src/auth/session/session.types.js +4 -0
- package/src/auth/session/session.types.js.map +1 -0
- package/src/auth/session/token.refresh.d.ts +60 -0
- package/src/auth/session/token.refresh.js +63 -0
- package/src/auth/session/token.refresh.js.map +1 -0
- package/src/auth/session/token.store.d.ts +35 -0
- package/src/auth/session/token.store.js +53 -0
- package/src/auth/session/token.store.js.map +1 -0
- package/src/auth/session/token.vault.d.ts +26 -0
- package/src/auth/session/token.vault.js +54 -0
- package/src/auth/session/token.vault.js.map +1 -0
- package/src/auth/session/utils/auth-token.utils.d.ts +11 -0
- package/src/auth/session/utils/auth-token.utils.js +57 -0
- package/src/auth/session/utils/auth-token.utils.js.map +1 -0
- package/src/auth/session/utils/session-id.utils.d.ts +17 -0
- package/src/auth/session/utils/session-id.utils.js +129 -0
- package/src/auth/session/utils/session-id.utils.js.map +1 -0
- package/src/auth/session/utils/tiny-ttl-cache.d.ts +7 -0
- package/src/auth/session/utils/tiny-ttl-cache.js +26 -0
- package/src/auth/session/utils/tiny-ttl-cache.js.map +1 -0
- package/src/common/common.schema.d.ts +29 -0
- package/src/common/common.schema.js +35 -0
- package/src/common/common.schema.js.map +1 -0
- package/src/common/constants.d.ts +2 -0
- package/src/common/constants.js +8 -0
- package/src/common/constants.js.map +1 -0
- package/src/common/decorators/adapter.decorator.js.map +1 -0
- package/src/common/decorators/app.decorator.js.map +1 -0
- package/src/common/decorators/auth-provider.decorator.js.map +1 -0
- package/src/common/decorators/flow.decorator.js.map +1 -0
- package/src/common/decorators/front-mcp.decorator.js +40 -0
- package/src/common/decorators/front-mcp.decorator.js.map +1 -0
- package/src/common/decorators/hook.decorator.js.map +1 -0
- package/src/common/decorators/index.js.map +1 -0
- package/src/common/decorators/logger.decorator.js.map +1 -0
- package/src/common/decorators/plugin.decorator.js.map +1 -0
- package/src/common/decorators/prompt.decorator.js.map +1 -0
- package/src/common/decorators/provider.decorator.js.map +1 -0
- package/src/common/decorators/resource.decorator.js.map +1 -0
- package/src/common/decorators/tool.decorator.d.ts +42 -0
- package/src/common/decorators/tool.decorator.js +46 -0
- package/src/common/decorators/tool.decorator.js.map +1 -0
- package/src/common/decorators-old/async-with.decorator.d.ts +10 -0
- package/src/common/decorators-old/async-with.decorator.js +24 -0
- package/src/common/decorators-old/async-with.decorator.js.map +1 -0
- package/src/common/decorators-old/auth-hook.decorator.js.map +1 -0
- package/src/common/decorators-old/session-hook.decorator.js.map +1 -0
- package/src/common/dynamic/dynamic.adapter.js.map +1 -0
- package/src/common/dynamic/dynamic.plugin.js.map +1 -0
- package/src/common/dynamic/dynamic.utils.d.ts +3 -0
- package/src/common/dynamic/dynamic.utils.js.map +1 -0
- package/src/common/dynamic/index.js.map +1 -0
- package/src/common/entries/adapter.entry.js.map +1 -0
- package/src/common/entries/app.entry.d.ts +13 -0
- package/src/common/entries/app.entry.js.map +1 -0
- package/src/common/entries/auth-provider.entry.js.map +1 -0
- package/src/common/entries/base.entry.js.map +1 -0
- package/src/common/entries/flow.entry.js.map +1 -0
- package/src/common/entries/hook.entry.js.map +1 -0
- package/src/common/entries/index.js.map +1 -0
- package/src/common/entries/logger.entry.js.map +1 -0
- package/src/common/entries/plugin.entry.js.map +1 -0
- package/src/common/entries/prompt.entry.js.map +1 -0
- package/src/common/entries/provider.entry.js.map +1 -0
- package/src/common/entries/resource.entry.js.map +1 -0
- package/src/common/entries/scope.entry.js.map +1 -0
- package/src/common/entries/tool.entry.js.map +1 -0
- package/src/common/index.d.ts +17 -0
- package/src/common/index.js +21 -0
- package/src/common/index.js.map +1 -0
- package/src/common/interfaces/adapter.interface.js.map +1 -0
- package/src/common/interfaces/app.interface.js.map +1 -0
- package/src/common/interfaces/auth-hook.interface.js.map +1 -0
- package/src/common/interfaces/auth-provider.interface.js.map +1 -0
- package/src/common/interfaces/base.interface.js.map +1 -0
- package/src/common/interfaces/flow.interface.d.ts +41 -0
- package/src/common/interfaces/flow.interface.js.map +1 -0
- package/src/common/interfaces/front-mcp.interface.js.map +1 -0
- package/src/common/interfaces/hook.interface.js.map +1 -0
- package/src/common/interfaces/index.js.map +1 -0
- package/src/common/interfaces/internal/flow.utils.d.ts +23 -0
- package/src/common/interfaces/internal/flow.utils.js.map +1 -0
- package/src/common/interfaces/internal/index.js.map +1 -0
- package/src/common/interfaces/internal/primary-auth-provider.interface.d.ts +24 -0
- package/src/common/interfaces/internal/primary-auth-provider.interface.js.map +1 -0
- package/src/common/interfaces/internal/registry.interface.d.ts +95 -0
- package/src/common/interfaces/internal/registry.interface.js.map +1 -0
- package/src/common/interfaces/logger.interface.js.map +1 -0
- package/src/common/interfaces/plugin.interface.js.map +1 -0
- package/src/common/interfaces/prompt.interface.js.map +1 -0
- package/src/common/interfaces/provider.interface.js.map +1 -0
- package/src/common/interfaces/resource.interface.js.map +1 -0
- package/src/common/interfaces/scope.interface.js.map +1 -0
- package/src/common/interfaces/server.interface.js.map +1 -0
- package/src/common/interfaces/session-hook.interface.js.map +1 -0
- package/src/common/interfaces/tool-hook.interface.js.map +1 -0
- package/src/common/interfaces/tool.interface.js.map +1 -0
- package/src/common/metadata/adapter.metadata.js.map +1 -0
- package/src/common/metadata/app.metadata.d.ts +872 -0
- package/src/common/metadata/app.metadata.js.map +1 -0
- package/src/common/metadata/auth-provider.metadata.js.map +1 -0
- package/src/common/metadata/flow.metadata.d.ts +77 -0
- package/src/common/metadata/flow.metadata.js.map +1 -0
- package/src/common/metadata/front-mcp.metadata.d.ts +1144 -0
- package/src/common/metadata/front-mcp.metadata.js.map +1 -0
- package/src/common/metadata/hook.metadata.js.map +1 -0
- package/src/common/metadata/index.js.map +1 -0
- package/src/common/metadata/logger.metadata.js.map +1 -0
- package/src/common/metadata/plugin.metadata.js.map +1 -0
- package/src/common/metadata/prompt.metadata.js.map +1 -0
- package/src/common/metadata/provider.metadata.js.map +1 -0
- package/src/common/metadata/resource.metadata.js.map +1 -0
- package/src/common/metadata/tool.metadata.d.ts +178 -0
- package/src/common/metadata/tool.metadata.js.map +1 -0
- package/src/common/providers/session.provider.js.map +1 -0
- package/src/common/records/adapter.record.js.map +1 -0
- package/src/common/records/app.record.js.map +1 -0
- package/src/common/records/auth-provider.record.js.map +1 -0
- package/src/common/records/flow.record.js.map +1 -0
- package/src/common/records/hook.record.js.map +1 -0
- package/src/common/records/index.js.map +1 -0
- package/src/common/records/logger.record.d.ts +11 -0
- package/src/common/records/logger.record.js.map +1 -0
- package/src/common/records/plugin.record.js.map +1 -0
- package/src/common/records/prompt.record.js.map +1 -0
- package/src/common/records/provider.record.js.map +1 -0
- package/src/common/records/resource.record.js.map +1 -0
- package/src/common/records/scope.record.js.map +1 -0
- package/src/common/records/tool.record.js.map +1 -0
- package/src/common/schemas/annotated-class.schema.js.map +1 -0
- package/src/common/schemas/http-input.schema.js.map +1 -0
- package/src/common/schemas/http-output.schema.d.ts +2011 -0
- package/src/common/schemas/http-output.schema.js.map +1 -0
- package/src/common/schemas/index.js.map +1 -0
- package/src/common/tokens/adapter.tokens.js.map +1 -0
- package/src/common/tokens/app.tokens.js.map +1 -0
- package/src/common/tokens/auth-provider.tokens.js.map +1 -0
- package/src/common/tokens/base.tokens.js.map +1 -0
- package/src/common/tokens/flow-hook.tokens.js.map +1 -0
- package/src/common/tokens/flow.tokens.js.map +1 -0
- package/src/common/tokens/front-mcp.tokens.js.map +1 -0
- package/src/common/tokens/index.js.map +1 -0
- package/src/common/tokens/logger.tokens.js.map +1 -0
- package/src/common/tokens/plugin.tokens.js.map +1 -0
- package/src/common/tokens/prompt.tokens.js.map +1 -0
- package/src/common/tokens/provider.tokens.js.map +1 -0
- package/src/common/tokens/resource.tokens.js.map +1 -0
- package/src/common/tokens/server.tokens.js.map +1 -0
- package/src/common/tokens/tool.tokens.js.map +1 -0
- package/src/common/types/auth/index.js.map +1 -0
- package/src/common/types/auth/jwt.types.js.map +1 -0
- package/src/common/types/auth/session.types.d.ts +263 -0
- package/src/common/types/auth/session.types.js.map +1 -0
- package/src/common/types/common.types.js.map +1 -0
- package/src/common/types/index.js.map +1 -0
- package/src/common/types/options/auth.options.d.ts +513 -0
- package/src/common/types/options/auth.options.js.map +1 -0
- package/src/common/types/options/http.options.js.map +1 -0
- package/src/common/types/options/index.js.map +1 -0
- package/src/common/types/options/logging.options.d.ts +39 -0
- package/src/common/types/options/logging.options.js.map +1 -0
- package/src/common/types/options/server-info.options.d.ts +48 -0
- package/src/common/types/options/server-info.options.js.map +1 -0
- package/src/common/types/options/session.options.d.ts +67 -0
- package/src/common/types/options/session.options.js.map +1 -0
- package/src/common/utils/decide-request-intent.utils.d.ts +79 -0
- package/src/common/utils/decide-request-intent.utils.js.map +1 -0
- package/src/common/utils/index.js.map +1 -0
- package/src/common/utils/path.utils.d.ts +20 -0
- package/src/common/utils/path.utils.js.map +1 -0
- package/src/exceptions/mcp-exceptions/session-missing.exception.d.ts +3 -0
- package/src/exceptions/mcp-exceptions/session-missing.exception.js +11 -0
- package/src/exceptions/mcp-exceptions/session-missing.exception.js.map +1 -0
- package/src/exceptions/mcp-exceptions/unsupported-client-version.exception.d.ts +5 -0
- package/src/exceptions/mcp-exceptions/unsupported-client-version.exception.js +15 -0
- package/src/exceptions/mcp-exceptions/unsupported-client-version.exception.js.map +1 -0
- package/src/flows/flow.instance.d.ts +16 -0
- package/src/flows/flow.instance.js +332 -0
- package/src/flows/flow.instance.js.map +1 -0
- package/src/flows/flow.registry.d.ts +14 -0
- package/src/flows/flow.registry.js +79 -0
- package/src/flows/flow.registry.js.map +1 -0
- package/src/flows/flow.stages.d.ts +12 -0
- package/src/flows/flow.stages.js +110 -0
- package/src/flows/flow.stages.js.map +1 -0
- package/src/flows/flow.utils.d.ts +8 -0
- package/src/flows/flow.utils.js +36 -0
- package/src/flows/flow.utils.js.map +1 -0
- package/src/front-mcp/front-mcp.d.ts +12 -0
- package/src/front-mcp/front-mcp.js +44 -0
- package/src/front-mcp/front-mcp.js.map +1 -0
- package/src/front-mcp/front-mcp.providers.d.ts +198 -0
- package/src/front-mcp/front-mcp.providers.js +30 -0
- package/src/front-mcp/front-mcp.providers.js.map +1 -0
- package/src/front-mcp/front-mcp.tokens.d.ts +2 -0
- package/src/front-mcp/front-mcp.tokens.js +5 -0
- package/src/front-mcp/front-mcp.tokens.js.map +1 -0
- package/src/front-mcp/index.d.ts +1 -0
- package/src/front-mcp/index.js +5 -0
- package/src/front-mcp/index.js.map +1 -0
- package/src/hooks/hook.instance.d.ts +7 -0
- package/src/hooks/hook.instance.js +23 -0
- package/src/hooks/hook.instance.js.map +1 -0
- package/src/hooks/hook.registry.d.ts +34 -0
- package/src/hooks/hook.registry.js +138 -0
- package/src/hooks/hook.registry.js.map +1 -0
- package/src/hooks/hooks.utils.d.ts +3 -0
- package/src/hooks/hooks.utils.js +27 -0
- package/src/hooks/hooks.utils.js.map +1 -0
- package/src/index.d.ts +21 -18
- package/src/index.js +9 -18
- package/src/index.js.map +1 -1
- package/src/logger/instances/instance.console-logger.d.ts +10 -0
- package/src/logger/instances/instance.console-logger.js +75 -0
- package/src/logger/instances/instance.console-logger.js.map +1 -0
- package/src/logger/instances/instance.logger.d.ts +24 -0
- package/src/logger/instances/instance.logger.js +77 -0
- package/src/logger/instances/instance.logger.js.map +1 -0
- package/src/logger/logger.registry.d.ts +13 -0
- package/src/logger/logger.registry.js +91 -0
- package/src/logger/logger.registry.js.map +1 -0
- package/src/logger/logger.tokens.d.ts +1 -0
- package/src/logger/logger.tokens.js +3 -0
- package/src/logger/logger.tokens.js.map +1 -0
- package/src/logger/logger.types.d.ts +10 -0
- package/src/logger/logger.types.js +8 -0
- package/src/logger/logger.types.js.map +1 -0
- package/src/logger/logger.utils.d.ts +15 -0
- package/src/logger/logger.utils.js +42 -0
- package/src/logger/logger.utils.js.map +1 -0
- package/src/plugin/plugin.registry.d.ts +24 -0
- package/src/plugin/plugin.registry.js +137 -0
- package/src/plugin/plugin.registry.js.map +1 -0
- package/src/plugin/plugin.utils.d.ts +10 -0
- package/src/plugin/plugin.utils.js +88 -0
- package/src/plugin/plugin.utils.js.map +1 -0
- package/src/prompt/prompt.registry.d.ts +16 -0
- package/src/prompt/prompt.registry.js +34 -0
- package/src/prompt/prompt.registry.js.map +1 -0
- package/src/provider/provider.registry.d.ts +75 -0
- package/src/provider/provider.registry.js +679 -0
- package/src/provider/provider.registry.js.map +1 -0
- package/src/provider/provider.types.d.ts +9 -0
- package/src/provider/provider.types.js +3 -0
- package/src/provider/provider.types.js.map +1 -0
- package/src/provider/provider.utils.d.ts +13 -0
- package/src/provider/provider.utils.js +103 -0
- package/src/provider/provider.utils.js.map +1 -0
- package/src/regsitry/index.d.ts +1 -0
- package/src/regsitry/index.js +5 -0
- package/src/regsitry/index.js.map +1 -0
- package/src/regsitry/registry.base.d.ts +25 -0
- package/src/regsitry/registry.base.js +32 -0
- package/src/regsitry/registry.base.js.map +1 -0
- package/src/resource/resource.registry.d.ts +15 -0
- package/src/resource/resource.registry.js +31 -0
- package/src/resource/resource.registry.js.map +1 -0
- package/src/scope/flows/http.request.flow.d.ts +384 -0
- package/src/scope/flows/http.request.flow.js +210 -0
- package/src/scope/flows/http.request.flow.js.map +1 -0
- package/src/scope/index.d.ts +1 -0
- package/src/scope/index.js +6 -0
- package/src/scope/index.js.map +1 -0
- package/src/scope/scope.instance.d.ts +35 -0
- package/src/scope/scope.instance.js +120 -0
- package/src/scope/scope.instance.js.map +1 -0
- package/src/scope/scope.registry.d.ts +10 -0
- package/src/scope/scope.registry.js +93 -0
- package/src/scope/scope.registry.js.map +1 -0
- package/src/scope/scope.utils.d.ts +13 -0
- package/src/scope/scope.utils.js +59 -0
- package/src/scope/scope.utils.js.map +1 -0
- package/src/server/adapters/base.host.adapter.d.ts +7 -0
- package/src/server/adapters/base.host.adapter.js +8 -0
- package/src/server/adapters/base.host.adapter.js.map +1 -0
- package/src/server/adapters/express.host.adapter.d.ts +12 -0
- package/src/server/adapters/express.host.adapter.js +50 -0
- package/src/server/adapters/express.host.adapter.js.map +1 -0
- package/src/server/server.instance.d.ts +12 -0
- package/src/server/server.instance.js +47 -0
- package/src/server/server.instance.js.map +1 -0
- package/src/server/server.types.d.ts +24 -0
- package/src/server/server.types.js +3 -0
- package/src/server/server.types.js.map +1 -0
- package/src/server/server.validation.d.ts +2 -0
- package/src/server/server.validation.js +192 -0
- package/src/server/server.validation.js.map +1 -0
- package/src/store/adapters/store.base.adapter.d.ts +21 -0
- package/src/store/adapters/store.base.adapter.js +16 -0
- package/src/store/adapters/store.base.adapter.js.map +1 -0
- package/src/store/adapters/store.memory.adapter.d.ts +26 -0
- package/src/store/adapters/store.memory.adapter.js +87 -0
- package/src/store/adapters/store.memory.adapter.js.map +1 -0
- package/src/store/adapters/store.redis.adapter.d.ts +33 -0
- package/src/store/adapters/store.redis.adapter.js +104 -0
- package/src/store/adapters/store.redis.adapter.js.map +1 -0
- package/src/store/index.d.ts +8 -0
- package/src/store/index.js +12 -0
- package/src/store/index.js.map +1 -0
- package/src/store/store.helpers.d.ts +9 -0
- package/src/store/store.helpers.js +67 -0
- package/src/store/store.helpers.js.map +1 -0
- package/src/store/store.registry.d.ts +13 -0
- package/src/store/store.registry.js +37 -0
- package/src/store/store.registry.js.map +1 -0
- package/src/store/store.tokens.d.ts +3 -0
- package/src/store/store.tokens.js +7 -0
- package/src/store/store.tokens.js.map +1 -0
- package/src/store/store.types.d.ts +64 -0
- package/src/store/store.types.js +11 -0
- package/src/store/store.types.js.map +1 -0
- package/src/store/store.utils.d.ts +8 -0
- package/src/store/store.utils.js +18 -0
- package/src/store/store.utils.js.map +1 -0
- package/src/tool/flows/call-tool.flow.d.ts +875 -0
- package/src/tool/flows/call-tool.flow.js +249 -0
- package/src/tool/flows/call-tool.flow.js.map +1 -0
- package/src/tool/flows/tools-list.flow.d.ts +771 -0
- package/src/tool/flows/tools-list.flow.js +149 -0
- package/src/tool/flows/tools-list.flow.js.map +1 -0
- package/src/tool/tool.events.d.ts +17 -0
- package/src/tool/tool.events.js +16 -0
- package/src/tool/tool.events.js.map +1 -0
- package/src/tool/tool.instance.d.ts +15 -0
- package/src/tool/tool.instance.js +68 -0
- package/src/tool/tool.instance.js.map +1 -0
- package/src/tool/tool.registry.d.ts +72 -0
- package/src/tool/tool.registry.js +339 -0
- package/src/tool/tool.registry.js.map +1 -0
- package/src/tool/tool.types.d.ts +25 -0
- package/src/tool/tool.types.js +10 -0
- package/src/tool/tool.types.js.map +1 -0
- package/src/tool/tool.utils.d.ts +20 -0
- package/src/tool/tool.utils.js +157 -0
- package/src/tool/tool.utils.js.map +1 -0
- package/src/transport/adapters/transport.local.adapter.d.ts +41 -0
- package/src/transport/adapters/transport.local.adapter.js +127 -0
- package/src/transport/adapters/transport.local.adapter.js.map +1 -0
- package/src/transport/adapters/transport.sse.adapter.d.ts +14 -0
- package/src/transport/adapters/transport.sse.adapter.js +63 -0
- package/src/transport/adapters/transport.sse.adapter.js.map +1 -0
- package/src/transport/adapters/transport.streamable-http.adapter.d.ts +13 -0
- package/src/transport/adapters/transport.streamable-http.adapter.js +65 -0
- package/src/transport/adapters/transport.streamable-http.adapter.js.map +1 -0
- package/src/transport/flows/handle.sse.flow.d.ts +92 -0
- package/src/transport/flows/handle.sse.flow.js +129 -0
- package/src/transport/flows/handle.sse.flow.js.map +1 -0
- package/src/transport/flows/handle.streamable-http.flow.d.ts +93 -0
- package/src/transport/flows/handle.streamable-http.flow.js +125 -0
- package/src/transport/flows/handle.streamable-http.flow.js.map +1 -0
- package/src/transport/legacy/legacy.sse.tranporter.d.ts +75 -0
- package/src/transport/legacy/legacy.sse.tranporter.js +170 -0
- package/src/transport/legacy/legacy.sse.tranporter.js.map +1 -0
- package/src/transport/mcp-handlers/Initialized-notification.hanlder.d.ts +3 -0
- package/src/transport/mcp-handlers/Initialized-notification.hanlder.js +14 -0
- package/src/transport/mcp-handlers/Initialized-notification.hanlder.js.map +1 -0
- package/src/transport/mcp-handlers/call-tool-request.handler.d.ts +3 -0
- package/src/transport/mcp-handlers/call-tool-request.handler.js +15 -0
- package/src/transport/mcp-handlers/call-tool-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/index.d.ts +521 -0
- package/src/transport/mcp-handlers/index.js +20 -0
- package/src/transport/mcp-handlers/index.js.map +1 -0
- package/src/transport/mcp-handlers/initialize-request.handler.d.ts +3 -0
- package/src/transport/mcp-handlers/initialize-request.handler.js +33 -0
- package/src/transport/mcp-handlers/initialize-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/list-tools-request.handler.d.ts +285 -0
- package/src/transport/mcp-handlers/list-tools-request.handler.js +11 -0
- package/src/transport/mcp-handlers/list-tools-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/mcp-handlers.types.d.ts +37 -0
- package/src/transport/mcp-handlers/mcp-handlers.types.js +3 -0
- package/src/transport/mcp-handlers/mcp-handlers.types.js.map +1 -0
- package/src/transport/transport.error.d.ts +4 -0
- package/src/transport/transport.error.js +25 -0
- package/src/transport/transport.error.js.map +1 -0
- package/src/transport/transport.event-store.d.ts +10 -0
- package/src/transport/transport.event-store.js +36 -0
- package/src/transport/transport.event-store.js.map +1 -0
- package/src/transport/transport.local.d.ts +17 -0
- package/src/transport/transport.local.js +65 -0
- package/src/transport/transport.local.js.map +1 -0
- package/src/transport/transport.registry.d.ts +23 -0
- package/src/transport/transport.registry.js +138 -0
- package/src/transport/transport.registry.js.map +1 -0
- package/src/transport/transport.remote.d.ts +15 -0
- package/src/transport/transport.remote.js +31 -0
- package/src/transport/transport.remote.js.map +1 -0
- package/src/transport/transport.types.d.ts +54 -0
- package/src/transport/transport.types.js +3 -0
- package/src/transport/transport.types.js.map +1 -0
- package/src/types/drinen-hooks.types.d.ts +20 -0
- package/src/types/drinen-hooks.types.js +3 -0
- package/src/types/drinen-hooks.types.js.map +1 -0
- package/src/types/invoke.type.d.ts +15 -0
- package/src/types/invoke.type.js +34 -0
- package/src/types/invoke.type.js.map +1 -0
- package/src/types/token.types.d.ts +1 -0
- package/src/types/token.types.js +3 -0
- package/src/types/token.types.js.map +1 -0
- package/src/utils/metadata.utils.d.ts +5 -0
- package/src/utils/metadata.utils.js +26 -0
- package/src/utils/metadata.utils.js.map +1 -0
- package/src/utils/server.utils.d.ts +19 -0
- package/src/utils/server.utils.js +59 -0
- package/src/utils/server.utils.js.map +1 -0
- package/src/utils/string.utils.d.ts +1 -0
- package/src/utils/string.utils.js +10 -0
- package/src/utils/string.utils.js.map +1 -0
- package/src/utils/token.utils.d.ts +11 -0
- package/src/utils/token.utils.js +65 -0
- package/src/utils/token.utils.js.map +1 -0
- package/src/utils/types.utils.d.ts +7 -0
- package/src/utils/types.utils.js +3 -0
- package/src/utils/types.utils.js.map +1 -0
- package/src/constants.d.ts +0 -30
- package/src/constants.js +0 -36
- package/src/constants.js.map +0 -1
- package/src/decorators/adapter.decorator.js.map +0 -1
- package/src/decorators/app.decorator.js.map +0 -1
- package/src/decorators/auth-provider.decorator.js.map +0 -1
- package/src/decorators/flow.decorator.js.map +0 -1
- package/src/decorators/front-mcp.decorator.js +0 -40
- package/src/decorators/front-mcp.decorator.js.map +0 -1
- package/src/decorators/hook.decorator.js.map +0 -1
- package/src/decorators/index.js.map +0 -1
- package/src/decorators/logger.decorator.js.map +0 -1
- package/src/decorators/plugin.decorator.js.map +0 -1
- package/src/decorators/prompt.decorator.js.map +0 -1
- package/src/decorators/provider.decorator.js.map +0 -1
- package/src/decorators/resource.decorator.js.map +0 -1
- package/src/decorators/tool.decorator.d.ts +0 -42
- package/src/decorators/tool.decorator.js +0 -45
- package/src/decorators/tool.decorator.js.map +0 -1
- package/src/decorators-old/async-with.decorator.d.ts +0 -9
- package/src/decorators-old/async-with.decorator.js +0 -23
- package/src/decorators-old/async-with.decorator.js.map +0 -1
- package/src/decorators-old/auth-hook.decorator.js.map +0 -1
- package/src/decorators-old/session-hook.decorator.js.map +0 -1
- package/src/decorators-old/tool-hook.decorator.d.ts +0 -14
- package/src/decorators-old/tool-hook.decorator.js +0 -27
- package/src/decorators-old/tool-hook.decorator.js.map +0 -1
- package/src/dynamic/dynamic.adapter.js.map +0 -1
- package/src/dynamic/dynamic.plugin.js.map +0 -1
- package/src/dynamic/dynamic.utils.d.ts +0 -3
- package/src/dynamic/dynamic.utils.js.map +0 -1
- package/src/dynamic/index.js.map +0 -1
- package/src/entries/adapter.entry.js.map +0 -1
- package/src/entries/app.entry.d.ts +0 -13
- package/src/entries/app.entry.js.map +0 -1
- package/src/entries/auth-provider.entry.js.map +0 -1
- package/src/entries/base.entry.js.map +0 -1
- package/src/entries/flow.entry.js.map +0 -1
- package/src/entries/hook.entry.js.map +0 -1
- package/src/entries/index.js.map +0 -1
- package/src/entries/logger.entry.js.map +0 -1
- package/src/entries/plugin.entry.js.map +0 -1
- package/src/entries/prompt.entry.js.map +0 -1
- package/src/entries/provider.entry.js.map +0 -1
- package/src/entries/resource.entry.js.map +0 -1
- package/src/entries/scope.entry.js.map +0 -1
- package/src/entries/tool.entry.js.map +0 -1
- package/src/interfaces/adapter.interface.js.map +0 -1
- package/src/interfaces/app.interface.js.map +0 -1
- package/src/interfaces/auth-hook.interface.js.map +0 -1
- package/src/interfaces/auth-provider.interface.js.map +0 -1
- package/src/interfaces/base.interface.js.map +0 -1
- package/src/interfaces/flow.interface.d.ts +0 -41
- package/src/interfaces/flow.interface.js.map +0 -1
- package/src/interfaces/front-mcp.interface.js.map +0 -1
- package/src/interfaces/hook.interface.js.map +0 -1
- package/src/interfaces/index.js.map +0 -1
- package/src/interfaces/internal/flow.utils.d.ts +0 -24
- package/src/interfaces/internal/flow.utils.js.map +0 -1
- package/src/interfaces/internal/index.js.map +0 -1
- package/src/interfaces/internal/primary-auth-provider.interface.d.ts +0 -24
- package/src/interfaces/internal/primary-auth-provider.interface.js.map +0 -1
- package/src/interfaces/internal/registry.interface.d.ts +0 -97
- package/src/interfaces/internal/registry.interface.js.map +0 -1
- package/src/interfaces/logger.interface.js.map +0 -1
- package/src/interfaces/plugin.interface.js.map +0 -1
- package/src/interfaces/prompt.interface.js.map +0 -1
- package/src/interfaces/provider.interface.js.map +0 -1
- package/src/interfaces/resource.interface.js.map +0 -1
- package/src/interfaces/scope.interface.js.map +0 -1
- package/src/interfaces/server.interface.js.map +0 -1
- package/src/interfaces/session-hook.interface.js.map +0 -1
- package/src/interfaces/tool-hook.interface.js.map +0 -1
- package/src/interfaces/tool.interface.js.map +0 -1
- package/src/metadata/adapter.metadata.js.map +0 -1
- package/src/metadata/app.metadata.d.ts +0 -872
- package/src/metadata/app.metadata.js.map +0 -1
- package/src/metadata/auth-provider.metadata.js.map +0 -1
- package/src/metadata/flow.metadata.d.ts +0 -77
- package/src/metadata/flow.metadata.js.map +0 -1
- package/src/metadata/front-mcp.metadata.d.ts +0 -1144
- package/src/metadata/front-mcp.metadata.js.map +0 -1
- package/src/metadata/hook.metadata.js.map +0 -1
- package/src/metadata/index.js.map +0 -1
- package/src/metadata/logger.metadata.js.map +0 -1
- package/src/metadata/plugin.metadata.js.map +0 -1
- package/src/metadata/prompt.metadata.js.map +0 -1
- package/src/metadata/provider.metadata.js.map +0 -1
- package/src/metadata/resource.metadata.js.map +0 -1
- package/src/metadata/tool.metadata.d.ts +0 -178
- package/src/metadata/tool.metadata.js.map +0 -1
- package/src/providers/session.provider.js.map +0 -1
- package/src/records/adapter.record.js.map +0 -1
- package/src/records/app.record.js.map +0 -1
- package/src/records/auth-provider.record.js.map +0 -1
- package/src/records/flow.record.js.map +0 -1
- package/src/records/hook.record.js.map +0 -1
- package/src/records/index.js.map +0 -1
- package/src/records/logger.record.d.ts +0 -11
- package/src/records/logger.record.js.map +0 -1
- package/src/records/plugin.record.js.map +0 -1
- package/src/records/prompt.record.js.map +0 -1
- package/src/records/provider.record.js.map +0 -1
- package/src/records/resource.record.js.map +0 -1
- package/src/records/scope.record.js.map +0 -1
- package/src/records/tool.record.js.map +0 -1
- package/src/schemas/annotated-class.schema.js.map +0 -1
- package/src/schemas/http-input.schema.js.map +0 -1
- package/src/schemas/http-output.schema.d.ts +0 -2011
- package/src/schemas/http-output.schema.js.map +0 -1
- package/src/schemas/index.js.map +0 -1
- package/src/tokens/adapter.tokens.js.map +0 -1
- package/src/tokens/app.tokens.js.map +0 -1
- package/src/tokens/auth-provider.tokens.js.map +0 -1
- package/src/tokens/base.tokens.js.map +0 -1
- package/src/tokens/flow-hook.tokens.js.map +0 -1
- package/src/tokens/flow.tokens.js.map +0 -1
- package/src/tokens/front-mcp.tokens.js.map +0 -1
- package/src/tokens/index.js.map +0 -1
- package/src/tokens/logger.tokens.js.map +0 -1
- package/src/tokens/plugin.tokens.js.map +0 -1
- package/src/tokens/prompt.tokens.js.map +0 -1
- package/src/tokens/provider.tokens.js.map +0 -1
- package/src/tokens/resource.tokens.js.map +0 -1
- package/src/tokens/server.tokens.js.map +0 -1
- package/src/tokens/tool.tokens.js.map +0 -1
- package/src/types/auth/index.js.map +0 -1
- package/src/types/auth/jwt.types.js.map +0 -1
- package/src/types/auth/session.types.d.ts +0 -263
- package/src/types/auth/session.types.js.map +0 -1
- package/src/types/common.types.js.map +0 -1
- package/src/types/index.js.map +0 -1
- package/src/types/options/auth.options.d.ts +0 -513
- package/src/types/options/auth.options.js.map +0 -1
- package/src/types/options/http.options.js.map +0 -1
- package/src/types/options/index.js.map +0 -1
- package/src/types/options/logging.options.d.ts +0 -39
- package/src/types/options/logging.options.js.map +0 -1
- package/src/types/options/server-info.options.d.ts +0 -48
- package/src/types/options/server-info.options.js.map +0 -1
- package/src/types/options/session.options.d.ts +0 -67
- package/src/types/options/session.options.js.map +0 -1
- package/src/utils/decide-request-intent.utils.d.ts +0 -79
- package/src/utils/decide-request-intent.utils.js.map +0 -1
- package/src/utils/index.js.map +0 -1
- package/src/utils/path.utils.d.ts +0 -20
- package/src/utils/path.utils.js.map +0 -1
- /package/src/{decorators → common/decorators}/adapter.decorator.d.ts +0 -0
- /package/src/{decorators → common/decorators}/adapter.decorator.js +0 -0
- /package/src/{decorators → common/decorators}/app.decorator.d.ts +0 -0
- /package/src/{decorators → common/decorators}/app.decorator.js +0 -0
- /package/src/{decorators → common/decorators}/auth-provider.decorator.d.ts +0 -0
- /package/src/{decorators → common/decorators}/auth-provider.decorator.js +0 -0
- /package/src/{decorators → common/decorators}/flow.decorator.d.ts +0 -0
- /package/src/{decorators → common/decorators}/flow.decorator.js +0 -0
- /package/src/{decorators → common/decorators}/front-mcp.decorator.d.ts +0 -0
- /package/src/{decorators → common/decorators}/hook.decorator.d.ts +0 -0
- /package/src/{decorators → common/decorators}/hook.decorator.js +0 -0
- /package/src/{decorators → common/decorators}/index.d.ts +0 -0
- /package/src/{decorators → common/decorators}/index.js +0 -0
- /package/src/{decorators → common/decorators}/logger.decorator.d.ts +0 -0
- /package/src/{decorators → common/decorators}/logger.decorator.js +0 -0
- /package/src/{decorators → common/decorators}/plugin.decorator.d.ts +0 -0
- /package/src/{decorators → common/decorators}/plugin.decorator.js +0 -0
- /package/src/{decorators → common/decorators}/prompt.decorator.d.ts +0 -0
- /package/src/{decorators → common/decorators}/prompt.decorator.js +0 -0
- /package/src/{decorators → common/decorators}/provider.decorator.d.ts +0 -0
- /package/src/{decorators → common/decorators}/provider.decorator.js +0 -0
- /package/src/{decorators → common/decorators}/resource.decorator.d.ts +0 -0
- /package/src/{decorators → common/decorators}/resource.decorator.js +0 -0
- /package/src/{decorators-old → common/decorators-old}/auth-hook.decorator.d.ts +0 -0
- /package/src/{decorators-old → common/decorators-old}/auth-hook.decorator.js +0 -0
- /package/src/{decorators-old → common/decorators-old}/session-hook.decorator.d.ts +0 -0
- /package/src/{decorators-old → common/decorators-old}/session-hook.decorator.js +0 -0
- /package/src/{dynamic → common/dynamic}/dynamic.adapter.d.ts +0 -0
- /package/src/{dynamic → common/dynamic}/dynamic.adapter.js +0 -0
- /package/src/{dynamic → common/dynamic}/dynamic.plugin.d.ts +0 -0
- /package/src/{dynamic → common/dynamic}/dynamic.plugin.js +0 -0
- /package/src/{dynamic → common/dynamic}/dynamic.utils.js +0 -0
- /package/src/{dynamic → common/dynamic}/index.d.ts +0 -0
- /package/src/{dynamic → common/dynamic}/index.js +0 -0
- /package/src/{entries → common/entries}/adapter.entry.d.ts +0 -0
- /package/src/{entries → common/entries}/adapter.entry.js +0 -0
- /package/src/{entries → common/entries}/app.entry.js +0 -0
- /package/src/{entries → common/entries}/auth-provider.entry.d.ts +0 -0
- /package/src/{entries → common/entries}/auth-provider.entry.js +0 -0
- /package/src/{entries → common/entries}/base.entry.d.ts +0 -0
- /package/src/{entries → common/entries}/base.entry.js +0 -0
- /package/src/{entries → common/entries}/flow.entry.d.ts +0 -0
- /package/src/{entries → common/entries}/flow.entry.js +0 -0
- /package/src/{entries → common/entries}/hook.entry.d.ts +0 -0
- /package/src/{entries → common/entries}/hook.entry.js +0 -0
- /package/src/{entries → common/entries}/index.d.ts +0 -0
- /package/src/{entries → common/entries}/index.js +0 -0
- /package/src/{entries → common/entries}/logger.entry.d.ts +0 -0
- /package/src/{entries → common/entries}/logger.entry.js +0 -0
- /package/src/{entries → common/entries}/plugin.entry.d.ts +0 -0
- /package/src/{entries → common/entries}/plugin.entry.js +0 -0
- /package/src/{entries → common/entries}/prompt.entry.d.ts +0 -0
- /package/src/{entries → common/entries}/prompt.entry.js +0 -0
- /package/src/{entries → common/entries}/provider.entry.d.ts +0 -0
- /package/src/{entries → common/entries}/provider.entry.js +0 -0
- /package/src/{entries → common/entries}/resource.entry.d.ts +0 -0
- /package/src/{entries → common/entries}/resource.entry.js +0 -0
- /package/src/{entries → common/entries}/scope.entry.d.ts +0 -0
- /package/src/{entries → common/entries}/scope.entry.js +0 -0
- /package/src/{entries → common/entries}/tool.entry.d.ts +0 -0
- /package/src/{entries → common/entries}/tool.entry.js +0 -0
- /package/src/{interfaces → common/interfaces}/adapter.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/adapter.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/app.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/app.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/auth-hook.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/auth-hook.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/auth-provider.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/auth-provider.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/base.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/base.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/flow.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/front-mcp.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/front-mcp.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/hook.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/hook.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/index.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/index.js +0 -0
- /package/src/{interfaces → common/interfaces}/internal/flow.utils.js +0 -0
- /package/src/{interfaces → common/interfaces}/internal/index.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/internal/index.js +0 -0
- /package/src/{interfaces → common/interfaces}/internal/primary-auth-provider.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/internal/registry.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/logger.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/logger.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/plugin.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/plugin.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/prompt.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/prompt.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/provider.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/provider.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/resource.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/resource.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/scope.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/scope.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/server.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/server.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/session-hook.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/session-hook.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/tool-hook.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/tool-hook.interface.js +0 -0
- /package/src/{interfaces → common/interfaces}/tool.interface.d.ts +0 -0
- /package/src/{interfaces → common/interfaces}/tool.interface.js +0 -0
- /package/src/{metadata → common/metadata}/adapter.metadata.d.ts +0 -0
- /package/src/{metadata → common/metadata}/adapter.metadata.js +0 -0
- /package/src/{metadata → common/metadata}/app.metadata.js +0 -0
- /package/src/{metadata → common/metadata}/auth-provider.metadata.d.ts +0 -0
- /package/src/{metadata → common/metadata}/auth-provider.metadata.js +0 -0
- /package/src/{metadata → common/metadata}/flow.metadata.js +0 -0
- /package/src/{metadata → common/metadata}/front-mcp.metadata.js +0 -0
- /package/src/{metadata → common/metadata}/hook.metadata.d.ts +0 -0
- /package/src/{metadata → common/metadata}/hook.metadata.js +0 -0
- /package/src/{metadata → common/metadata}/index.d.ts +0 -0
- /package/src/{metadata → common/metadata}/index.js +0 -0
- /package/src/{metadata → common/metadata}/logger.metadata.d.ts +0 -0
- /package/src/{metadata → common/metadata}/logger.metadata.js +0 -0
- /package/src/{metadata → common/metadata}/plugin.metadata.d.ts +0 -0
- /package/src/{metadata → common/metadata}/plugin.metadata.js +0 -0
- /package/src/{metadata → common/metadata}/prompt.metadata.d.ts +0 -0
- /package/src/{metadata → common/metadata}/prompt.metadata.js +0 -0
- /package/src/{metadata → common/metadata}/provider.metadata.d.ts +0 -0
- /package/src/{metadata → common/metadata}/provider.metadata.js +0 -0
- /package/src/{metadata → common/metadata}/resource.metadata.d.ts +0 -0
- /package/src/{metadata → common/metadata}/resource.metadata.js +0 -0
- /package/src/{metadata → common/metadata}/tool.metadata.js +0 -0
- /package/src/{providers → common/providers}/session.provider.d.ts +0 -0
- /package/src/{providers → common/providers}/session.provider.js +0 -0
- /package/src/{records → common/records}/adapter.record.d.ts +0 -0
- /package/src/{records → common/records}/adapter.record.js +0 -0
- /package/src/{records → common/records}/app.record.d.ts +0 -0
- /package/src/{records → common/records}/app.record.js +0 -0
- /package/src/{records → common/records}/auth-provider.record.d.ts +0 -0
- /package/src/{records → common/records}/auth-provider.record.js +0 -0
- /package/src/{records → common/records}/flow.record.d.ts +0 -0
- /package/src/{records → common/records}/flow.record.js +0 -0
- /package/src/{records → common/records}/hook.record.d.ts +0 -0
- /package/src/{records → common/records}/hook.record.js +0 -0
- /package/src/{records → common/records}/index.d.ts +0 -0
- /package/src/{records → common/records}/index.js +0 -0
- /package/src/{records → common/records}/logger.record.js +0 -0
- /package/src/{records → common/records}/plugin.record.d.ts +0 -0
- /package/src/{records → common/records}/plugin.record.js +0 -0
- /package/src/{records → common/records}/prompt.record.d.ts +0 -0
- /package/src/{records → common/records}/prompt.record.js +0 -0
- /package/src/{records → common/records}/provider.record.d.ts +0 -0
- /package/src/{records → common/records}/provider.record.js +0 -0
- /package/src/{records → common/records}/resource.record.d.ts +0 -0
- /package/src/{records → common/records}/resource.record.js +0 -0
- /package/src/{records → common/records}/scope.record.d.ts +0 -0
- /package/src/{records → common/records}/scope.record.js +0 -0
- /package/src/{records → common/records}/tool.record.d.ts +0 -0
- /package/src/{records → common/records}/tool.record.js +0 -0
- /package/src/{schemas → common/schemas}/annotated-class.schema.d.ts +0 -0
- /package/src/{schemas → common/schemas}/annotated-class.schema.js +0 -0
- /package/src/{schemas → common/schemas}/http-input.schema.d.ts +0 -0
- /package/src/{schemas → common/schemas}/http-input.schema.js +0 -0
- /package/src/{schemas → common/schemas}/http-output.schema.js +0 -0
- /package/src/{schemas → common/schemas}/index.d.ts +0 -0
- /package/src/{schemas → common/schemas}/index.js +0 -0
- /package/src/{tokens → common/tokens}/adapter.tokens.d.ts +0 -0
- /package/src/{tokens → common/tokens}/adapter.tokens.js +0 -0
- /package/src/{tokens → common/tokens}/app.tokens.d.ts +0 -0
- /package/src/{tokens → common/tokens}/app.tokens.js +0 -0
- /package/src/{tokens → common/tokens}/auth-provider.tokens.d.ts +0 -0
- /package/src/{tokens → common/tokens}/auth-provider.tokens.js +0 -0
- /package/src/{tokens → common/tokens}/base.tokens.d.ts +0 -0
- /package/src/{tokens → common/tokens}/base.tokens.js +0 -0
- /package/src/{tokens → common/tokens}/flow-hook.tokens.d.ts +0 -0
- /package/src/{tokens → common/tokens}/flow-hook.tokens.js +0 -0
- /package/src/{tokens → common/tokens}/flow.tokens.d.ts +0 -0
- /package/src/{tokens → common/tokens}/flow.tokens.js +0 -0
- /package/src/{tokens → common/tokens}/front-mcp.tokens.d.ts +0 -0
- /package/src/{tokens → common/tokens}/front-mcp.tokens.js +0 -0
- /package/src/{tokens → common/tokens}/index.d.ts +0 -0
- /package/src/{tokens → common/tokens}/index.js +0 -0
- /package/src/{tokens → common/tokens}/logger.tokens.d.ts +0 -0
- /package/src/{tokens → common/tokens}/logger.tokens.js +0 -0
- /package/src/{tokens → common/tokens}/plugin.tokens.d.ts +0 -0
- /package/src/{tokens → common/tokens}/plugin.tokens.js +0 -0
- /package/src/{tokens → common/tokens}/prompt.tokens.d.ts +0 -0
- /package/src/{tokens → common/tokens}/prompt.tokens.js +0 -0
- /package/src/{tokens → common/tokens}/provider.tokens.d.ts +0 -0
- /package/src/{tokens → common/tokens}/provider.tokens.js +0 -0
- /package/src/{tokens → common/tokens}/resource.tokens.d.ts +0 -0
- /package/src/{tokens → common/tokens}/resource.tokens.js +0 -0
- /package/src/{tokens → common/tokens}/server.tokens.d.ts +0 -0
- /package/src/{tokens → common/tokens}/server.tokens.js +0 -0
- /package/src/{tokens → common/tokens}/tool.tokens.d.ts +0 -0
- /package/src/{tokens → common/tokens}/tool.tokens.js +0 -0
- /package/src/{types → common/types}/auth/index.d.ts +0 -0
- /package/src/{types → common/types}/auth/index.js +0 -0
- /package/src/{types → common/types}/auth/jwt.types.d.ts +0 -0
- /package/src/{types → common/types}/auth/jwt.types.js +0 -0
- /package/src/{types → common/types}/auth/session.types.js +0 -0
- /package/src/{types → common/types}/common.types.d.ts +0 -0
- /package/src/{types → common/types}/common.types.js +0 -0
- /package/src/{types → common/types}/index.d.ts +0 -0
- /package/src/{types → common/types}/index.js +0 -0
- /package/src/{types → common/types}/options/auth.options.js +0 -0
- /package/src/{types → common/types}/options/http.options.d.ts +0 -0
- /package/src/{types → common/types}/options/http.options.js +0 -0
- /package/src/{types → common/types}/options/index.d.ts +0 -0
- /package/src/{types → common/types}/options/index.js +0 -0
- /package/src/{types → common/types}/options/logging.options.js +0 -0
- /package/src/{types → common/types}/options/server-info.options.js +0 -0
- /package/src/{types → common/types}/options/session.options.js +0 -0
- /package/src/{utils → common/utils}/decide-request-intent.utils.js +0 -0
- /package/src/{utils → common/utils}/index.d.ts +0 -0
- /package/src/{utils → common/utils}/index.js +0 -0
- /package/src/{utils → common/utils}/path.utils.js +0 -0
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// noinspection ExceptionCaughtLocallyJS
|
|
3
|
+
// flows/flow.instance.ts
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.FlowInstance = void 0;
|
|
6
|
+
require("reflect-metadata");
|
|
7
|
+
const common_1 = require("../common");
|
|
8
|
+
const flow_stages_1 = require("./flow.stages");
|
|
9
|
+
const server_validation_1 = require("../server/server.validation");
|
|
10
|
+
const CAP = (s) => (s ? s[0].toUpperCase() + s.slice(1) : s);
|
|
11
|
+
const WILL = (s) => `will${CAP(s)}`;
|
|
12
|
+
const DID = (s) => `did${CAP(s)}`;
|
|
13
|
+
const AROUND = (s) => `around${CAP(s)}`;
|
|
14
|
+
function parseTypedKey(k) {
|
|
15
|
+
const lc = k.toLowerCase();
|
|
16
|
+
if (lc.startsWith('will') && k.length > 4)
|
|
17
|
+
return { base: k.slice(4, 5).toLowerCase() + k.slice(5), type: 'will' };
|
|
18
|
+
if (lc.startsWith('did') && k.length > 3)
|
|
19
|
+
return { base: k.slice(3, 4).toLowerCase() + k.slice(4), type: 'did' };
|
|
20
|
+
if (lc.startsWith('around') && k.length > 6)
|
|
21
|
+
return { base: k.slice(6, 7).toLowerCase() + k.slice(7), type: 'around' };
|
|
22
|
+
return { base: k };
|
|
23
|
+
}
|
|
24
|
+
class FlowInstance extends common_1.FlowEntry {
|
|
25
|
+
deps;
|
|
26
|
+
globalProviders;
|
|
27
|
+
plan;
|
|
28
|
+
FlowClass;
|
|
29
|
+
stages;
|
|
30
|
+
hooks;
|
|
31
|
+
constructor(scope, record, deps, globalProviders) {
|
|
32
|
+
super(scope, record);
|
|
33
|
+
this.deps = [...deps];
|
|
34
|
+
this.globalProviders = globalProviders;
|
|
35
|
+
this.FlowClass = this.record.provide;
|
|
36
|
+
this.ready = this.initialize();
|
|
37
|
+
this.plan = this.record.metadata.plan;
|
|
38
|
+
this.hooks = scope.providers.getHooksRegistry();
|
|
39
|
+
}
|
|
40
|
+
async initialize() {
|
|
41
|
+
const server = this.globalProviders.getActiveServer();
|
|
42
|
+
this.stages = (0, flow_stages_1.collectFlowHookMap)(this.FlowClass);
|
|
43
|
+
const { middleware } = this.metadata;
|
|
44
|
+
if (middleware) {
|
|
45
|
+
const path = typeof middleware.path === 'string' ? middleware.path : '';
|
|
46
|
+
server.registerMiddleware(path, async (request, response, next) => {
|
|
47
|
+
const canActivate = await this.canActivate(request);
|
|
48
|
+
if (!canActivate)
|
|
49
|
+
return next();
|
|
50
|
+
try {
|
|
51
|
+
const result = await this.run({ request, response, next }, new Map());
|
|
52
|
+
if (result)
|
|
53
|
+
return (0, server_validation_1.writeHttpResponse)(response, result);
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
if (e instanceof common_1.FlowControl) {
|
|
57
|
+
switch (e.type) {
|
|
58
|
+
case 'abort':
|
|
59
|
+
return (0, server_validation_1.writeHttpResponse)(response, { kind: 'text', status: 500, body: 'Aborted' });
|
|
60
|
+
case 'fail':
|
|
61
|
+
return (0, server_validation_1.writeHttpResponse)(response, { kind: 'text', status: 500, body: 'Internal Server Error' });
|
|
62
|
+
case 'handled':
|
|
63
|
+
return;
|
|
64
|
+
case 'next':
|
|
65
|
+
return next();
|
|
66
|
+
case 'respond':
|
|
67
|
+
return (0, server_validation_1.writeHttpResponse)(response, e.output);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// eslint-disable-next-line no-console
|
|
71
|
+
console.error(e);
|
|
72
|
+
return (0, server_validation_1.writeHttpResponse)(response, {
|
|
73
|
+
kind: 'text',
|
|
74
|
+
status: 500,
|
|
75
|
+
body: 'Internal Server Error',
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return next();
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return Promise.resolve();
|
|
82
|
+
}
|
|
83
|
+
async canActivate(request) {
|
|
84
|
+
if (this.method && request.method !== this.method)
|
|
85
|
+
return false;
|
|
86
|
+
const canActivate = this.metadata.middleware?.canActivate ?? [];
|
|
87
|
+
if (this.FlowClass['canActivate']) {
|
|
88
|
+
canActivate.push(this.FlowClass['canActivate']);
|
|
89
|
+
}
|
|
90
|
+
if (canActivate.length === 0)
|
|
91
|
+
return true;
|
|
92
|
+
const results = await Promise.all(canActivate.map((m) => m(request, this.scope)));
|
|
93
|
+
return results.every((r) => r);
|
|
94
|
+
}
|
|
95
|
+
async run(input, deps) {
|
|
96
|
+
const scope = this.globalProviders.getActiveScope();
|
|
97
|
+
const { FlowClass, plan, name } = this;
|
|
98
|
+
// Clone stages so we can merge injections safely per run.
|
|
99
|
+
const baseStages = this.stages;
|
|
100
|
+
let stages = (0, flow_stages_1.cloneStageMap)(baseStages);
|
|
101
|
+
// Compute next order base after any class-defined entries.
|
|
102
|
+
let orderBase = Math.max(0, ...Object.values(stages).flatMap((list) => list.map((e) => e._order ?? 0))) + 1;
|
|
103
|
+
const initialInjectedHooks = this.hooks.getFlowHooks(name) ?? [];
|
|
104
|
+
let context;
|
|
105
|
+
let contextReady = false;
|
|
106
|
+
const materializeAndMerge = async (newHooks, opts) => {
|
|
107
|
+
if (!newHooks?.length || !contextReady)
|
|
108
|
+
return;
|
|
109
|
+
const metas = [];
|
|
110
|
+
for (const h of newHooks) {
|
|
111
|
+
try {
|
|
112
|
+
metas.push(h.metadata);
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
// eslint-disable-next-line no-console
|
|
116
|
+
console.warn('[flow] Ignoring injected hook that failed to materialize:', e);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (metas.length) {
|
|
120
|
+
const start = opts?.orderStart ?? orderBase;
|
|
121
|
+
(0, flow_stages_1.mergeHookMetasIntoStageMap)(FlowClass, stages, metas, start);
|
|
122
|
+
if (opts?.orderStart === undefined)
|
|
123
|
+
orderBase += metas.length;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
const appendContextHooks = async (hooks) => {
|
|
127
|
+
await materializeAndMerge(hooks);
|
|
128
|
+
};
|
|
129
|
+
// Construct flow instance
|
|
130
|
+
context = new FlowClass(this.metadata, input, scope, appendContextHooks, deps);
|
|
131
|
+
// Now injections can materialize
|
|
132
|
+
contextReady = true;
|
|
133
|
+
// Initial registry hooks should not pre-empt stages; they just get registered
|
|
134
|
+
await materializeAndMerge(initialInjectedHooks, { orderStart: -1_000_000 });
|
|
135
|
+
// Refresh order base to be after everything currently present
|
|
136
|
+
orderBase =
|
|
137
|
+
Math.max(0, ...Object.values(stages).flatMap((list) => list.map((e) => e._order ?? 0))) + 1;
|
|
138
|
+
let responded;
|
|
139
|
+
// Robust list runner (doesn't skip mid-run insertions)
|
|
140
|
+
const runList = async (key, opts) => {
|
|
141
|
+
const getList = () => (stages[key] ?? []);
|
|
142
|
+
const seen = new Set();
|
|
143
|
+
while (true) {
|
|
144
|
+
const list = getList();
|
|
145
|
+
const item = list.find((e) => !seen.has(e));
|
|
146
|
+
if (!item)
|
|
147
|
+
break;
|
|
148
|
+
seen.add(item);
|
|
149
|
+
try {
|
|
150
|
+
await item.method(context);
|
|
151
|
+
}
|
|
152
|
+
catch (e) {
|
|
153
|
+
if (e instanceof common_1.FlowControl) {
|
|
154
|
+
if (e.type === 'respond') {
|
|
155
|
+
if (!opts?.ignoreRespond) {
|
|
156
|
+
responded = e.output;
|
|
157
|
+
return { outcome: 'respond', control: e };
|
|
158
|
+
}
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
return { outcome: e.type, control: e };
|
|
162
|
+
}
|
|
163
|
+
return { outcome: 'unknown_error', control: e };
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return { outcome: 'ok' };
|
|
167
|
+
};
|
|
168
|
+
// Run exactly one stage in order: will → around → stage → did (did runs once)
|
|
169
|
+
const runOneStage = async (stageName, stopOnRespond) => {
|
|
170
|
+
// 1) willStage
|
|
171
|
+
{
|
|
172
|
+
const res = await runList(WILL(stageName));
|
|
173
|
+
if (res.outcome === 'respond' && stopOnRespond)
|
|
174
|
+
return res;
|
|
175
|
+
if (res.outcome !== 'ok' && res.outcome !== 'respond')
|
|
176
|
+
return res;
|
|
177
|
+
}
|
|
178
|
+
// 2) aroundStage (acts as pre-handlers unless you later add true wrapping)
|
|
179
|
+
{
|
|
180
|
+
const res = await runList(AROUND(stageName));
|
|
181
|
+
if (res.outcome === 'respond' && stopOnRespond)
|
|
182
|
+
return res;
|
|
183
|
+
if (res.outcome !== 'ok' && res.outcome !== 'respond')
|
|
184
|
+
return res;
|
|
185
|
+
}
|
|
186
|
+
// 3) stage
|
|
187
|
+
let bodyOutcome = { outcome: 'ok' };
|
|
188
|
+
{
|
|
189
|
+
const res = await runList(stageName, { ignoreRespond: false });
|
|
190
|
+
bodyOutcome = res;
|
|
191
|
+
if (res.outcome !== 'ok' && res.outcome !== 'respond') {
|
|
192
|
+
// fail/abort/next/handled/unknown → do NOT run did
|
|
193
|
+
// return res;/
|
|
194
|
+
throw res.control;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// 4) didStage (run once regardless of body respond)
|
|
198
|
+
{
|
|
199
|
+
const res = await runList(DID(stageName), { ignoreRespond: true });
|
|
200
|
+
if (res.outcome !== 'ok' && res.outcome !== 'respond')
|
|
201
|
+
return res;
|
|
202
|
+
}
|
|
203
|
+
if (bodyOutcome.outcome === 'respond')
|
|
204
|
+
return bodyOutcome;
|
|
205
|
+
return { outcome: 'ok' };
|
|
206
|
+
};
|
|
207
|
+
// IMPORTANT: ignore typed stage names in plan arrays.
|
|
208
|
+
// Only base stage names in the plan drive execution; typed hooks run *with* their base.
|
|
209
|
+
const runStageGroup = async (group, stopOnRespond, opts) => {
|
|
210
|
+
if (!group || group.length === 0)
|
|
211
|
+
return { outcome: 'ok' };
|
|
212
|
+
const seenBase = new Set();
|
|
213
|
+
for (const rawKey of group) {
|
|
214
|
+
const { base, type } = parseTypedKey(rawKey);
|
|
215
|
+
if (type) {
|
|
216
|
+
// Soft warning once per typed key occurrence (optional)
|
|
217
|
+
// console.warn(`[flow] Ignoring typed stage "${rawKey}" in plan; hooks will run with base "${base}".`);
|
|
218
|
+
continue; // Do not run typed keys as standalone stages
|
|
219
|
+
}
|
|
220
|
+
if (seenBase.has(base))
|
|
221
|
+
continue;
|
|
222
|
+
seenBase.add(base);
|
|
223
|
+
const res = await runOneStage(base, stopOnRespond);
|
|
224
|
+
if (res.outcome === 'respond') {
|
|
225
|
+
if (stopOnRespond)
|
|
226
|
+
return res;
|
|
227
|
+
// else keep going
|
|
228
|
+
}
|
|
229
|
+
else if (res.outcome !== 'ok') {
|
|
230
|
+
return res.control?.['output'] ?? res.outcome;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return { outcome: 'ok' };
|
|
234
|
+
};
|
|
235
|
+
const runErrorStage = async () => {
|
|
236
|
+
await runStageGroup(plan.error, false, { ignoreRespond: true });
|
|
237
|
+
};
|
|
238
|
+
const runFinalizeStage = async () => {
|
|
239
|
+
await runStageGroup(plan.finalize, false);
|
|
240
|
+
};
|
|
241
|
+
try {
|
|
242
|
+
// ---------- PRE ----------
|
|
243
|
+
{
|
|
244
|
+
const pre = await runStageGroup(plan.pre, true);
|
|
245
|
+
if (pre.outcome === 'respond') {
|
|
246
|
+
const post = await runStageGroup(plan.post, false);
|
|
247
|
+
if (post.outcome === 'unknown_error' || post.outcome === 'fail') {
|
|
248
|
+
try {
|
|
249
|
+
await runErrorStage();
|
|
250
|
+
}
|
|
251
|
+
finally {
|
|
252
|
+
await runFinalizeStage();
|
|
253
|
+
}
|
|
254
|
+
if (post.outcome === 'fail')
|
|
255
|
+
throw post.control;
|
|
256
|
+
throw post.control;
|
|
257
|
+
}
|
|
258
|
+
if (post.outcome === 'abort' || post.outcome === 'next' || post.outcome === 'handled') {
|
|
259
|
+
await runFinalizeStage();
|
|
260
|
+
throw post.control;
|
|
261
|
+
}
|
|
262
|
+
await runFinalizeStage();
|
|
263
|
+
return responded;
|
|
264
|
+
}
|
|
265
|
+
if (pre.outcome === 'unknown_error' || pre.outcome === 'fail') {
|
|
266
|
+
try {
|
|
267
|
+
await runErrorStage();
|
|
268
|
+
}
|
|
269
|
+
finally {
|
|
270
|
+
await runFinalizeStage();
|
|
271
|
+
}
|
|
272
|
+
if (pre.outcome === 'fail')
|
|
273
|
+
throw pre.control;
|
|
274
|
+
throw pre.control;
|
|
275
|
+
}
|
|
276
|
+
if (pre.outcome === 'abort' || pre.outcome === 'next' || pre.outcome === 'handled') {
|
|
277
|
+
await runFinalizeStage();
|
|
278
|
+
throw pre.control;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// ---------- EXECUTE ----------
|
|
282
|
+
if (!responded) {
|
|
283
|
+
const exec = await runStageGroup(plan.execute, true);
|
|
284
|
+
if (exec.outcome === 'respond') {
|
|
285
|
+
// continue to post + finalize
|
|
286
|
+
}
|
|
287
|
+
else if (exec.outcome === 'unknown_error' || exec.outcome === 'fail') {
|
|
288
|
+
try {
|
|
289
|
+
await runErrorStage();
|
|
290
|
+
}
|
|
291
|
+
finally {
|
|
292
|
+
await runFinalizeStage();
|
|
293
|
+
}
|
|
294
|
+
if (exec.outcome === 'fail')
|
|
295
|
+
throw exec.control;
|
|
296
|
+
throw exec.control;
|
|
297
|
+
}
|
|
298
|
+
else if (exec.outcome === 'abort' || exec.outcome === 'next' || exec.outcome === 'handled') {
|
|
299
|
+
await runFinalizeStage();
|
|
300
|
+
throw exec.control;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// ---------- POST ----------
|
|
304
|
+
{
|
|
305
|
+
const post = await runStageGroup(plan.post, false);
|
|
306
|
+
if (post.outcome === 'unknown_error' || post.outcome === 'fail') {
|
|
307
|
+
try {
|
|
308
|
+
await runErrorStage();
|
|
309
|
+
}
|
|
310
|
+
finally {
|
|
311
|
+
await runFinalizeStage();
|
|
312
|
+
}
|
|
313
|
+
if (post.outcome === 'fail')
|
|
314
|
+
throw post.control;
|
|
315
|
+
throw post.control;
|
|
316
|
+
}
|
|
317
|
+
if (post.outcome === 'abort' || post.outcome === 'next' || post.outcome === 'handled') {
|
|
318
|
+
await runFinalizeStage();
|
|
319
|
+
throw post.control;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// ---------- FINALIZE ----------
|
|
323
|
+
await runFinalizeStage();
|
|
324
|
+
return responded;
|
|
325
|
+
}
|
|
326
|
+
catch (e) {
|
|
327
|
+
throw e;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
exports.FlowInstance = FlowInstance;
|
|
332
|
+
//# sourceMappingURL=flow.instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.instance.js","sourceRoot":"","sources":["../../../src/flows/flow.instance.ts"],"names":[],"mappings":"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","sourcesContent":["// noinspection ExceptionCaughtLocallyJS\n// flows/flow.instance.ts\n\nimport 'reflect-metadata';\nimport {\n FlowControl,\n FlowCtxOf,\n FlowEntry,\n FlowInputOf,\n FlowName,\n FlowOutputOf,\n FlowPlan,\n FlowRecord,\n FlowStagesOf,\n FlowType,\n HookEntry,\n HookMetadata,\n Reference,\n ServerRequest,\n Token,\n Type,\n} from '../common';\nimport ProviderRegistry from '../provider/provider.registry';\nimport {\n collectFlowHookMap,\n StageMap,\n cloneStageMap,\n mergeHookMetasIntoStageMap,\n} from './flow.stages';\nimport {writeHttpResponse} from '../server/server.validation';\nimport {Scope} from '../scope';\nimport HookRegistry from '../hooks/hook.registry';\nimport {rpcError} from \"../transport/transport.error\";\n\ntype StageOutcome =\n | 'ok'\n | 'respond'\n | 'next'\n | 'handled'\n | 'fail'\n | 'abort'\n | 'unknown_error';\n\ninterface StageResult {\n outcome: StageOutcome;\n control?: FlowControl | Error;\n}\n\nconst CAP = (s: string) => (s ? s[0].toUpperCase() + s.slice(1) : s);\nconst WILL = (s: string) => `will${CAP(s)}`;\nconst DID = (s: string) => `did${CAP(s)}`;\nconst AROUND = (s: string) => `around${CAP(s)}`;\n\nfunction parseTypedKey(k: string): { base: string; type?: 'will' | 'did' | 'around' } {\n const lc = k.toLowerCase();\n if (lc.startsWith('will') && k.length > 4) return {base: k.slice(4, 5).toLowerCase() + k.slice(5), type: 'will'};\n if (lc.startsWith('did') && k.length > 3) return {base: k.slice(3, 4).toLowerCase() + k.slice(4), type: 'did'};\n if (lc.startsWith('around') && k.length > 6) return {base: k.slice(6, 7).toLowerCase() + k.slice(7), type: 'around'};\n return {base: k};\n}\n\nexport class FlowInstance<Name extends FlowName> extends FlowEntry<Name> {\n readonly deps: Reference[];\n readonly globalProviders: ProviderRegistry;\n private plan: FlowPlan<never>;\n private FlowClass: FlowType;\n private stages: StageMap<FlowType>;\n private hooks: HookRegistry;\n\n constructor(\n scope: Scope,\n record: FlowRecord,\n deps: Set<Reference>,\n globalProviders: ProviderRegistry,\n ) {\n super(scope, record);\n this.deps = [...deps];\n this.globalProviders = globalProviders;\n this.FlowClass = this.record.provide;\n this.ready = this.initialize();\n this.plan = this.record.metadata.plan;\n this.hooks = scope.providers.getHooksRegistry();\n }\n\n protected async initialize() {\n const server = this.globalProviders.getActiveServer();\n\n this.stages = collectFlowHookMap(this.FlowClass);\n\n const {middleware} = this.metadata;\n if (middleware) {\n const path = typeof middleware.path === 'string' ? middleware.path : '';\n server.registerMiddleware(path, async (request, response, next) => {\n const canActivate = await this.canActivate(request);\n if (!canActivate) return next();\n\n try {\n const result = await this.run(\n {request, response, next} as any,\n new Map(),\n );\n if (result) return writeHttpResponse(response, result);\n } catch (e) {\n if (e instanceof FlowControl) {\n switch (e.type) {\n case 'abort':\n return writeHttpResponse(response, {kind: 'text', status: 500, body: 'Aborted'});\n case 'fail':\n return writeHttpResponse(response, {kind: 'text', status: 500, body: 'Internal Server Error'});\n case 'handled':\n return;\n case 'next':\n return next();\n case 'respond':\n return writeHttpResponse(response, e.output as any);\n }\n }\n // eslint-disable-next-line no-console\n console.error(e);\n return writeHttpResponse(response, {\n kind: 'text',\n status: 500,\n body: 'Internal Server Error',\n });\n }\n\n return next();\n });\n }\n\n return Promise.resolve();\n }\n\n async canActivate(request: ServerRequest): Promise<boolean> {\n if (this.method && request.method !== this.method) return false;\n\n const canActivate = this.metadata.middleware?.canActivate ?? [];\n if ((this.FlowClass as any)['canActivate']) {\n canActivate.push((this.FlowClass as any)['canActivate']);\n }\n if (canActivate.length === 0) return true;\n\n const results = await Promise.all(canActivate.map((m) => m(request, this.scope)));\n return results.every((r) => r);\n }\n\n async run(\n input: FlowInputOf<Name>,\n deps: Map<Token, Type>,\n ): Promise<FlowOutputOf<Name> | undefined> {\n const scope = this.globalProviders.getActiveScope();\n const {FlowClass, plan, name} = this;\n\n // Clone stages so we can merge injections safely per run.\n const baseStages = this.stages;\n let stages: StageMap<any> = cloneStageMap(baseStages);\n\n // Compute next order base after any class-defined entries.\n let orderBase =\n Math.max(\n 0,\n ...Object.values(stages).flatMap((list) => list.map((e: any) => e._order ?? 0)),\n ) + 1;\n\n const initialInjectedHooks =\n (this.hooks.getFlowHooks(name) as HookEntry<\n FlowInputOf<Name>,\n Name,\n FlowStagesOf<Name>,\n FlowCtxOf<Name>\n >[]) ?? [];\n\n let context: any;\n let contextReady = false;\n\n const materializeAndMerge = async (\n newHooks: HookEntry<FlowInputOf<Name>, Name, FlowStagesOf<Name>, FlowCtxOf<Name>>[],\n opts?: { orderStart?: number },\n ) => {\n if (!newHooks?.length || !contextReady) return;\n\n const metas: HookMetadata[] = [];\n for (const h of newHooks) {\n try {\n metas.push(h.metadata);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn('[flow] Ignoring injected hook that failed to materialize:', e);\n }\n }\n\n if (metas.length) {\n const start = opts?.orderStart ?? orderBase;\n mergeHookMetasIntoStageMap(FlowClass, stages, metas, start);\n if (opts?.orderStart === undefined) orderBase += metas.length;\n }\n };\n\n const appendContextHooks = async (\n hooks: HookEntry<FlowInputOf<Name>, Name, FlowStagesOf<Name>, FlowCtxOf<Name>>[],\n ) => {\n await materializeAndMerge(hooks);\n };\n\n // Construct flow instance\n context = new FlowClass(this.metadata, input, scope, appendContextHooks, deps);\n\n // Now injections can materialize\n contextReady = true;\n\n // Initial registry hooks should not pre-empt stages; they just get registered\n await materializeAndMerge(initialInjectedHooks, {orderStart: -1_000_000});\n\n // Refresh order base to be after everything currently present\n orderBase =\n Math.max(\n 0,\n ...Object.values(stages).flatMap((list) => list.map((e: any) => e._order ?? 0)),\n ) + 1;\n\n let responded: FlowOutputOf<Name> | undefined;\n\n // Robust list runner (doesn't skip mid-run insertions)\n const runList = async (\n key: string,\n opts?: { ignoreRespond?: boolean },\n ): Promise<StageResult> => {\n const getList = () => ((stages as any)[key] ?? []) as Array<{ method: (ctx: any) => Promise<void> }>;\n const seen = new Set<any>();\n\n while (true) {\n const list = getList();\n const item = list.find((e) => !seen.has(e));\n if (!item) break;\n seen.add(item);\n\n try {\n await item.method(context);\n } catch (e: any) {\n if (e instanceof FlowControl) {\n if (e.type === 'respond') {\n if (!opts?.ignoreRespond) {\n responded = e.output as FlowOutputOf<Name>;\n return {outcome: 'respond', control: e};\n }\n continue;\n }\n return {outcome: e.type, control: e};\n }\n return {outcome: 'unknown_error', control: e as Error};\n }\n }\n return {outcome: 'ok'};\n };\n\n // Run exactly one stage in order: will → around → stage → did (did runs once)\n const runOneStage = async (\n stageName: string,\n stopOnRespond: boolean,\n ): Promise<StageResult> => {\n // 1) willStage\n {\n const res = await runList(WILL(stageName));\n if (res.outcome === 'respond' && stopOnRespond) return res;\n if (res.outcome !== 'ok' && res.outcome !== 'respond') return res;\n }\n\n // 2) aroundStage (acts as pre-handlers unless you later add true wrapping)\n {\n const res = await runList(AROUND(stageName));\n if (res.outcome === 'respond' && stopOnRespond) return res;\n if (res.outcome !== 'ok' && res.outcome !== 'respond') return res;\n }\n\n // 3) stage\n let bodyOutcome: StageResult = {outcome: 'ok'};\n {\n const res = await runList(stageName, {ignoreRespond: false});\n bodyOutcome = res;\n if (res.outcome !== 'ok' && res.outcome !== 'respond') {\n // fail/abort/next/handled/unknown → do NOT run did\n // return res;/\n throw res.control\n }\n }\n\n // 4) didStage (run once regardless of body respond)\n {\n const res = await runList(DID(stageName), {ignoreRespond: true});\n if (res.outcome !== 'ok' && res.outcome !== 'respond') return res;\n }\n\n if (bodyOutcome.outcome === 'respond') return bodyOutcome;\n return {outcome: 'ok'};\n };\n\n // IMPORTANT: ignore typed stage names in plan arrays.\n // Only base stage names in the plan drive execution; typed hooks run *with* their base.\n const runStageGroup = async (\n group: Array<string> | undefined,\n stopOnRespond: boolean,\n opts?: { ignoreRespond?: boolean },\n ): Promise<StageResult> => {\n if (!group || group.length === 0) return {outcome: 'ok'};\n\n const seenBase = new Set<string>();\n for (const rawKey of group) {\n const {base, type} = parseTypedKey(rawKey);\n if (type) {\n // Soft warning once per typed key occurrence (optional)\n // console.warn(`[flow] Ignoring typed stage \"${rawKey}\" in plan; hooks will run with base \"${base}\".`);\n continue; // Do not run typed keys as standalone stages\n }\n if (seenBase.has(base)) continue;\n seenBase.add(base);\n\n const res = await runOneStage(base, stopOnRespond);\n if (res.outcome === 'respond') {\n if (stopOnRespond) return res;\n // else keep going\n } else if (res.outcome !== 'ok') {\n return res.control?.['output'] ?? res.outcome;\n }\n }\n return {outcome: 'ok'};\n };\n\n const runErrorStage = async () => {\n await runStageGroup((plan as any).error, false, {ignoreRespond: true});\n };\n\n const runFinalizeStage = async () => {\n await runStageGroup((plan as any).finalize, false);\n };\n\n try {\n // ---------- PRE ----------\n {\n const pre = await runStageGroup((plan as any).pre, true);\n if (pre.outcome === 'respond') {\n const post = await runStageGroup((plan as any).post, false);\n if (post.outcome === 'unknown_error' || post.outcome === 'fail') {\n try {\n await runErrorStage();\n } finally {\n await runFinalizeStage();\n }\n if (post.outcome === 'fail') throw post.control!;\n throw post.control!;\n }\n if (post.outcome === 'abort' || post.outcome === 'next' || post.outcome === 'handled') {\n await runFinalizeStage();\n throw post.control as FlowControl;\n }\n await runFinalizeStage();\n return responded;\n }\n if (pre.outcome === 'unknown_error' || pre.outcome === 'fail') {\n try {\n await runErrorStage();\n } finally {\n await runFinalizeStage();\n }\n if (pre.outcome === 'fail') throw pre.control!;\n throw pre.control!;\n }\n if (pre.outcome === 'abort' || pre.outcome === 'next' || pre.outcome === 'handled') {\n await runFinalizeStage();\n throw pre.control as FlowControl;\n }\n }\n\n // ---------- EXECUTE ----------\n if (!responded) {\n const exec = await runStageGroup((plan as any).execute, true);\n if (exec.outcome === 'respond') {\n // continue to post + finalize\n } else if (exec.outcome === 'unknown_error' || exec.outcome === 'fail') {\n try {\n await runErrorStage();\n } finally {\n await runFinalizeStage();\n }\n if (exec.outcome === 'fail') throw exec.control!;\n throw exec.control!;\n } else if (exec.outcome === 'abort' || exec.outcome === 'next' || exec.outcome === 'handled') {\n await runFinalizeStage();\n throw exec.control as FlowControl;\n }\n }\n\n // ---------- POST ----------\n {\n const post = await runStageGroup((plan as any).post, false);\n if (post.outcome === 'unknown_error' || post.outcome === 'fail') {\n try {\n await runErrorStage();\n } finally {\n await runFinalizeStage();\n }\n if (post.outcome === 'fail') throw post.control!;\n throw post.control!;\n }\n if (post.outcome === 'abort' || post.outcome === 'next' || post.outcome === 'handled') {\n await runFinalizeStage();\n throw post.control as FlowControl;\n }\n }\n\n // ---------- FINALIZE ----------\n await runFinalizeStage();\n\n return responded;\n } catch (e) {\n throw e;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import ProviderRegistry from '../provider/provider.registry';
|
|
2
|
+
import { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';
|
|
3
|
+
import { FlowInputOf, FlowName, FlowOutputOf, FlowRecord, FlowType, Token, Type } from '../common';
|
|
4
|
+
import { FlowInstance } from './flow.instance';
|
|
5
|
+
export default class FlowRegistry extends RegistryAbstract<FlowInstance<FlowName>, FlowRecord, FlowType[]> {
|
|
6
|
+
constructor(providers: ProviderRegistry, list: FlowType[]);
|
|
7
|
+
protected buildMap(list: FlowType[]): RegistryBuildMapResult<FlowRecord>;
|
|
8
|
+
protected buildGraph(): void;
|
|
9
|
+
/** Instantiate adapters, run fetch/transform, and populate registries. */
|
|
10
|
+
protected initialize(): Promise<void>;
|
|
11
|
+
private initializeOne;
|
|
12
|
+
registryFlows(rawFlows: FlowType[]): Promise<void>;
|
|
13
|
+
runFlow<Name extends FlowName>(name: Name, input: FlowInputOf<Name>, deps?: Map<Token, Type>): Promise<FlowOutputOf<Name> | undefined>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const regsitry_1 = require("../regsitry");
|
|
4
|
+
const common_1 = require("../common");
|
|
5
|
+
const flow_utils_1 = require("./flow.utils");
|
|
6
|
+
const token_utils_1 = require("../utils/token.utils");
|
|
7
|
+
const flow_instance_1 = require("./flow.instance");
|
|
8
|
+
class FlowRegistry extends regsitry_1.RegistryAbstract {
|
|
9
|
+
constructor(providers, list) {
|
|
10
|
+
super('FlowRegistry', providers, list);
|
|
11
|
+
}
|
|
12
|
+
buildMap(list) {
|
|
13
|
+
const tokens = new Set();
|
|
14
|
+
const defs = new Map();
|
|
15
|
+
const graph = new Map();
|
|
16
|
+
for (const raw of list) {
|
|
17
|
+
const rec = (0, flow_utils_1.normalizeFlow)(raw);
|
|
18
|
+
const provide = rec.provide;
|
|
19
|
+
tokens.add(provide);
|
|
20
|
+
defs.set(provide, rec);
|
|
21
|
+
graph.set(provide, new Set());
|
|
22
|
+
}
|
|
23
|
+
return { tokens, defs, graph };
|
|
24
|
+
}
|
|
25
|
+
buildGraph() {
|
|
26
|
+
for (const token of this.tokens) {
|
|
27
|
+
const rec = this.defs.get(token);
|
|
28
|
+
const deps = rec.metadata.dependsOn ?? [];
|
|
29
|
+
for (const d of deps) {
|
|
30
|
+
if (d == common_1.ScopeEntry) {
|
|
31
|
+
this.graph.get(token).add(common_1.ScopeEntry);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
if (!this.providers.get(d)) {
|
|
35
|
+
throw new Error(`Adapter ${(0, token_utils_1.tokenName)(token)} depends on ${(0, token_utils_1.tokenName)(d)}, which is not registered.`);
|
|
36
|
+
}
|
|
37
|
+
this.graph.get(token).add(d);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** Instantiate adapters, run fetch/transform, and populate registries. */
|
|
43
|
+
async initialize() {
|
|
44
|
+
const readyArr = [];
|
|
45
|
+
for (const token of this.tokens) {
|
|
46
|
+
const instance = this.initializeOne(token);
|
|
47
|
+
readyArr.push(instance.ready);
|
|
48
|
+
}
|
|
49
|
+
await Promise.all(readyArr);
|
|
50
|
+
}
|
|
51
|
+
initializeOne(token) {
|
|
52
|
+
const rec = this.defs.get(token);
|
|
53
|
+
const deps = this.graph.get(token);
|
|
54
|
+
const instance = new flow_instance_1.FlowInstance(this.providers.getActiveScope(), rec, deps, this.providers);
|
|
55
|
+
this.instances.set(rec.metadata.name, instance);
|
|
56
|
+
return instance;
|
|
57
|
+
}
|
|
58
|
+
async registryFlows(rawFlows) {
|
|
59
|
+
const readyArr = [];
|
|
60
|
+
for (const raw of rawFlows) {
|
|
61
|
+
const rec = (0, flow_utils_1.normalizeFlow)(raw);
|
|
62
|
+
const provide = rec.provide;
|
|
63
|
+
this.tokens.add(provide);
|
|
64
|
+
this.defs.set(provide, rec);
|
|
65
|
+
this.graph.set(provide, new Set());
|
|
66
|
+
readyArr.push(this.initializeOne(provide).ready);
|
|
67
|
+
}
|
|
68
|
+
await Promise.all(readyArr);
|
|
69
|
+
}
|
|
70
|
+
runFlow(name, input, deps) {
|
|
71
|
+
const flow = this.instances.get(name);
|
|
72
|
+
if (!flow) {
|
|
73
|
+
throw new Error(`Flow ${name} is not registered`);
|
|
74
|
+
}
|
|
75
|
+
return flow.run(input, deps ?? new Map());
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.default = FlowRegistry;
|
|
79
|
+
//# sourceMappingURL=flow.registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.registry.js","sourceRoot":"","sources":["../../../src/flows/flow.registry.ts"],"names":[],"mappings":"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","sourcesContent":["import ProviderRegistry from '../provider/provider.registry';\nimport { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';\nimport { FlowInputOf, FlowName, FlowOutputOf, FlowRecord, FlowType, ScopeEntry, Token, Type } from '../common';\nimport { normalizeFlow } from './flow.utils';\nimport { tokenName } from '../utils/token.utils';\nimport { FlowInstance } from './flow.instance';\n\nexport default class FlowRegistry extends RegistryAbstract<FlowInstance<FlowName>, FlowRecord, FlowType[]> {\n constructor(providers: ProviderRegistry, list: FlowType[]) {\n super('FlowRegistry', providers, list);\n }\n\n protected override buildMap(list: FlowType[]): RegistryBuildMapResult<FlowRecord> {\n const tokens = new Set<Token>();\n const defs = new Map<Token, FlowRecord>();\n const graph = new Map<Token, Set<Token>>();\n\n for (const raw of list) {\n const rec = normalizeFlow(raw);\n const provide = rec.provide;\n tokens.add(provide);\n defs.set(provide, rec);\n graph.set(provide, new Set());\n }\n\n return { tokens, defs, graph };\n }\n\n\n protected buildGraph() {\n for (const token of this.tokens) {\n const rec = this.defs.get(token)!;\n const deps = rec.metadata.dependsOn ?? [];\n\n for (const d of deps) {\n if (d == ScopeEntry) {\n this.graph.get(token)!.add(ScopeEntry);\n } else {\n if (!this.providers.get(d)) {\n throw new Error(`Adapter ${tokenName(token)} depends on ${tokenName(d)}, which is not registered.`);\n }\n this.graph.get(token)!.add(d);\n }\n }\n }\n }\n\n /** Instantiate adapters, run fetch/transform, and populate registries. */\n protected async initialize(): Promise<void> {\n\n const readyArr: Promise<void>[] = [];\n for (const token of this.tokens) {\n const instance = this.initializeOne(token);\n readyArr.push(instance.ready);\n }\n await Promise.all(readyArr);\n }\n\n private initializeOne(token: Token) {\n const rec = this.defs.get(token)!;\n const deps = this.graph.get(token)!;\n\n const instance = new FlowInstance(this.providers.getActiveScope(), rec, deps, this.providers);\n this.instances.set(rec.metadata.name, instance);\n return instance;\n }\n\n\n async registryFlows(rawFlows: FlowType[]): Promise<void> {\n const readyArr: Promise<void>[] = [];\n for (const raw of rawFlows) {\n const rec = normalizeFlow(raw);\n const provide = rec.provide;\n this.tokens.add(provide);\n this.defs.set(provide, rec);\n this.graph.set(provide, new Set());\n readyArr.push(this.initializeOne(provide).ready);\n }\n await Promise.all(readyArr);\n }\n\n\n runFlow<Name extends FlowName>(name: Name, input: FlowInputOf<Name>, deps?: Map<Token, Type>): Promise<FlowOutputOf<Name> | undefined> {\n const flow = this.instances.get(name);\n if (!flow) {\n throw new Error(`Flow ${name} is not registered`);\n }\n return flow.run(input, deps ?? new Map());\n }\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { HookMetadata } from '../common';
|
|
2
|
+
export type StageEntry<C> = {
|
|
3
|
+
method: (ctx: C) => Promise<void>;
|
|
4
|
+
_priority: number;
|
|
5
|
+
_order: number;
|
|
6
|
+
};
|
|
7
|
+
export type StageMap<C> = Record<string, StageEntry<C>[]>;
|
|
8
|
+
export declare function sortStageMap<C>(table: StageMap<C>): void;
|
|
9
|
+
export declare function cloneStageMap<C>(table: StageMap<C>): StageMap<C>;
|
|
10
|
+
export declare function resolveStageKey(type: HookMetadata['type'], stage: string): string;
|
|
11
|
+
export declare function collectFlowHookMap<C>(FlowClass: any): StageMap<C>;
|
|
12
|
+
export declare function mergeHookMetasIntoStageMap<C>(FlowClass: any, table: StageMap<C>, metas: HookMetadata[], orderStart?: number): void;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sortStageMap = sortStageMap;
|
|
4
|
+
exports.cloneStageMap = cloneStageMap;
|
|
5
|
+
exports.resolveStageKey = resolveStageKey;
|
|
6
|
+
exports.collectFlowHookMap = collectFlowHookMap;
|
|
7
|
+
exports.mergeHookMetasIntoStageMap = mergeHookMetasIntoStageMap;
|
|
8
|
+
const common_1 = require("../common");
|
|
9
|
+
const cap = (s) => (s ? s[0].toUpperCase() + s.slice(1) : s);
|
|
10
|
+
const CACHE = new WeakMap();
|
|
11
|
+
function sortStageMap(table) {
|
|
12
|
+
for (const key of Object.keys(table)) {
|
|
13
|
+
table[key].sort((a, b) => a._priority - b._priority || a._order - b._order);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function cloneStageMap(table) {
|
|
17
|
+
const out = {};
|
|
18
|
+
for (const [k, v] of Object.entries(table))
|
|
19
|
+
out[k] = v.slice();
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
function resolveStageKey(type, stage) {
|
|
23
|
+
return type === 'will'
|
|
24
|
+
? `will${cap(stage)}`
|
|
25
|
+
: type === 'did'
|
|
26
|
+
? `did${cap(stage)}`
|
|
27
|
+
: type === 'around'
|
|
28
|
+
? `around${cap(stage)}`
|
|
29
|
+
: stage;
|
|
30
|
+
}
|
|
31
|
+
function collectFlowHookMap(FlowClass) {
|
|
32
|
+
const cached = CACHE.get(FlowClass);
|
|
33
|
+
if (cached)
|
|
34
|
+
return cached;
|
|
35
|
+
const metas = (Reflect.getMetadata(common_1.FrontMcpFlowHookTokens.hooks, FlowClass) ?? []);
|
|
36
|
+
const sorted = metas
|
|
37
|
+
.map((m, i) => ({ m, i }))
|
|
38
|
+
.sort((a, b) => (a.m.priority ?? 0) - (b.m.priority ?? 0) || a.i - b.i)
|
|
39
|
+
.map(x => x.m);
|
|
40
|
+
const table = {};
|
|
41
|
+
let order = 0;
|
|
42
|
+
for (const m of sorted) {
|
|
43
|
+
const resolved = resolveStageKey(m.type, m.stage);
|
|
44
|
+
const entry = {
|
|
45
|
+
_priority: m.priority ?? 0,
|
|
46
|
+
_order: order++,
|
|
47
|
+
method: async (ctx) => {
|
|
48
|
+
const target = m.static ? FlowClass : ctx;
|
|
49
|
+
const impl = typeof m.method === 'function'
|
|
50
|
+
? m.method
|
|
51
|
+
: target?.[m.method];
|
|
52
|
+
if (typeof impl !== 'function')
|
|
53
|
+
return;
|
|
54
|
+
if (m.filter && !(await m.filter(ctx)))
|
|
55
|
+
return;
|
|
56
|
+
if (m.type === 'around') {
|
|
57
|
+
const next = async () => {
|
|
58
|
+
};
|
|
59
|
+
return m.static ? impl.call(FlowClass, ctx, next) : impl.call(ctx, ctx, next);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
return m.static ? impl.call(FlowClass, ctx) : impl.call(ctx, ctx);
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
(table[resolved] ??= []).push(entry);
|
|
67
|
+
}
|
|
68
|
+
sortStageMap(table);
|
|
69
|
+
CACHE.set(FlowClass, table);
|
|
70
|
+
return table;
|
|
71
|
+
}
|
|
72
|
+
function mergeHookMetasIntoStageMap(FlowClass, table, metas, orderStart = 100_000) {
|
|
73
|
+
let order = orderStart;
|
|
74
|
+
const sorted = metas
|
|
75
|
+
.map((m, i) => ({ m, i }))
|
|
76
|
+
.sort((a, b) => (a.m.priority ?? 0) - (b.m.priority ?? 0) || a.i - b.i)
|
|
77
|
+
.map(x => x.m);
|
|
78
|
+
for (const m of sorted) {
|
|
79
|
+
const resolved = resolveStageKey(m.type, m.stage);
|
|
80
|
+
const entry = {
|
|
81
|
+
_priority: m.priority ?? 0,
|
|
82
|
+
_order: order++,
|
|
83
|
+
method: async (ctx) => {
|
|
84
|
+
const target = m.target;
|
|
85
|
+
if (!target) {
|
|
86
|
+
console.warn(`[flow] Hook target is missing for method ${m.method}`);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const impl = typeof m.method === 'function'
|
|
90
|
+
? m.method
|
|
91
|
+
: target?.[m.method].bind(target);
|
|
92
|
+
if (typeof impl !== 'function')
|
|
93
|
+
return;
|
|
94
|
+
if (m.filter && !(await m.filter(ctx)))
|
|
95
|
+
return;
|
|
96
|
+
if (m.type === 'around') {
|
|
97
|
+
const next = async () => {
|
|
98
|
+
};
|
|
99
|
+
return m.static ? impl.call(target, ctx, next) : impl.call(target, ctx, next);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
return m.static ? impl.call(target, ctx) : impl.call(target, ctx);
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
(table[resolved] ??= []).push(entry);
|
|
107
|
+
}
|
|
108
|
+
sortStageMap(table);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=flow.stages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.stages.js","sourceRoot":"","sources":["../../../src/flows/flow.stages.ts"],"names":[],"mappings":"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","sourcesContent":["import {HookMetadata, FrontMcpFlowHookTokens} from '../common';\n\nexport type StageEntry<C> = {\n method: (ctx: C) => Promise<void>;\n _priority: number;\n _order: number;\n};\n\nexport type StageMap<C> = Record<string, StageEntry<C>[]>;\n\nconst cap = (s: string) => (s ? s[0].toUpperCase() + s.slice(1) : s);\n\nconst CACHE: WeakMap<Function, StageMap<any>> = new WeakMap();\n\nexport function sortStageMap<C>(table: StageMap<C>) {\n for (const key of Object.keys(table)) {\n table[key].sort((a, b) => a._priority - b._priority || a._order - b._order);\n }\n}\n\nexport function cloneStageMap<C>(table: StageMap<C>): StageMap<C> {\n const out: StageMap<C> = {};\n for (const [k, v] of Object.entries(table)) out[k] = v.slice();\n return out;\n}\n\nexport function resolveStageKey(type: HookMetadata['type'], stage: string) {\n return type === 'will'\n ? `will${cap(stage)}`\n : type === 'did'\n ? `did${cap(stage)}`\n : type === 'around'\n ? `around${cap(stage)}`\n : stage;\n}\n\nexport function collectFlowHookMap<C>(FlowClass: any): StageMap<C> {\n const cached = CACHE.get(FlowClass as any);\n if (cached) return cached;\n\n const metas = (Reflect.getMetadata(FrontMcpFlowHookTokens.hooks, FlowClass) ?? []) as HookMetadata[];\n\n const sorted = metas\n .map((m, i) => ({m, i}))\n .sort((a, b) => (a.m.priority ?? 0) - (b.m.priority ?? 0) || a.i - b.i)\n .map(x => x.m);\n\n const table: StageMap<C> = {};\n let order = 0;\n\n for (const m of sorted) {\n const resolved = resolveStageKey(m.type, m.stage);\n\n const entry: StageEntry<C> = {\n _priority: m.priority ?? 0,\n _order: order++,\n method: async (ctx: any) => {\n const target = m.static ? (FlowClass as any) : ctx;\n const impl =\n typeof (m as any).method === 'function'\n ? (m as any).method\n : target?.[m.method as keyof typeof target];\n\n if (typeof impl !== 'function') return;\n if (m.filter && !(await m.filter(ctx))) return;\n\n if (m.type === 'around') {\n const next = async () => {\n };\n return m.static ? impl.call(FlowClass, ctx, next) : impl.call(ctx, ctx, next);\n } else {\n return m.static ? impl.call(FlowClass, ctx) : impl.call(ctx, ctx);\n }\n },\n };\n\n (table[resolved] ??= []).push(entry);\n }\n\n sortStageMap(table);\n CACHE.set(FlowClass as any, table);\n return table;\n}\n\nexport function mergeHookMetasIntoStageMap<C>(\n FlowClass: any,\n table: StageMap<C>,\n metas: HookMetadata[],\n orderStart = 100_000,\n) {\n let order = orderStart;\n\n const sorted = metas\n .map((m, i) => ({m, i}))\n .sort((a, b) => (a.m.priority ?? 0) - (b.m.priority ?? 0) || a.i - b.i)\n .map(x => x.m);\n\n for (const m of sorted) {\n const resolved = resolveStageKey(m.type, m.stage);\n\n const entry: StageEntry<C> = {\n _priority: m.priority ?? 0,\n _order: order++,\n method: async (ctx: any) => {\n const target = m.target;\n if (!target) {\n console.warn(`[flow] Hook target is missing for method ${m.method}`);\n return;\n }\n const impl =\n typeof (m as any).method === 'function'\n ? (m as any).method\n : target?.[m.method as keyof typeof target].bind(target);\n\n if (typeof impl !== 'function') return;\n if (m.filter && !(await m.filter(ctx))) return;\n\n if (m.type === 'around') {\n const next = async () => {\n };\n return m.static ? impl.call(target, ctx, next) : impl.call(target, ctx, next);\n } else {\n return m.static ? impl.call(target, ctx) : impl.call(target, ctx);\n }\n },\n };\n\n (table[resolved] ??= []).push(entry);\n }\n\n sortStageMap(table);\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FlowMetadata, FlowRecord, FlowType, Token } from '../common';
|
|
2
|
+
export declare function collectFlowMetadata(cls: FlowType): FlowMetadata<never>;
|
|
3
|
+
export declare function normalizeFlow(item: FlowType): FlowRecord;
|
|
4
|
+
/**
|
|
5
|
+
* For graph/cycle detection. Returns dependency tokens that should be graphed.
|
|
6
|
+
* - CLASS_TOKEN: deps come from the class constructor
|
|
7
|
+
*/
|
|
8
|
+
export declare function flowDiscoveryDeps(rec: FlowRecord): Token[];
|