@@ -33,8 +33,9 @@ import { makeProtoEnumConverters } from '@temporalio/common/lib/internal-workflo
3333import type { coresdk , temporal } from '@temporalio/proto' ;
3434import {
3535 ENHANCED_STACK_TRACE_RESERVED_PREFIX ,
36+ ReservedPrefixError ,
3637 STACK_TRACE_RESERVED_PREFIX ,
37- isReservedName ,
38+ maybeGetReservedPrefix ,
3839 throwIfReservedName ,
3940} from '@temporalio/common/lib/reserved' ;
4041import { alea , RNG } from './alea' ;
@@ -685,28 +686,27 @@ export class Activator implements ActivationHandler {
685686 throw new TypeError ( 'Missing query activation attributes' ) ;
686687 }
687688
688- const queryInput = {
689- queryName : queryType ,
690- args : arrayFromPayloads ( this . payloadConverter , activation . arguments ) ,
691- queryId,
692- headers : headers ?? { } ,
693- } ;
694-
695- // Skip interceptors if this is an internal query.
696- if ( isReservedName ( queryType ) ) {
697- this . queryWorkflowNextHandler ( queryInput ) . then (
698- ( result ) => this . completeQuery ( queryId , result ) ,
699- ( reason ) => this . failQuery ( queryId , reason )
700- ) ;
701- return ;
689+ const reservedPrefix = maybeGetReservedPrefix ( queryType )
690+ if ( reservedPrefix ) {
691+ // Must have (internal) query handler for reserved query.
692+ if ( ! this . queryHandlers . has ( queryType ) ) {
693+ throw new ReservedPrefixError ( 'query' , queryType , reservedPrefix ) ;
694+ }
702695 }
703696
697+ // Skip interceptors if it is an internal query
698+ let interceptors = reservedPrefix ? [ ] : this . interceptors . inbound
704699 const execute = composeInterceptors (
705- this . interceptors . inbound ,
700+ interceptors ,
706701 'handleQuery' ,
707702 this . queryWorkflowNextHandler . bind ( this )
708703 ) ;
709- execute ( queryInput ) . then (
704+ execute ( {
705+ queryName : queryType ,
706+ args : arrayFromPayloads ( this . payloadConverter , activation . arguments ) ,
707+ queryId,
708+ headers : headers ?? { } ,
709+ } ) . then (
710710 ( result ) => this . completeQuery ( queryId , result ) ,
711711 ( reason ) => this . failQuery ( queryId , reason )
712712 ) ;
@@ -737,6 +737,11 @@ export class Activator implements ActivationHandler {
737737
738738 // If we don't have an entry from either source, buffer and return
739739 if ( entry === null ) {
740+ const reservedPrefix = maybeGetReservedPrefix ( name ) ;
741+ if ( reservedPrefix ) {
742+ // Must have (internal) update handler for reserved update.
743+ throw new ReservedPrefixError ( 'update' , name , reservedPrefix ) ;
744+ }
740745 this . bufferedUpdates . push ( activation ) ;
741746 return ;
742747 }
@@ -864,8 +869,6 @@ export class Activator implements ActivationHandler {
864869 if ( fn ) {
865870 return await fn ( ...args ) ;
866871 } else if ( this . defaultSignalHandler ) {
867- // Do not call default signal handler with reserved signal name.
868- throwIfReservedName ( 'signal' , signalName ) ;
869872 return await this . defaultSignalHandler ( signalName , ...args ) ;
870873 } else {
871874 throw new IllegalStateError ( `No registered signal handler for signal: ${ signalName } ` ) ;
@@ -878,6 +881,14 @@ export class Activator implements ActivationHandler {
878881 throw new TypeError ( 'Missing activation signalName' ) ;
879882 }
880883
884+ const reservedPrefix = maybeGetReservedPrefix ( signalName ) ;
885+ if ( reservedPrefix ) {
886+ if ( ! this . signalHandlers . has ( signalName ) ) {
887+ // Must have (internal) signal handler for reserved signal.
888+ throw new ReservedPrefixError ( 'signal' , signalName , reservedPrefix ) ;
889+ }
890+ }
891+
881892 if ( ! this . signalHandlers . has ( signalName ) && ! this . defaultSignalHandler ) {
882893 this . bufferedSignals . push ( activation ) ;
883894 return ;
0 commit comments