Skip to content

Commit

Permalink
feat: Add a type for decoding Hook Triggers without Objects (#53)
Browse files Browse the repository at this point in the history
* feat: Add a type for decoding Hook Triggers without Objects

* add getters to new type

* nits

* add changelog
  • Loading branch information
cbaker6 committed Jan 24, 2023
1 parent de696cc commit 2494b3f
Show file tree
Hide file tree
Showing 11 changed files with 319 additions and 137 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
[Full Changelog](https://github.com/netreconlab/Parse-Swift/compare/4.16.2...5.0.0), [Documentation](https://swiftpackageindex.com/netreconlab/Parse-Swift/5.0.0/documentation/parseswift)

__Breaking Changes__
* ParseHookTriggerRequest has been renamed to ParseHookTriggerObjectRequest as it is used for decoding triggers related to ParseObjects. The new ParseHookTriggerRequest is similar but used for decoding requests not related to ParseObjects like ParseFile ([#53](https://github.com/netreconlab/Parse-Swift/pull/53)), thanks to [Corey Baker](https://github.com/cbaker6).
* ParseVersion now supports pre-release versions of the SDK ([#49](https://github.com/netreconlab/Parse-Swift/pull/49)), thanks to [Corey Baker](https://github.com/cbaker6).
* Added a new ParseHealth.Status enum to support new feature in Parse Server 6.0.0.
Developers can now receive intermediate status updates (Status.initialized, Status.starting)
Expand Down
40 changes: 30 additions & 10 deletions ParseSwift.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -538,6 +538,14 @@
70A98D832794AB3C009B58F2 /* ParseQueryScorable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70A98D812794AB3C009B58F2 /* ParseQueryScorable.swift */; };
70A98D842794AB3C009B58F2 /* ParseQueryScorable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70A98D812794AB3C009B58F2 /* ParseQueryScorable.swift */; };
70A98D852794AB3C009B58F2 /* ParseQueryScorable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70A98D812794AB3C009B58F2 /* ParseQueryScorable.swift */; };
70B412B429801AFB00F706EA /* ParseHookTriggerRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B412B329801AFB00F706EA /* ParseHookTriggerRequest.swift */; };
70B412B529801AFB00F706EA /* ParseHookTriggerRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B412B329801AFB00F706EA /* ParseHookTriggerRequest.swift */; };
70B412B629801AFB00F706EA /* ParseHookTriggerRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B412B329801AFB00F706EA /* ParseHookTriggerRequest.swift */; };
70B412B729801AFB00F706EA /* ParseHookTriggerRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B412B329801AFB00F706EA /* ParseHookTriggerRequest.swift */; };
70B412B929801B8B00F706EA /* ParseHookTriggerRequestable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B412B829801B8B00F706EA /* ParseHookTriggerRequestable.swift */; };
70B412BA29801B8B00F706EA /* ParseHookTriggerRequestable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B412B829801B8B00F706EA /* ParseHookTriggerRequestable.swift */; };
70B412BB29801B8B00F706EA /* ParseHookTriggerRequestable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B412B829801B8B00F706EA /* ParseHookTriggerRequestable.swift */; };
70B412BC29801B8B00F706EA /* ParseHookTriggerRequestable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B412B829801B8B00F706EA /* ParseHookTriggerRequestable.swift */; };
70B4E0BC2762F1D5004C9757 /* QueryConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B4E0BB2762F1D5004C9757 /* QueryConstraint.swift */; };
70B4E0BD2762F1D5004C9757 /* QueryConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B4E0BB2762F1D5004C9757 /* QueryConstraint.swift */; };
70B4E0BE2762F1D5004C9757 /* QueryConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B4E0BB2762F1D5004C9757 /* QueryConstraint.swift */; };
Expand Down Expand Up @@ -618,10 +626,10 @@
70CE0AAE28595FDE00DAEA86 /* ParseHookRequestable+combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CE0AAC28595FDE00DAEA86 /* ParseHookRequestable+combine.swift */; };
70CE0AAF28595FDE00DAEA86 /* ParseHookRequestable+combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CE0AAC28595FDE00DAEA86 /* ParseHookRequestable+combine.swift */; };
70CE0AB028595FDE00DAEA86 /* ParseHookRequestable+combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CE0AAC28595FDE00DAEA86 /* ParseHookRequestable+combine.swift */; };
70CE0AB2285963A300DAEA86 /* ParseHookTriggerRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CE0AB1285963A300DAEA86 /* ParseHookTriggerRequest.swift */; };
70CE0AB3285963A300DAEA86 /* ParseHookTriggerRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CE0AB1285963A300DAEA86 /* ParseHookTriggerRequest.swift */; };
70CE0AB4285963A300DAEA86 /* ParseHookTriggerRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CE0AB1285963A300DAEA86 /* ParseHookTriggerRequest.swift */; };
70CE0AB5285963A300DAEA86 /* ParseHookTriggerRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CE0AB1285963A300DAEA86 /* ParseHookTriggerRequest.swift */; };
70CE0AB2285963A300DAEA86 /* ParseHookTriggerObjectRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CE0AB1285963A300DAEA86 /* ParseHookTriggerObjectRequest.swift */; };
70CE0AB3285963A300DAEA86 /* ParseHookTriggerObjectRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CE0AB1285963A300DAEA86 /* ParseHookTriggerObjectRequest.swift */; };
70CE0AB4285963A300DAEA86 /* ParseHookTriggerObjectRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CE0AB1285963A300DAEA86 /* ParseHookTriggerObjectRequest.swift */; };
70CE0AB5285963A300DAEA86 /* ParseHookTriggerObjectRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CE0AB1285963A300DAEA86 /* ParseHookTriggerObjectRequest.swift */; };
70CE0AB7285A83B100DAEA86 /* ParseHookable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CE0AB6285A83B100DAEA86 /* ParseHookable.swift */; };
70CE0AB8285A83B100DAEA86 /* ParseHookable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CE0AB6285A83B100DAEA86 /* ParseHookable.swift */; };
70CE0AB9285A83B100DAEA86 /* ParseHookable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CE0AB6285A83B100DAEA86 /* ParseHookable.swift */; };
Expand Down Expand Up @@ -1316,6 +1324,8 @@
70A2D86A25B3ADB6001BEB7D /* ParseAnonymousTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseAnonymousTests.swift; sourceTree = "<group>"; };
70A8B5FE2971029D00AE0087 /* InMemoryPrimitiveStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InMemoryPrimitiveStore.swift; sourceTree = "<group>"; };
70A98D812794AB3C009B58F2 /* ParseQueryScorable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseQueryScorable.swift; sourceTree = "<group>"; };
70B412B329801AFB00F706EA /* ParseHookTriggerRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseHookTriggerRequest.swift; sourceTree = "<group>"; };
70B412B829801B8B00F706EA /* ParseHookTriggerRequestable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseHookTriggerRequestable.swift; sourceTree = "<group>"; };
70B4E0BB2762F1D5004C9757 /* QueryConstraint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueryConstraint.swift; sourceTree = "<group>"; };
70B4E0C02762F313004C9757 /* QueryWhere.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueryWhere.swift; sourceTree = "<group>"; };
70BC0B32251903D1001556DB /* ParseGeoPointTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseGeoPointTests.swift; sourceTree = "<group>"; };
Expand All @@ -1340,7 +1350,7 @@
70CE0AA228595E5E00DAEA86 /* ParseHookRequestable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseHookRequestable.swift; sourceTree = "<group>"; };
70CE0AA728595FCE00DAEA86 /* ParseHookRequestable+async.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ParseHookRequestable+async.swift"; sourceTree = "<group>"; };
70CE0AAC28595FDE00DAEA86 /* ParseHookRequestable+combine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ParseHookRequestable+combine.swift"; sourceTree = "<group>"; };
70CE0AB1285963A300DAEA86 /* ParseHookTriggerRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseHookTriggerRequest.swift; sourceTree = "<group>"; };
70CE0AB1285963A300DAEA86 /* ParseHookTriggerObjectRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseHookTriggerObjectRequest.swift; sourceTree = "<group>"; };
70CE0AB6285A83B100DAEA86 /* ParseHookable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseHookable.swift; sourceTree = "<group>"; };
70CE0ABB285F8FF900DAEA86 /* ParseTypeable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseTypeable.swift; sourceTree = "<group>"; };
70CE0AC0285FD59B00DAEA86 /* ParseHookFunctionable+async.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ParseHookFunctionable+async.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1838,6 +1848,7 @@
70385E702858D2DD0084D306 /* ParseHookTriggerable.swift */,
70CE0ACA285FD5CB00DAEA86 /* ParseHookTriggerable+async.swift */,
70CE0ACF285FD5D700DAEA86 /* ParseHookTriggerable+combine.swift */,
70B412B829801B8B00F706EA /* ParseHookTriggerRequestable.swift */,
705025EA285153BC008D6624 /* ParsePushApplePayloadable.swift */,
705025EF2851542D008D6624 /* ParsePushFirebasePayloadable.swift */,
705025CB284CE4C2008D6624 /* ParsePushPayloadable.swift */,
Expand Down Expand Up @@ -2167,7 +2178,8 @@
7085DDA226CC8A470033B977 /* ParseHealth+combine.swift */,
70385E7F2858EAA90084D306 /* ParseHookFunctionRequest.swift */,
70CE0A9328590A0A00DAEA86 /* ParseHookResponse.swift */,
70CE0AB1285963A300DAEA86 /* ParseHookTriggerRequest.swift */,
70CE0AB1285963A300DAEA86 /* ParseHookTriggerObjectRequest.swift */,
70B412B329801AFB00F706EA /* ParseHookTriggerRequest.swift */,
70D41D7F28B520E200613510 /* ParseKeychainAccessGroup.swift */,
F97B464024D9C78B00F4A88B /* ParseOperation.swift */,
703B091026BD992E005A112F /* ParseOperation+async.swift */,
Expand Down Expand Up @@ -2700,6 +2712,7 @@
703B090726BD9764005A112F /* ParseCloudable+async.swift in Sources */,
918CED592684C74000CFDC83 /* ParseLiveQuery+combine.swift in Sources */,
70386A0625D9718C0048EC1B /* Data.swift in Sources */,
70B412B929801B8B00F706EA /* ParseHookTriggerRequestable.swift in Sources */,
F97B465F24D9C7B500F4A88B /* KeychainStore.swift in Sources */,
70B4E0C12762F313004C9757 /* QueryWhere.swift in Sources */,
70170A442656B02D0070C905 /* ParseAnalytics.swift in Sources */,
Expand All @@ -2718,6 +2731,7 @@
91679D64268E596300F71809 /* ParseVersion.swift in Sources */,
91285B1C26990D7F0051B544 /* ParsePolygon.swift in Sources */,
91BB8FCA2690AC99005A6BA5 /* QueryViewModel.swift in Sources */,
70B412B429801AFB00F706EA /* ParseHookTriggerRequest.swift in Sources */,
7085DD9426CBF3A70033B977 /* Documentation.docc in Sources */,
705025EB285153BC008D6624 /* ParsePushApplePayloadable.swift in Sources */,
705025A928441C96008D6624 /* ParseFieldOptions.swift in Sources */,
Expand Down Expand Up @@ -2782,7 +2796,7 @@
F97B45E224D9C6F200F4A88B /* AnyEncodable.swift in Sources */,
700396EA25A3892D0052CB31 /* LiveQuerySocketDelegate.swift in Sources */,
9116F66F26A35D610082F6D6 /* URLCache.swift in Sources */,
70CE0AB2285963A300DAEA86 /* ParseHookTriggerRequest.swift in Sources */,
70CE0AB2285963A300DAEA86 /* ParseHookTriggerObjectRequest.swift in Sources */,
709A148728396B1D00BF85E5 /* ParseField.swift in Sources */,
70572671259033A700F0ADD5 /* ParseFileManager.swift in Sources */,
70F03A342780CA4300E5AFB4 /* ParseGitHub.swift in Sources */,
Expand Down Expand Up @@ -3016,6 +3030,7 @@
703B090826BD9764005A112F /* ParseCloudable+async.swift in Sources */,
918CED5A2684C74000CFDC83 /* ParseLiveQuery+combine.swift in Sources */,
70386A0725D9718C0048EC1B /* Data.swift in Sources */,
70B412BA29801B8B00F706EA /* ParseHookTriggerRequestable.swift in Sources */,
F97B466024D9C7B500F4A88B /* KeychainStore.swift in Sources */,
70B4E0C22762F313004C9757 /* QueryWhere.swift in Sources */,
70170A452656B02D0070C905 /* ParseAnalytics.swift in Sources */,
Expand All @@ -3034,6 +3049,7 @@
91679D65268E596300F71809 /* ParseVersion.swift in Sources */,
91285B1D26990D7F0051B544 /* ParsePolygon.swift in Sources */,
91BB8FCB2690AC99005A6BA5 /* QueryViewModel.swift in Sources */,
70B412B529801AFB00F706EA /* ParseHookTriggerRequest.swift in Sources */,
7085DD9526CBF3A70033B977 /* Documentation.docc in Sources */,
705025EC285153BC008D6624 /* ParsePushApplePayloadable.swift in Sources */,
705025AA28441C96008D6624 /* ParseFieldOptions.swift in Sources */,
Expand Down Expand Up @@ -3098,7 +3114,7 @@
700396EB25A3892D0052CB31 /* LiveQuerySocketDelegate.swift in Sources */,
9116F67026A35D610082F6D6 /* URLCache.swift in Sources */,
70572672259033A700F0ADD5 /* ParseFileManager.swift in Sources */,
70CE0AB3285963A300DAEA86 /* ParseHookTriggerRequest.swift in Sources */,
70CE0AB3285963A300DAEA86 /* ParseHookTriggerObjectRequest.swift in Sources */,
709A148828396B1D00BF85E5 /* ParseField.swift in Sources */,
707A3C2125B14BD0000D215C /* ParseApple.swift in Sources */,
70F03A352780CA4D00E5AFB4 /* ParseGitHub.swift in Sources */,
Expand Down Expand Up @@ -3466,6 +3482,7 @@
70D1BE7625BB43EB00A42E7C /* BaseConfig.swift in Sources */,
703B090A26BD9764005A112F /* ParseCloudable+async.swift in Sources */,
918CED5C2684C74000CFDC83 /* ParseLiveQuery+combine.swift in Sources */,
70B412BC29801B8B00F706EA /* ParseHookTriggerRequestable.swift in Sources */,
70386A0925D9718C0048EC1B /* Data.swift in Sources */,
70B4E0C42762F313004C9757 /* QueryWhere.swift in Sources */,
F97B460524D9C6F200F4A88B /* NoBody.swift in Sources */,
Expand All @@ -3484,6 +3501,7 @@
91B79ACB26EE3C5D00073F2C /* API+BatchCommand.swift in Sources */,
91679D67268E596300F71809 /* ParseVersion.swift in Sources */,
91285B1F26990D7F0051B544 /* ParsePolygon.swift in Sources */,
70B412B729801AFB00F706EA /* ParseHookTriggerRequest.swift in Sources */,
91BB8FCD2690AC99005A6BA5 /* QueryViewModel.swift in Sources */,
705025EE285153BC008D6624 /* ParsePushApplePayloadable.swift in Sources */,
705025AC28441C96008D6624 /* ParseFieldOptions.swift in Sources */,
Expand Down Expand Up @@ -3548,7 +3566,7 @@
700396ED25A3892D0052CB31 /* LiveQuerySocketDelegate.swift in Sources */,
9116F67226A35D620082F6D6 /* URLCache.swift in Sources */,
70572674259033A700F0ADD5 /* ParseFileManager.swift in Sources */,
70CE0AB5285963A300DAEA86 /* ParseHookTriggerRequest.swift in Sources */,
70CE0AB5285963A300DAEA86 /* ParseHookTriggerObjectRequest.swift in Sources */,
709A148A28396B1D00BF85E5 /* ParseField.swift in Sources */,
707A3C2325B14BD0000D215C /* ParseApple.swift in Sources */,
70F03A372780CA4E00E5AFB4 /* ParseGitHub.swift in Sources */,
Expand Down Expand Up @@ -3657,6 +3675,7 @@
70D1BE7525BB43EB00A42E7C /* BaseConfig.swift in Sources */,
703B090926BD9764005A112F /* ParseCloudable+async.swift in Sources */,
918CED5B2684C74000CFDC83 /* ParseLiveQuery+combine.swift in Sources */,
70B412BB29801B8B00F706EA /* ParseHookTriggerRequestable.swift in Sources */,
70386A0825D9718C0048EC1B /* Data.swift in Sources */,
70B4E0C32762F313004C9757 /* QueryWhere.swift in Sources */,
F97B460424D9C6F200F4A88B /* NoBody.swift in Sources */,
Expand All @@ -3675,6 +3694,7 @@
91B79ACA26EE3C5D00073F2C /* API+BatchCommand.swift in Sources */,
91679D66268E596300F71809 /* ParseVersion.swift in Sources */,
91285B1E26990D7F0051B544 /* ParsePolygon.swift in Sources */,
70B412B629801AFB00F706EA /* ParseHookTriggerRequest.swift in Sources */,
91BB8FCC2690AC99005A6BA5 /* QueryViewModel.swift in Sources */,
705025ED285153BC008D6624 /* ParsePushApplePayloadable.swift in Sources */,
705025AB28441C96008D6624 /* ParseFieldOptions.swift in Sources */,
Expand Down Expand Up @@ -3739,7 +3759,7 @@
700396EC25A3892D0052CB31 /* LiveQuerySocketDelegate.swift in Sources */,
9116F67126A35D620082F6D6 /* URLCache.swift in Sources */,
70572673259033A700F0ADD5 /* ParseFileManager.swift in Sources */,
70CE0AB4285963A300DAEA86 /* ParseHookTriggerRequest.swift in Sources */,
70CE0AB4285963A300DAEA86 /* ParseHookTriggerObjectRequest.swift in Sources */,
709A148928396B1D00BF85E5 /* ParseField.swift in Sources */,
707A3C2225B14BD0000D215C /* ParseApple.swift in Sources */,
70F03A362780CA4D00E5AFB4 /* ParseGitHub.swift in Sources */,
Expand Down
2 changes: 1 addition & 1 deletion Sources/ParseSwift/ParseConstants.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import Foundation

