{"id":21748294,"url":"https://github.com/surfstudio/nodekit","last_synced_at":"2025-08-20T17:06:05.756Z","repository":{"id":38984946,"uuid":"104914026","full_name":"surfstudio/NodeKit","owner":"surfstudio","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-27T15:24:31.000Z","size":48425,"stargazers_count":34,"open_issues_count":9,"forks_count":10,"subscribers_count":24,"default_branch":"master","last_synced_at":"2025-04-13T07:15:10.927Z","etag":null,"topics":["customizable","ios","network","nodekit","requests","surf","surfstudio"],"latest_commit_sha":null,"homepage":"https://surfstudio.github.io/NodeKit/documentation/nodekit","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/surfstudio.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-09-26T17:01:17.000Z","updated_at":"2025-03-30T14:06:12.000Z","dependencies_parsed_at":"2024-02-02T19:28:15.496Z","dependency_job_id":"2d4266a3-6296-4837-b25b-4c141eee7df9","html_url":"https://github.com/surfstudio/NodeKit","commit_stats":null,"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/surfstudio/NodeKit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2FNodeKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2FNodeKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2FNodeKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2FNodeKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/surfstudio","download_url":"https://codeload.github.com/surfstudio/NodeKit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2FNodeKit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271353975,"owners_count":24744995,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-20T02:00:09.606Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["customizable","ios","network","nodekit","requests","surf","surfstudio"],"created_at":"2024-11-26T08:12:56.624Z","updated_at":"2025-08-20T17:06:05.730Z","avatar_url":"https://github.com/surfstudio.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NodeKit\n\n[![GitHubActions Build Status](https://github.com/surfstudio/NodeKit/workflows/CI/badge.svg)](https://github.com/surfstudio/NodeKit/actions)\n[![codecov](https://codecov.io/gh/surfstudio/NodeKit/branch/master/graph/badge.svg)](https://codecov.io/gh/surfstudio/NodeKit)\n[![SPM Compatible](https://img.shields.io/badge/SPM-compatible-blue.svg)](https://github.com/apple/swift-package-manager)\n\nFlexible and customizable network library\n\n---\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"TechDocs/Header.svg\"\u003e\n\u003c/p\u003e\n\n## About\n\nThe NodeKit library enables rapid and easy creation of requests of varying complexity. The system operates on the principle of asynchronous data transformation, wherein nodes are interconnected to form a chain that transforms input data into a server response.\n\n![All text](TechDocs/NodeKitHeader.svg)\n\nSuch an approach allows us to flexibly adapt to a wide range of requirements.\n\n## Build request using Swift Concurrency\n\n```Swift\n\nimport NodeKit\n\n// Define endpoints\nenum Endpoint: URLRouteProvider {\n    case auth\n\n    func url() throws -\u003e URL {\n        switch self {\n        case .auth:\n            return URL(string: \"http://nodekit.com/auth\")!\n        }\n    }\n}\n\n// Build async request that takes AuthModel\nfunc requestCredentials(authModel: AuthModel) async -\u003e NodeResult\u003cCredentials\u003e {\n    return await URLChainBuilder\u003cEndpoint\u003e()\n        .route(.post, .users)\n        .encode(as: .urlQuery)\n        .build()\n        .process(authModel)\n}\n\n```\n\n## Build request using Combine\n\n```swift\n\nfunc credentialsPublisher(for authModel: AuthModel) -\u003e AnyPublisher\u003cNodeResult\u003cCredentials\u003e, Never\u003e {\n    return URLChainBuilder\u003cEndpoint\u003e()\n        .route(.post, .users)\n        .encode(as: .urlQuery)\n        .build()\n        .nodeResultPublisher(for: authModel)\n}\n\n```\n\n## Installation\n\n### Swift Package Manager\n\nUsing Xcode:\n\n- Go to File \u003e Swift Packages \u003e Add Package Dependency\n- Enter the URL of repository https://github.com/surfstudio/NodeKit.git\n\nUsing Package.swift file:\n\nWrite dependency: \n\n```swift\ndependencies: [\n    .package(url: \"https://github.com/surfstudio/NodeKit.git\", .upToNextMajor(from: \"5.0.0\"))\n]\n```\n\n## Features\n\n- Swift Concurrency\n- Combine\n- MultipartFormData\n- URL QUERY / JSON / FORM URL Parameter Encoding\n- Mapping JSON to Struct or Class Models\n- Token refresher\n- URLCach reader and writer\n- Comprehensive Unit and Integration Test Coverage\n- Mock target for Unit tests\n- [Documentation](TechDocs/Documentation.md)\n- [Code documentation](https://surfstudio.github.io/NodeKit/documentation/nodekit)\n\n## Contributing\n\nIf you want to contribute to NodeKit, please read the [guide](TechDocs/ContributionGuide.md) beforehand.\n\n## Changelog\n\nThe list of changes you can found [here](CHANGELOG.md).\n\n## License\n\nNodeKit is released under the MIT license. See [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsurfstudio%2Fnodekit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsurfstudio%2Fnodekit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsurfstudio%2Fnodekit/lists"}