Skip to content

Release/26.7.2 - #318

Open
skyflow-bharti wants to merge 16 commits into
mainfrom
release/26.7.2
Open

Release/26.7.2#318
skyflow-bharti wants to merge 16 commits into
mainfrom
release/26.7.2

Conversation

@skyflow-bharti

@skyflow-bharti skyflow-bharti commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

This PR updates the Skyflow iOS SDK to a FlowDB v2-oriented API shape by adding typed response wrappers/callbacks, supporting token-group redactions and typed upsert/additionalFields options, and expanding/adjusting tests and samples accordingly.

Changes:

Introduces typed response wrappers (CollectResponse, RevealResponse) and typed callbacks (CollectCallback, RevealCallback), plus request-level token-group redactions for detokenize.
Adds FlowVault v2 request/response plumbing for insert/collect/detokenize (new request body builders + v2 callbacks) and typed upsert/additionalFields models.
Updates/extends unit tests and sample apps; removes the GetSample sample project and AEXML references in several Podfiles.

@github-actions

Copy link
Copy Markdown

🔐 Gitleaks Findings: 20 issue(s) detected

🔸 Rule: generic-api-key
📄 File: README.md:null
📝 Description: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
🔑 Secret: **********
🔗 Path: README.md:null

🔸 Rule: generic-api-key
📄 File: README.md:null
📝 Description: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
🔑 Secret: **********
🔗 Path: README.md:null

🔸 Rule: generic-api-key
📄 File: README.md:null
📝 Description: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
🔑 Secret: **********
🔗 Path: README.md:null

🔸 Rule: generic-api-key
📄 File: README.md:null
📝 Description: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
🔑 Secret: **********
🔗 Path: README.md:null

🔸 Rule: generic-api-key
📄 File: README.md:null
📝 Description: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
🔑 Secret: **********
🔗 Path: README.md:null

🔸 Rule: generic-api-key
📄 File: README.md:null
📝 Description: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
🔑 Secret: **********
🔗 Path: README.md:null

🔸 Rule: generic-api-key
📄 File: README.md:null
📝 Description: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
🔑 Secret: **********
🔗 Path: README.md:null

🔸 Rule: generic-api-key
📄 File: README.md:null
📝 Description: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
🔑 Secret: **********
🔗 Path: README.md:null

🔸 Rule: generic-api-key
📄 File: README.md:null
📝 Description: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
🔑 Secret: **********
🔗 Path: README.md:null

🔸 Rule: generic-api-key
📄 File: README.md:null
📝 Description: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
🔑 Secret: **********
🔗 Path: README.md:null

...and more. Only showing first 10 findings.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the Skyflow iOS SDK to a FlowDB v2-oriented API shape by adding typed response wrappers/callbacks, supporting token-group redactions and typed upsert/additionalFields options, and expanding/adjusting tests and samples accordingly.

Changes:

  • Introduces typed response wrappers (CollectResponse, RevealResponse) and typed callbacks (CollectCallback, RevealCallback), plus request-level token-group redactions for detokenize.
  • Adds FlowVault v2 request/response plumbing for insert/collect/detokenize (new request body builders + v2 callbacks) and typed upsert/additionalFields models.
  • Updates/extends unit tests and sample apps; removes the GetSample sample project and AEXML references in several Podfiles.

Reviewed changes