enum ParseConstants {
static let sdk = "swift"
static let version = "5.0.0-beta.5"
static let version = "5.0.0-beta.6"
static let fileManagementDirectory = "parse/"
static let fileManagementPrivateDocumentsDirectory = "Private Documents/"
static let fileManagementLibraryDirectory = "Library/"
Expand Down
4 changes: 2 additions & 2 deletions Sources/ParseSwift/Protocols/ParseHookRequestable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ import Foundation

/**
Conforming to `ParseHookRequestable` allows you to create types that
can decode requests when `ParseHookFunctionable` functions are called.
can decode requests.
- requires: `.usePrimaryKey` has to be available. It is recommended to only
use the master key in server-side applications where the key is kept secure and not
exposed to the public.
*/
public protocol ParseHookRequestable: ParseTypeable {
associatedtype UserType: ParseCloudUser
/**
Specifies if the **masterKey** was used in the
Specifies if the **primaryKey** was used in the
Parse hook call.
*/
var primaryKey: Bool? { get }
Expand Down
23 changes: 23 additions & 0 deletions Sources/ParseSwift/Protocols/ParseHookTriggerRequestable.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//
// ParseHookTriggerRequestable.swift
// ParseSwift
//
// Created by Corey Baker on 1/24/23.
// Copyright © 2023 Network Reconnaissance Lab. All rights reserved.
//

import Foundation

/**
Conforming to `ParseHookTriggerRequestable` allows you to create types that
can decode requests when `ParseHookTriggerable` triggers are called.
- requires: `.usePrimaryKey` has to be available. It is recommended to only
use the master key in server-side applications where the key is kept secure and not
exposed to the public.
*/
public protocol ParseHookTriggerRequestable: ParseHookRequestable {
/// The types of Parse Hook Trigger.
var triggerName: String? { get }
/// The number of clients connected.
var clients: Int? { get }
}
2 changes: 1 addition & 1 deletion Sources/ParseSwift/Protocols/ParseHookTriggerable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import Foundation

/**
Conforming to `ParseHookFunctionable` allows the creation of hooks which
Conforming to `ParseHookTriggerable` allows the creation of hooks which
are Cloud Code triggers.
- requires: `.usePrimaryKey` has to be available. It is recommended to only
use the master key in server-side applications where the key is kept secure and not
Expand Down
1 change: 1 addition & 0 deletions Sources/ParseSwift/Types/ParseHookFunctionRequest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,5 @@ extension ParseHookFunctionRequest {
}
return context
}

}
Loading

0 comments on commit 2494b3f

Please sign in to comment.