@@ -41,10 +41,17 @@ import {
4141 asCachePermission ,
4242 asPermissionsObject ,
4343 asTopicPermission ,
44+ asFunctionPermission ,
4445 isCachePermission ,
46+ isFunctionPermission ,
4547 isPermissionsObject ,
4648 isTopicPermission ,
4749 PredefinedScope ,
50+ FunctionPermission ,
51+ AllFunctions ,
52+ isFunctionNamePrefix ,
53+ isFunction ,
54+ FunctionRole ,
4855} from '@gomomento/sdk-core/dist/src/auth/tokens/permission-scope' ;
4956import { permission_messages } from '@gomomento/generated-types/dist/permissionmessages' ;
5057import { convert } from './utils' ;
@@ -356,6 +363,11 @@ function tokenPermissionToGrpcPermission(
356363 asCachePermission ( permission )
357364 ) ;
358365 return result ;
366+ } else if ( isFunctionPermission ( permission ) ) {
367+ result . function_permissions = functionPermissionToGrpcPermission (
368+ asFunctionPermission ( permission )
369+ ) ;
370+ return result ;
359371 }
360372 throw new Error (
361373 `Unrecognized token permission: ${ JSON . stringify ( permission ) } `
@@ -477,6 +489,80 @@ function assignCacheSelector(
477489 return grpcPermission ;
478490}
479491
492+ function assignFunctionRole (
493+ permission : FunctionPermission ,
494+ grpcPermission : permission_messages . PermissionsType . FunctionPermissions
495+ ) : permission_messages . PermissionsType . FunctionPermissions {
496+ switch ( permission . role ) {
497+ case FunctionRole . FunctionInvoke : {
498+ grpcPermission . role = permission_messages . FunctionRole . FunctionInvoke ;
499+ break ;
500+ }
501+ case FunctionRole . FunctionPermitNone : {
502+ grpcPermission . role = permission_messages . FunctionRole . FunctionPermitNone ;
503+ break ;
504+ }
505+ default : {
506+ throw new Error (
507+ `Unrecognized function role: ${ JSON . stringify ( permission ) } `
508+ ) ;
509+ }
510+ }
511+ return grpcPermission ;
512+ }
513+
514+ function assignFunctionSelector (
515+ permission : FunctionPermission ,
516+ grpcPermission : permission_messages . PermissionsType . FunctionPermissions
517+ ) : permission_messages . PermissionsType . FunctionPermissions {
518+ if ( permission . cache === AllCaches ) {
519+ grpcPermission . all_caches = new permission_messages . PermissionsType . All ( ) ;
520+ } else if ( typeof permission . cache === 'string' ) {
521+ grpcPermission . cache_selector =
522+ new permission_messages . PermissionsType . CacheSelector ( {
523+ cache_name : permission . cache ,
524+ } ) ;
525+ } else if ( isCacheName ( permission . cache ) ) {
526+ grpcPermission . cache_selector =
527+ new permission_messages . PermissionsType . CacheSelector ( {
528+ cache_name : permission . cache . name ,
529+ } ) ;
530+ } else {
531+ throw new Error (
532+ `Unrecognized cache specification in function permission: ${ JSON . stringify (
533+ permission
534+ ) } `
535+ ) ;
536+ }
537+
538+ if ( permission . func === AllFunctions ) {
539+ grpcPermission . all_functions =
540+ new permission_messages . PermissionsType . All ( ) ;
541+ } else if ( isFunctionNamePrefix ( permission . func ) ) {
542+ grpcPermission . function_selector =
543+ new permission_messages . PermissionsType . FunctionSelector ( {
544+ function_name_prefix : permission . func . namePrefix ,
545+ } ) ;
546+ } else if ( typeof permission . func === 'string' ) {
547+ grpcPermission . function_selector =
548+ new permission_messages . PermissionsType . FunctionSelector ( {
549+ function_name : permission . func ,
550+ } ) ;
551+ } else if ( isFunction ( permission . func ) ) {
552+ grpcPermission . function_selector =
553+ new permission_messages . PermissionsType . FunctionSelector ( {
554+ function_name : permission . func . name ,
555+ } ) ;
556+ } else {
557+ throw new Error (
558+ `Unrecognized function specification in function permission: ${ JSON . stringify (
559+ permission
560+ ) } `
561+ ) ;
562+ }
563+ return grpcPermission ;
564+ }
565+
480566function assignCacheItemSelector (
481567 permission : DisposableTokenCachePermission ,
482568 grpcPermission : permission_messages . PermissionsType . CachePermissions
@@ -520,15 +606,30 @@ function cachePermissionToGrpcPermission(
520606 return grpcPermission ;
521607}
522608
609+ function functionPermissionToGrpcPermission (
610+ permission : FunctionPermission
611+ ) : permission_messages . PermissionsType . FunctionPermissions {
612+ let grpcPermission =
613+ new permission_messages . PermissionsType . FunctionPermissions ( ) ;
614+ grpcPermission = assignFunctionRole ( permission , grpcPermission ) ;
615+ grpcPermission = assignFunctionSelector ( permission , grpcPermission ) ;
616+ return grpcPermission ;
617+ }
618+
523619function disposableTokenPermissionToGrpcPermission (
524- permission : DisposableTokenCachePermission
620+ permission : DisposableTokenCachePermission | FunctionPermission
525621) : permission_messages . PermissionsType {
526622 const result = new permission_messages . PermissionsType ( ) ;
527623 if ( isDisposableTokenCachePermission ( permission ) ) {
528624 result . cache_permissions = disposableCachePermissionToGrpcPermission (
529625 asDisposableTokenCachePermission ( permission )
530626 ) ;
531627 return result ;
628+ } else if ( isFunctionPermission ( permission ) ) {
629+ result . function_permissions = functionPermissionToGrpcPermission (
630+ asFunctionPermission ( permission )
631+ ) ;
632+ return result ;
532633 }
533634 throw new Error (
534635 `Unrecognized token permission: ${ JSON . stringify ( permission ) } `
0 commit comments