Copilot reviewed 96 out of 101 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
Tests/skyflow-iOS-utilTests/skyflow_iOS_utilTests.swift Adds/updates request-body/upsert validation tests (v2 + dormant v1 helpers).
Tests/skyflow-iOS-utilTests/skyflow_iOS_revealApiCallbackTests.swift Adds unit tests for dormant v1 RevealAPICallback.
Tests/skyflow-iOS-utilTests/skyflow_iOS_insertUtilTests 2.swift Updates insert util tests to FlowVault v2 callback/response shapes.
Tests/skyflow-iOS-utilTests/skyflow_iOS_dormantCollectRequestBodyTests.swift Adds unit tests for dormant v1 CollectRequestBody.
Tests/skyflow-iOS-utilTests/skyflow_iOS_dormantCollectApiCallbackTests.swift Adds unit tests for dormant v1 collect/insert callbacks.
Tests/skyflow-iOS-utilTests/MockURLProtocol.swift Adds URLProtocol-based network mock for tests.
Tests/skyflow-iOS-utilTests/DemoImpl.swift Updates demo callback to capture typed Collect/Reveal responses + adapters.
Tests/skyflow-iOS-scenarioTests/DemoImpl.swift Removes unused XML/AEXML-related state from scenario callback.
Tests/skyflow-iOS-scenarioTests/ClientScenario.swift Whitespace-only adjustment.
Tests/skyflow-iOS-revealTests/skyflow_iOS_revealTests.swift Updates reveal tests for new redaction semantics + typed callback usage.
Tests/skyflow-iOS-revealTests/DemoImpl.swift Updates demo callback to capture typed Collect/Reveal responses + adapters.
Tests/skyflow-iOS-getTests/skyflow_iOS_getTests.swift Adds empty-vaultURL failure-path test for get.
Tests/skyflow-iOS-getByIdTests/skyflow_iOS_getByIdTests.swift Adds empty-vaultURL failure-path test for getById.
Tests/skyflow-iOS-errorTests/Skyflow_iOS_revealErrorTests.swift Updates reveal error tests for new reveal input/ callback behavior.
Tests/skyflow-iOS-errorTests/Skyflow_iOS_generalErrorTests.swift Adds tests for SkyflowError.wrap + API error parsing behavior.
Tests/skyflow-iOS-errorTests/DemoImpl.swift Updates demo callback to capture typed Collect/Reveal responses + adapters.
Tests/skyflow-iOS-elementTests/skyflow_iOS_elementTests.swift Updates reveal element input initialization (no per-element redaction).
Tests/skyflow-iOS-composableTests/skyflow_iOS_composableEelementsTests.swift Updates composable upsert tests to new typed UpsertOption.
Tests/skyflow-iOS-collectTests/skyflow_iOS_collectTests.swift Updates collect tests for typed callbacks/options and FlowVault v2 request body.
Tests/skyflow-iOS-collectTests/DemoImpl.swift Updates demo callback to capture typed Collect/Reveal responses + adapters.
Sources/Skyflow/Version.swift Bumps SDK version string to dev hash suffix.
Sources/Skyflow/skyflow_iOS.swift Removes unused placeholder file.
Sources/Skyflow/reveal/TokenGroupRedaction.swift Adds public model for request-level token-group redactions.
Sources/Skyflow/reveal/RevealValueCallback.swift Changes reveal merge behavior to surface per-token failures alongside records.
Sources/Skyflow/reveal/RevealResponse.swift Adds typed reveal response + typed RevealCallback.
Sources/Skyflow/reveal/RevealRequestRecord.swift Removes per-record redaction from internal detokenize record model.
Sources/Skyflow/reveal/RevealRequestBody.swift Removes per-element redaction field from reveal request payload.
Sources/Skyflow/reveal/RevealOptions.swift Adds optional tokenGroupRedactions to reveal options.
Sources/Skyflow/reveal/RevealElementInput.swift Removes per-element redaction from public reveal element input API.
Sources/Skyflow/reveal/RevealContainer.swift Updates reveal container API to use typed callback and pass token-group redactions.
Sources/Skyflow/reveal/RevealApiCallback.swift Updates dormant v1 reveal callback to fixed PLAIN_TEXT redaction.
Sources/Skyflow/reveal/FlowVaultRevealApiCallback.swift Adds FlowVault v2 detokenize callback implementation.
Sources/Skyflow/reveal/FlowVaultDetokenizeRequestBody.swift Adds FlowVault v2 detokenize request body builder.
Sources/Skyflow/errors/ErrorCodes.swift Adds SkyflowError normalization/wrapping improvements + new upsert error.
Sources/Skyflow/elements/SkyflowElement.swift Renames skyflowID to skyflowId on elements.
Sources/Skyflow/elements/core/CollectElementInput.swift Renames skyflowID to skyflowId in collect element input initializers.
Sources/Skyflow/core/Message.swift Whitespace-only adjustment.
Sources/Skyflow/core/InterfaceName.swift Whitespace-only adjustment.
Sources/Skyflow/core/Client.swift Normalizes vaultURL base + routes insert/detokenize to FlowVault v2 plumbing.
Sources/Skyflow/core/APIClient.swift Switches to FlowVault v2 callbacks for insert/collect/detokenize; adjusts URLs.
Sources/Skyflow/composable/ComposableContainer.swift Updates additionalFields validation to typed model + FlowVault v2 request body.
Sources/Skyflow/collect/UpsertOption.swift Adds typed upsert model (UpsertOption, UpdateType).
Sources/Skyflow/collect/InsertOptions.swift Replaces untyped upsert dicts with typed upsert options.
Sources/Skyflow/collect/FlowVaultUpdateRequestBody.swift Adds FlowVault v2 update request body builder.
Sources/Skyflow/collect/FlowVaultInsertRequestBody.swift Adds FlowVault v2 insert request body builder (data/tableName/upsert).
Sources/Skyflow/collect/FlowVaultInsertAPICallback.swift Adds FlowVault v2 insert callback incl. insert+update merge behavior.
Sources/Skyflow/collect/FlowVaultICOptions.swift Adds internal typed IC options + typed upsert validation.
Sources/Skyflow/collect/FlowVaultCollectRequestBody.swift Adds FlowVault v2 collect request body builder (insert + update payload).
Sources/Skyflow/collect/FlowVaultCollectAPICallback.swift Adds FlowVault v2 collect callback incl. insert+update merge behavior.
Sources/Skyflow/collect/CollectResponse.swift Adds typed collect response + typed CollectCallback.
Sources/Skyflow/collect/CollectRequestBody.swift Updates dormant v1 request-body handling to use skyflowId naming.
Sources/Skyflow/collect/CollectOptions.swift Replaces untyped additionalFields/upsert dicts with typed models.
Sources/Skyflow/collect/CollectContainer.swift Updates collect container API to typed callback + typed additionalFields/upsert.
Sources/Skyflow/collect/AdditionalFields.swift Adds typed additionalFields model.
Skyflow.podspec Updates podspec version/source to dev hash/commit pin.
Samples/Validations/Podfile Removes AEXML dependency; bumps Skyflow version constraint.
Samples/UpsertFeature/UpsertFeature/ViewController.swift Updates sample to typed callbacks/responses + token-group redactions + typed upsert.
Samples/UpsertFeature/UpsertFeature/ResponseStructs.swift Removes local response structs (now uses SDK typed responses).
Samples/UpsertFeature/UpsertFeature.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved Removes AEXML pin.
Samples/UpdateDataUsingElements/UpdateDataUsingElements/ViewController.swift Updates sample to typed callbacks/responses + skyflowId rename.
Samples/UpdateDataUsingElements/UpdateDataUsingElements/ResponseStructs.swift Removes local response structs (now uses SDK typed responses).
Samples/UpdateDataUsingElements/UpdateDataUsingElements/ExampleAPICallback.swift Removes custom callback (now uses SDK typed callbacks).
Samples/UpdateDataUsingElements/Podfile Removes AEXML dependency; loosens Skyflow constraint.
Samples/InputFormatting/Podfile.lock Removes AEXML entries from lockfile.
Samples/InputFormatting/Podfile Removes AEXML dependency; bumps Skyflow version constraint.
Samples/InputFormatting/InputFormatting/ViewController.swift Updates sample to typed callbacks/responses.
Samples/InputFormatting/InputFormatting/ResponseStructs.swift Removes local response structs (now uses SDK typed responses).
Samples/InputFormatting/InputFormatting/ExampleAPICallback.swift Removes custom callback (now uses SDK typed callbacks).
Samples/GetSample/Podfile Deletes GetSample Podfile (sample removed).
Samples/GetSample/GetSampleUITests/GetSampleUITestsLaunchTests.swift Deletes GetSample UI test (sample removed).
Samples/GetSample/GetSampleUITests/GetSampleUITests.swift Deletes GetSample UI test (sample removed).
Samples/GetSample/GetSampleTests/GetSampleTests.swift Deletes GetSample unit test (sample removed).
Samples/GetSample/GetSample/ViewController.swift Deletes GetSample view controller (sample removed).
Samples/GetSample/GetSample/SceneDelegate.swift Deletes GetSample scene delegate (sample removed).
Samples/GetSample/GetSample/ResponseStructs.swift Deletes GetSample response structs (sample removed).
Samples/GetSample/GetSample/Info.plist Deletes GetSample plist (sample removed).
Samples/GetSample/GetSample/ExampleTokenProvider.swift Deletes GetSample token provider (sample removed).
Samples/GetSample/GetSample/ExampleAPICallback.swift Deletes GetSample callback (sample removed).
Samples/GetSample/GetSample/Base.lproj/Main.storyboard Deletes GetSample storyboard (sample removed).
Samples/GetSample/GetSample/Base.lproj/LaunchScreen.storyboard Deletes GetSample launch screen (sample removed).
Samples/GetSample/GetSample/Assets.xcassets/Contents.json Deletes GetSample assets (sample removed).
Samples/GetSample/GetSample/Assets.xcassets/AppIcon.appiconset/Contents.json Deletes GetSample app icon set (sample removed).
Samples/GetSample/GetSample/Assets.xcassets/AccentColor.colorset/Contents.json Deletes GetSample accent color set (sample removed).
Samples/GetSample/GetSample/AppDelegate.swift Deletes GetSample app delegate (sample removed).
Samples/GetSample/GetSample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved Deletes GetSample SPM resolution (sample removed).
Samples/GetSample/GetSample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist Deletes GetSample workspace checks (sample removed).
Samples/GetSample/GetSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata Deletes GetSample workspace data (sample removed).
Samples/ComposableElements/Podfile Removes AEXML dependency; bumps Skyflow version constraint.
Samples/ComposableElements/ComposableElements/ViewController.swift Updates sample to typed callbacks/responses + typed upsert/additionalFields + token-group redactions.
Samples/ComposableElements/ComposableElements/ResponseStructs.swift Removes local response structs (now uses SDK typed responses).
Samples/ComposableElements/ComposableElements/ExampleAPICallback.swift Removes custom callback (now uses SDK typed callbacks).
Samples/CollectAndRevealSample/Podfile Removes AEXML dependency; bumps Skyflow version constraint.
Samples/CollectAndRevealSample/CollectAndRevealSample/ResponseStructs.swift Removes local response structs (now uses SDK typed responses).
Samples/CollectAndRevealSample/CollectAndRevealSample/ExampleAPICallback.swift Removes custom callback (now uses SDK typed callbacks).
Samples/CollectAndRevealSample/CollectAndRevealSample/CollectAndRevealViewController.swift Updates sample to typed callbacks/responses + token-group redactions.
Samples/CollectAndRevealSample/CollectAndRevealSample.xcworkspace/xcshareddata/swiftpm/Package.resolved Adds SPM resolution for Skyflow dependency.
Files not reviewed (1)
  • Samples/GetSample/GetSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: Generated file
