Skip to content

spatio-labs/spatiosdk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SpatioSDK

Swift Version

A Swift package for building capabilities for Spatio, with support for local and remote API integrations.

Overview

SpatioSDK provides the core models and utilities needed for creating capabilities that interact with remote APIs:

  • API parameter models and request handling
  • Flexible authentication configuration
  • Command line argument parsing
  • Capability result formatting
  • Mock data support for testing

Installation

Swift Package Manager

dependencies: [ .package(url: "https://github.com/spatio-labs/spatiosdk.git", .upToNextMajor(from: "1.0.0")) ]

For Capability Scripts with swift-sh

#!/usr/bin/env swift sh import SpatioSDK // @spatio-labs ~> 1.0.0

Getting Started

Initialize the SDK with your configuration:

import SpatioSDK // Configure the SDK with custom settings let config = SpatioConfig( loggingLevel: .debug, useMockData: false, baseURL: URL(string: "https://api.example.com") ) SpatioSDK.shared.configure(with: config)

Authentication System

SpatioSDK provides a flexible authentication system that supports:

  • Multiple authentication types (API key, OAuth2, Basic, etc.)
  • Configuration at organization, group, or capability level
  • Environment variable-based secret storage

Configuration Levels

Authentication can be configured at three levels:

  1. Organization level - Applies to all capabilities in an organization
  2. Group level - Applies to all capabilities in a group
  3. Capability level - Applies to a specific capability

More specific configurations override less specific ones.

Example: Configuring Auth

// Configure OAuth2 for all Google services let googleOAuth = AuthConfig( type: .oauth2, parameterName: "Authorization", location: .header, valuePrefix: "Bearer ", envVariable: "GOOGLE_AUTH_TOKEN" ) // Set at organization level AuthManager.shared.setAuthConfig(for: "google", config: googleOAuth) // Override for a specific group if needed let apiKeyConfig = AuthConfig( type: .apiKey, parameterName: "api_key", location: .query, envVariable: "MY_SERVICE_API_KEY" ) AuthManager.shared.setAuthConfig(for: "google", group: "maps", config: apiKeyConfig)

Building Capabilities

Creating a Remote API Capability

  1. Create a Swift script using swift-sh that imports SpatioSDK:
#!/usr/bin/env swift sh import SpatioSDK // @spatio-labs ~> 1.0.0 import Foundation // Configure authentication func configureAuth() { let authConfig = AuthConfig( type: .apiKey, parameterName: "Authorization", location: .header, valuePrefix: "Bearer ", envVariable: "API_AUTH_TOKEN" ) AuthManager.shared.setAuthConfig(for: "myorg", config: authConfig) } // Implement the capability class MyApiCapability: BaseRemoteCapability { override func configureRequest() -> APIRequest { return APIRequest( baseURL: "https://api.example.com", endpoint: "/resource", method: "GET", parameters: [ APIParameter( name: "query", type: "string", required: true, location: .query, description: "Search query" ) ] ) } // Override to provide custom mock data (optional) override func provideMockData(for params: [String: String]) -> String { return """  {  "mock": true,  "query": "\(params["query"] ?? "")",  "results": [  {"id": 1, "name": "Result 1"},  {"id": 2, "name": "Result 2"}  ]  }  """ } } // Parse command line arguments @main struct MyCapabilityScript { static func main() async throws { // Configure auth configureAuth() // Create capability with identifiers let capability = MyApiCapability( organization: "myorg", group: "mygroup", capability: "MyCapability" ) // Parse command line arguments let params = CommandLineUtils.parseArguments(for: capability.request.parameters) // Execute the capability let result = try await capability.execute(params: params) CommandLineUtils.printResult(result) } }
  1. Make the script executable:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors