{"id":48975864,"url":"https://github.com/stuartmeeks/nextiteration.spectreconsole.auth.providers","last_synced_at":"2026-04-18T09:01:26.520Z","repository":{"id":351993774,"uuid":"1213383304","full_name":"StuartMeeks/NextIteration.SpectreConsole.Auth.Providers","owner":"StuartMeeks","description":"Provider packages for NextIteration.SpectreConsole.Auth — Adobe VIP Marketplace, Airtable, SoftwareOne Marketplace.","archived":false,"fork":false,"pushed_at":"2026-04-17T11:05:26.000Z","size":57,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-17T12:29:28.742Z","etag":null,"topics":["adobe","airtable","authentication","cli","csharp","dotnet","nuget","softwareone","spectre-console"],"latest_commit_sha":null,"homepage":"","language":"C#","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/StuartMeeks.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-17T10:18:10.000Z","updated_at":"2026-04-17T10:48:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/StuartMeeks/NextIteration.SpectreConsole.Auth.Providers","commit_stats":null,"previous_names":["stuartmeeks/nextiteration.spectreconsole.auth.providers"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/StuartMeeks/NextIteration.SpectreConsole.Auth.Providers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StuartMeeks%2FNextIteration.SpectreConsole.Auth.Providers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StuartMeeks%2FNextIteration.SpectreConsole.Auth.Providers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StuartMeeks%2FNextIteration.SpectreConsole.Auth.Providers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StuartMeeks%2FNextIteration.SpectreConsole.Auth.Providers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/StuartMeeks","download_url":"https://codeload.github.com/StuartMeeks/NextIteration.SpectreConsole.Auth.Providers/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StuartMeeks%2FNextIteration.SpectreConsole.Auth.Providers/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31962889,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"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":["adobe","airtable","authentication","cli","csharp","dotnet","nuget","softwareone","spectre-console"],"created_at":"2026-04-18T09:00:38.314Z","updated_at":"2026-04-18T09:01:26.503Z","avatar_url":"https://github.com/StuartMeeks.png","language":"C#","readme":"# NextIteration.SpectreConsole.Auth.Providers\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![.NET](https://img.shields.io/badge/.NET-10.0-purple.svg)](https://dotnet.microsoft.com/)\n[![CI](https://github.com/StuartMeeks/NextIteration.SpectreConsole.Auth.Providers/actions/workflows/ci.yml/badge.svg)](https://github.com/StuartMeeks/NextIteration.SpectreConsole.Auth.Providers/actions/workflows/ci.yml)\n\nProvider packages for [**NextIteration.SpectreConsole.Auth**](https://www.nuget.org/packages/NextIteration.SpectreConsole.Auth) — the generic credential-storage and Spectre.Console command layer for .NET CLI tools.\n\nEach package here ships the concrete types for one third-party service: its `ICredential`, `IToken`, `IAuthenticationService`, the `ICredentialCollector` that drives the interactive `accounts add` prompt, and an `ICredentialSummaryProvider` that renders safe display fields for `accounts list`. Drop a package in, call one DI extension, and the `accounts` branch of your CLI picks it up.\n\n---\n\n## Providers\n\n| Package                                                              | Service                                       | Status      |\n|----------------------------------------------------------------------|-----------------------------------------------|-------------|\n| `NextIteration.SpectreConsole.Auth.Providers.SoftwareOne`            | SoftwareOne Marketplace API                   | Ready       |\n| `NextIteration.SpectreConsole.Auth.Providers.Adobe`                  | Adobe VIP Marketplace API (OAuth2 via Adobe IMS) | Ready       |\n| `NextIteration.SpectreConsole.Auth.Providers.Airtable`               | Airtable API (Personal Access Token)          | Ready       |\n\nEach project has its own README with install instructions, the prompts the collector runs, the fields it stores, and the authentication model (refresh vs. pass-through) — see [`src/`](src).\n\n---\n\n## How a provider fits in\n\nThe core package (`NextIteration.SpectreConsole.Auth`) gives you:\n\n- An encrypted credential store on disk, DPAPI on Windows, macOS Keychain, or Linux libsecret.\n- A Spectre.Console `accounts` branch with `add | list | select | delete` subcommands.\n- Extensibility points: `ICredentialCollector`, `ICredentialSummaryProvider`, `IAuthenticationService\u003cTCredential, TToken\u003e`.\n\nA provider package plugs into those extensibility points for one specific service. You can register as many providers as you want in the same CLI — the `accounts add` prompt lets the user pick one at runtime.\n\n```csharp\nusing NextIteration.SpectreConsole.Auth;\nusing NextIteration.SpectreConsole.Auth.Providers.Adobe;\nusing NextIteration.SpectreConsole.Auth.Providers.Airtable;\nusing NextIteration.SpectreConsole.Auth.Providers.SoftwareOne;\n\nservices.AddCredentialStore(opts =\u003e\n{\n    opts.CredentialsDirectory = Path.Combine(\n        Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),\n        \".my-cli\", \"credentials\");\n});\n\n// Adobe's auth service hits Adobe IMS, so it needs IHttpClientFactory.\n// The other two are pass-through and don't require it — but registering\n// it once is harmless.\nservices.AddHttpClient();\n\n// One line per provider you want to support:\nservices.AddAdobeAuthProvider();\nservices.AddAirtableAuthProvider();\nservices.AddSoftwareOneAuthProvider();\n\n// And register the accounts branch against your Spectre.Console configurator:\n//     config.AddAccountsBranch();\n```\n\nFrom a consumer:\n\n```\nmy-cli accounts add             # provider prompt shows every registered provider\nmy-cli accounts list            # masked display fields from each ICredentialSummaryProvider\nmy-cli accounts select \u003cid\u003e\nmy-cli accounts delete \u003cid\u003e\n```\n\n---\n\n## Repository layout\n\n```\n/\n├── src/                   ← provider packages, one folder per provider\n├── tests/                 ← xUnit test projects (one per provider)\n└── NextIteration.SpectreConsole.Auth.Providers.slnx\n```\n\n---\n\n## Contributing a new provider\n\nThe canonical recipe is one of the existing provider projects under [`src/`](src). In short:\n\n1. New class library targeting the same framework as the core package.\n2. `PackageReference` to `NextIteration.SpectreConsole.Auth` at the current minor.\n3. Types: `XxxCredential : ICredential`, `XxxToken : IToken`, `XxxAuthenticationService : IAuthenticationService\u003cXxxCredential, XxxToken\u003e`, `XxxCredentialCollector : ICredentialCollector`, `XxxCredentialSummaryProvider : ICredentialSummaryProvider`.\n4. A DI extension `AddXxxAuthProvider(this IServiceCollection)` that registers all of the above.\n5. A per-provider README that documents the prompts, stored fields, and authentication model.\n6. Tests covering credential round-trip, token projection, and summary-provider display fields.\n\n---\n\n## Releasing\n\nEach provider releases independently via a per-package git tag (`adobe-v*`, `airtable-v*`, `softwareone-v*`). CI picks up the tag, builds, tests, and pushes just that package to nuget.org. See [RELEASING.md](RELEASING.md) for the full flow.\n\n---\n\n## Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for release notes.\n\n---\n\n## License\n\nMIT © Stuart Meeks\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstuartmeeks%2Fnextiteration.spectreconsole.auth.providers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstuartmeeks%2Fnextiteration.spectreconsole.auth.providers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstuartmeeks%2Fnextiteration.spectreconsole.auth.providers/lists"}