Comments suppressed due to low confidence (5)

Sources/Skyflow/core/Client.swift:118

  • Client.detokenize(...) being internal makes detokenization unavailable to SDK consumers (source-breaking change). If the intent is still to expose detokenize publicly, this should remain public (or keep a deprecated public overload).
    Sources/Skyflow/core/Client.swift:173
  • Client.getById(...) was made internal, which removes a previously public API surface for SDK consumers (source-breaking change). Consider keeping it public (or providing a deprecated public overload) to avoid breaking integrations.
    Sources/Skyflow/core/Client.swift:256
  • Client.get(...) was made internal, which removes a previously public API surface for SDK consumers (source-breaking change). Consider keeping it public (or providing a deprecated public overload) to avoid breaking integrations.
    Sources/Skyflow/collect/FlowVaultInsertAPICallback.swift:91
  • Here mergedErrors stores {"error": String} for caught errors, but other error paths use the structured {"error": {"httpCode": Int, "message": String, ...}} shape. This inconsistency makes downstream error normalization (e.g., SkyflowError.wrap) harder. Consider using the structured {"error": {"httpCode": 0, "message": ...}} shape (and applying the same change to the other similar append sites in this file).
    Sources/Skyflow/collect/FlowVaultCollectAPICallback.swift:88
  • Here mergedErrors stores {"error": String} for caught errors, but other error paths use the structured {"error": {"httpCode": Int, "message": String, ...}} shape. This inconsistency makes downstream error normalization (e.g., SkyflowError.wrap) harder. Consider using the structured {"error": {"httpCode": 0, "message": ...}} shape (and applying the same change to the other similar append sites in this file).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

}

func collect(callback: Callback, options: CollectOptions? = CollectOptions()) where T: CollectContainer {
func collect(callback: CollectCallback, options: CollectOptions? = CollectOptions()) where T: CollectContainer {
}

func reveal(callback: Callback, options: RevealOptions? = RevealOptions()) where T: RevealContainer {
func reveal(callback: RevealCallback, options: RevealOptions? = RevealOptions()) where T: RevealContainer {
Comment on lines +69 to +75
return
}

let group = DispatchGroup()
var mergedRecords: [[String: Any]] = []
var mergedErrors: [[String: Any]] = []

Comment on lines +72 to +78

if hasInsert {
group.enter()
let url = URL(string: self.apiClient.vaultURL + "v2/records/insert")!
do {
let (request, session) = try self.getRequestSession(url: url)
let task = session.dataTask(with: request) { data, response, error in
}

public func insert(records: [String: Any], options: InsertOptions = InsertOptions(), callback: Callback) {
internal func insert(records: [String: Any], options: InsertOptions = InsertOptions(), callback: Callback) {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants