authsome 0.2.3rc67__tar.gz → 0.2.3rc69__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/.gitignore +4 -1
- authsome-0.2.3rc69/DESIGN.html +384 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/PKG-INFO +14 -21
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/README.md +13 -20
- authsome-0.2.3rc69/assets/authsome-how-it-works-light.svg +113 -0
- authsome-0.2.3rc69/design.md +76 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/pyproject.toml +1 -1
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/.github/dependabot.yml +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/.github/pull_request_template.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/.github/release-please-config.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/.github/release-please-manifest.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/.github/workflows/pr-title.yml +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/.github/workflows/publish-rc.yml +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/.github/workflows/publish.yml +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/.github/workflows/release-please.yml +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/.github/workflows/test.yml +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/.pre-commit-config.yaml +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/AGENTS.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/CHANGELOG.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/CLAUDE.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/CONTRIBUTING.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/LICENSE +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/UBIQUITOUS_LANGUAGE.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/adr/0001-provider-client-record-server-scope.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/architecture.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/authsome-design.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/cli.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/manual-testing.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/providers.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/register-provider.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/security.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/README.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/concepts/architecture.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/concepts/credential-storage.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/concepts/provider-registry.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/concepts/proxy-injection.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/docs.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/guides/custom-providers.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/guides/headless-device-code.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/guides/login-with-oauth.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/guides/profiles.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/guides/run-agents-with-proxy.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/guides/use-api-keys.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/index.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/quickstart.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/reference/bundled-providers.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/reference/cli.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/reference/environment-variables.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/reference/provider-schema.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/troubleshooting/doctor.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/troubleshooting/oauth-callbacks.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/troubleshooting/proxy-networking.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/site/troubleshooting/token-refresh.mdx +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/docs/specs/authsome-v1.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/refactoring.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/skills/authsome/SKILL.md +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/skills/authsome/evals/evals.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/audit/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/ahrefs.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/apollo.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/ashby.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/atlassian.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/beehiiv.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/brevo.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/buffer.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/calendly.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/clearbit.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/discord.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/dub.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/g2.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/github.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/gitlab.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/google.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/hubspot.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/hunter.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/instantly.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/intercom.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/keywords-everywhere.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/klaviyo-oauth.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/klaviyo.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/lemlist.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/linear.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/livestorm.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/mailchimp.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/mention-me.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/microsoft.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/notion.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/notion_dcr.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/openai.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/optimizely.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/postiz.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/postmark.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/resend.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/rewardful.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/savvycal.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/semrush.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/sendgrid.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/slack.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/tolt.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/typeform.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/wistia.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/x.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/bundled_providers/zapier.json +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/flows/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/flows/api_key.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/flows/base.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/flows/dcr_pkce.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/flows/device_code.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/flows/pkce.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/input_provider.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/models/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/models/config.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/models/connection.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/models/enums.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/models/profile.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/models/provider.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/providers/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/providers/registry.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/service.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/auth/sessions.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/cli/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/cli/client.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/cli/daemon_control.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/cli/main.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/errors.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/identity/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/proxy/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/proxy/router.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/proxy/runner.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/proxy/server.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/py.typed +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/app.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/daemon.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/dependencies.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/routes/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/routes/_deps.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/routes/auth.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/routes/connections.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/routes/health.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/routes/providers.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/routes/proxy.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/routes/ui.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/schemas.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/ui/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/ui/pages.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/ui/web_theme.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/server/urls.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/store/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/store/interfaces.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/store/local.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/ui/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/ui/static/app.js +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/ui/static/style.css +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/ui/templates/_app_detail_shell.html +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/ui/templates/_layout.html +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/ui/templates/app_detail_apikey.html +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/ui/templates/app_detail_disconnected.html +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/ui/templates/app_detail_oauth.html +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/ui/templates/connections.html +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/ui/templates/overview.html +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/utils.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/vault/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/src/authsome/vault/crypto.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/auth/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/auth/test_flows.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/auth/test_models.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/auth/test_url_template.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/cli/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/cli/conftest.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/cli/test_daemon.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/cli/test_get.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/cli/test_helpers.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/cli/test_list.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/cli/test_login.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/cli/test_logout.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/cli/test_register.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/cli/test_revoke.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/cli/test_whoami.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/common/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/common/test_audit.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/common/test_errors.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/common/test_logging.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/common/test_utils.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/conftest.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/proxy/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/proxy/test_proxy.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/vault/__init__.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/vault/test_crypto.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/tests/vault/test_store.py +0 -0
- {authsome-0.2.3rc67 → authsome-0.2.3rc69}/uv.lock +0 -0
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Instance.io - Identity Protocol</title>
|
|
7
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
8
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script>
|
|
9
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/ScrollTrigger.min.js"></script>
|
|
10
|
+
<script src="https://code.iconify.design/iconify-icon/1.0.7/iconify-icon.min.js"></script>
|
|
11
|
+
<style>
|
|
12
|
+
body {
|
|
13
|
+
overflow-x: hidden;
|
|
14
|
+
-webkit-font-smoothing: antialiased;
|
|
15
|
+
-moz-osx-font-smoothing: grayscale;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.tilt-wrapper {
|
|
19
|
+
perspective: 1000px;
|
|
20
|
+
transform-style: preserve-3d;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.tilt-element {
|
|
24
|
+
transition: transform 0.1s ease-out;
|
|
25
|
+
will-change: transform;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.vertical-text {
|
|
29
|
+
writing-mode: vertical-rl;
|
|
30
|
+
text-orientation: mixed;
|
|
31
|
+
transform: rotate(180deg);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.reveal-mask {
|
|
35
|
+
overflow: hidden;
|
|
36
|
+
display: inline-flex;
|
|
37
|
+
padding-bottom: 2px;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.reveal-text {
|
|
41
|
+
transform: translateY(110%);
|
|
42
|
+
will-change: transform;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.fade-up {
|
|
46
|
+
opacity: 0;
|
|
47
|
+
transform: translateY(20px);
|
|
48
|
+
will-change: transform, opacity;
|
|
49
|
+
}
|
|
50
|
+
</style>
|
|
51
|
+
</head>
|
|
52
|
+
<body class="bg-[#181716] text-[#1A1918] min-h-screen p-3 md:p-6 lg:p-8 flex flex-col items-center font-sans selection:bg-[#E4573D]/20 selection:text-[#E4573D]">
|
|
53
|
+
|
|
54
|
+
<!-- Framed Master Container -->
|
|
55
|
+
<main class="relative w-full max-w-[1280px] flex-grow bg-[#F4F3EF] rounded-[32px] shadow-[0_20px_60px_rgba(0,0,0,0.4)] overflow-hidden border border-[#2D2B2A] flex flex-col items-center justify-center pt-[20vh] pb-24 px-4 tilt-wrapper ring-1 ring-white/5" id="badge-container">
|
|
56
|
+
|
|
57
|
+
<!-- Subtle Diagonal Paper Texture -->
|
|
58
|
+
<div class="absolute inset-0 opacity-[0.025] mix-blend-multiply pointer-events-none" style="background-image: repeating-linear-gradient(45deg, #000 0, #000 1px, transparent 1px, transparent 6px);"></div>
|
|
59
|
+
|
|
60
|
+
<!-- Measured Spatial Guides -->
|
|
61
|
+
<div class="absolute top-[25%] left-0 w-full h-[1px] bg-[#EAE8E1] pointer-events-none"></div>
|
|
62
|
+
<div class="absolute top-[75%] left-0 w-full h-[1px] bg-[#EAE8E1] pointer-events-none"></div>
|
|
63
|
+
<div class="absolute top-0 left-[25%] w-[1px] h-full bg-[#EAE8E1] pointer-events-none"></div>
|
|
64
|
+
<div class="absolute top-0 left-[75%] w-[1px] h-full bg-[#EAE8E1] pointer-events-none"></div>
|
|
65
|
+
|
|
66
|
+
<!-- Technical Inset Framing -->
|
|
67
|
+
<div class="absolute inset-4 border border-[#E2DED6] rounded-[20px] pointer-events-none z-0">
|
|
68
|
+
<!-- Corner Brackets -->
|
|
69
|
+
<div class="absolute -top-[1px] -left-[1px] w-5 h-5 border-t border-l border-[#A39F96] rounded-tl-[20px]"></div>
|
|
70
|
+
<div class="absolute -top-[1px] -right-[1px] w-5 h-5 border-t border-r border-[#A39F96] rounded-tr-[20px]"></div>
|
|
71
|
+
<div class="absolute -bottom-[1px] -left-[1px] w-5 h-5 border-b border-l border-[#A39F96] rounded-bl-[20px]"></div>
|
|
72
|
+
<div class="absolute -bottom-[1px] -right-[1px] w-5 h-5 border-b border-r border-[#A39F96] rounded-br-[20px]"></div>
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<!-- Lanyard Assembly -->
|
|
76
|
+
<div class="absolute top-0 left-1/2 -translate-x-1/2 flex flex-col items-center z-10 pointer-events-none">
|
|
77
|
+
<!-- Strap -->
|
|
78
|
+
<div class="w-[52px] h-[228px] bg-[#DBD9D1] border-l border-r border-[#D0CEC5]"></div>
|
|
79
|
+
|
|
80
|
+
<!-- Clip Hardware -->
|
|
81
|
+
<div class="relative flex flex-col items-center -mt-2">
|
|
82
|
+
<!-- Outer Loop -->
|
|
83
|
+
<div class="w-[72px] h-[20px] border-[3px] border-[#C2C0B8] rounded-full z-20 shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)] bg-[#F4F3EF] relative overflow-hidden">
|
|
84
|
+
<div class="absolute inset-0 border border-white/50 rounded-full pointer-events-none"></div>
|
|
85
|
+
</div>
|
|
86
|
+
<!-- Vertical Connector -->
|
|
87
|
+
<div class="w-[28px] h-[24px] bg-[#42403E] z-10 -mt-[10px] rounded-[2px] border border-[#2B2A29] shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)] relative">
|
|
88
|
+
<div class="absolute top-0 left-0 right-0 h-[1px] bg-white/20"></div>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<!-- The ID Badge -->
|
|
94
|
+
<div id="badge" class="tilt-element relative w-full max-w-[620px] aspect-[1.6/1] bg-[#ECEBE5] rounded-[6px] p-[10px] flex shadow-[0_2.8px_2.2px_rgba(0,_0,_0,_0.034),_0_6.7px_5.3px_rgba(0,_0,_0,_0.048),_0_12.5px_10px_rgba(0,_0,_0,_0.06),_0_22.3px_17.9px_rgba(0,_0,_0,_0.072),_0_41.8px_33.4px_rgba(0,_0,_0,_0.086),_0_100px_80px_rgba(0,_0,_0,_0.12)] border border-[#E0DED6] z-20">
|
|
95
|
+
|
|
96
|
+
<!-- Cutout hole at top center revealing paper container behind -->
|
|
97
|
+
<div class="absolute top-0 left-1/2 -translate-x-1/2 w-[44px] h-[10px] bg-[#F4F3EF] rounded-b-md shadow-[inset_0_3px_6px_rgba(0,0,0,0.04)] border-b border-l border-r border-[#E0DED6] z-30"></div>
|
|
98
|
+
|
|
99
|
+
<!-- Bottom Cutout for Physical Connection -->
|
|
100
|
+
<div class="absolute bottom-0 left-1/2 -translate-x-1/2 w-[44px] h-[10px] bg-[#F4F3EF] rounded-t-md shadow-[inset_0_-3px_6px_rgba(0,0,0,0.04)] border-t border-l border-r border-[#E0DED6] z-30"></div>
|
|
101
|
+
|
|
102
|
+
<!-- Data Link Cable connected to bottom -->
|
|
103
|
+
<div class="absolute -bottom-[38px] left-1/2 -translate-x-1/2 flex flex-col items-center z-10 pointer-events-none">
|
|
104
|
+
<div class="w-[20px] h-[16px] bg-[#363431] rounded-b-[3px] border border-[#2B2A29] shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)] relative z-20 flex justify-center mt-[2px]">
|
|
105
|
+
<div class="w-[8px] h-[2px] bg-[#34D399] mt-[8px] rounded-full shadow-[0_0_8px_rgba(52,211,153,0.8)]"></div>
|
|
106
|
+
</div>
|
|
107
|
+
<div class="w-[6px] h-[30px] bg-gradient-to-b from-[#2D2C2A] to-transparent -mt-[1px] rounded-b-sm"></div>
|
|
108
|
+
</div>
|
|
109
|
+
|
|
110
|
+
<!-- Left Inner Screen -->
|
|
111
|
+
<div class="relative w-[78%] h-full rounded-[3px] bg-[#FCFBF9] border border-[#E6E4DD] overflow-hidden shadow-[inset_0_0_15px_rgba(0,0,0,0.02)] flex flex-col z-20">
|
|
112
|
+
|
|
113
|
+
<!-- Top UI Bar -->
|
|
114
|
+
<div class="absolute top-0 left-0 right-0 h-10 border-b border-[#F0EFEB] flex items-center px-4 justify-between z-20 bg-[#FCFBF9]/80 backdrop-blur-sm">
|
|
115
|
+
<div class="flex gap-[6px] items-center">
|
|
116
|
+
<div class="w-[5px] h-[5px] rounded-full bg-[#34D399] shadow-[0_0_6px_rgba(52,211,153,0.6)]"></div>
|
|
117
|
+
<div class="w-[5px] h-[5px] rounded-full bg-[#D1CFC7]"></div>
|
|
118
|
+
<div class="w-[5px] h-[5px] rounded-full bg-[#D1CFC7]"></div>
|
|
119
|
+
</div>
|
|
120
|
+
<div class="font-mono text-xs text-[#A8A59C] tracking-widest uppercase">Connected</div>
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
<!-- WebGL / Canvas Animation Area -->
|
|
124
|
+
<canvas id="digital-canvas" class="absolute inset-0 w-full h-full z-10 mix-blend-multiply opacity-85"></canvas>
|
|
125
|
+
|
|
126
|
+
<!-- Bottom Technical Rules -->
|
|
127
|
+
<div class="absolute bottom-4 left-4 right-4 flex justify-between items-end border-t border-[#F0EFEB] pt-2 z-20">
|
|
128
|
+
<div class="font-mono text-xs text-[#8E8B82] uppercase tracking-wider">Node: Online</div>
|
|
129
|
+
<div class="font-mono text-xs text-[#8E8B82]">Ver: 1.0.5</div>
|
|
130
|
+
</div>
|
|
131
|
+
|
|
132
|
+
<!-- Inner Brackets -->
|
|
133
|
+
<div class="absolute top-2 left-2 w-1.5 h-1.5 border-t border-l border-[#D1CFC7] z-20"></div>
|
|
134
|
+
<div class="absolute top-2 right-2 w-1.5 h-1.5 border-t border-r border-[#D1CFC7] z-20"></div>
|
|
135
|
+
<div class="absolute bottom-2 left-2 w-1.5 h-1.5 border-b border-l border-[#D1CFC7] z-20"></div>
|
|
136
|
+
<div class="absolute bottom-2 right-2 w-1.5 h-1.5 border-b border-r border-[#D1CFC7] z-20"></div>
|
|
137
|
+
</div>
|
|
138
|
+
|
|
139
|
+
<!-- Right Text Area -->
|
|
140
|
+
<div class="flex-1 h-full flex flex-col items-center justify-between py-6 px-2 z-20">
|
|
141
|
+
<!-- Technical Icon -->
|
|
142
|
+
<iconify-icon icon="solar:cpu-linear" width="26" height="26" class="text-[#363431]"></iconify-icon>
|
|
143
|
+
|
|
144
|
+
<!-- Rotated Brand Text -->
|
|
145
|
+
<div class="text-[#2D2C2A] font-normal text-4xl tracking-tight vertical-text leading-none select-none">
|
|
146
|
+
INSTANCE.IO
|
|
147
|
+
</div>
|
|
148
|
+
|
|
149
|
+
<!-- Tiny Technical Mark -->
|
|
150
|
+
<div class="flex flex-col items-center gap-1.5">
|
|
151
|
+
<div class="w-[3px] h-[3px] bg-[#E4573D]"></div>
|
|
152
|
+
<div class="w-[12px] h-[1px] bg-[#C2C0B8]"></div>
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
|
|
156
|
+
<!-- Edge highlights for tactility -->
|
|
157
|
+
<div class="absolute inset-0 border border-white/80 rounded-[6px] pointer-events-none mix-blend-overlay z-40"></div>
|
|
158
|
+
<div class="absolute top-0 left-0 right-0 h-[1px] bg-white rounded-t-[6px] pointer-events-none z-40"></div>
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
<!-- Landing Page Supplementary Content -->
|
|
162
|
+
<div class="mt-24 flex flex-col items-center text-center gap-3 relative z-20 pb-4">
|
|
163
|
+
<h1 class="text-xs tracking-[0.2em] text-[#E4573D] font-mono uppercase font-normal flex items-center gap-2">
|
|
164
|
+
<span class="w-[14px] h-[14px] rounded-sm bg-[#E4573D]/10 border border-[#E4573D]/30 flex items-center justify-center">
|
|
165
|
+
<span class="w-1 h-1 bg-[#E4573D] rounded-[1px]"></span>
|
|
166
|
+
</span>
|
|
167
|
+
<span class="reveal-mask"><span class="reveal-text block">Identity Protocol</span></span>
|
|
168
|
+
</h1>
|
|
169
|
+
|
|
170
|
+
<h2 class="text-4xl md:text-5xl tracking-tight text-[#1A1918] font-normal flex gap-2">
|
|
171
|
+
<span class="reveal-mask"><span class="reveal-text block">Deploy</span></span>
|
|
172
|
+
<span class="reveal-mask"><span class="reveal-text block">your</span></span>
|
|
173
|
+
<span class="reveal-mask"><span class="reveal-text block text-[#949188]">credential.</span></span>
|
|
174
|
+
</h2>
|
|
175
|
+
|
|
176
|
+
<!-- Social Proof -->
|
|
177
|
+
<div class="mt-8 flex flex-col items-center gap-3 fade-up">
|
|
178
|
+
<div class="flex items-center gap-3">
|
|
179
|
+
<div class="flex -space-x-2">
|
|
180
|
+
<img src="https://i.pravatar.cc/100?img=33" alt="Operator" class="w-8 h-8 rounded-full border-2 border-[#F4F3EF] shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)]">
|
|
181
|
+
<img src="https://i.pravatar.cc/100?img=47" alt="Operator" class="w-8 h-8 rounded-full border-2 border-[#F4F3EF] shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)]">
|
|
182
|
+
<img src="https://i.pravatar.cc/100?img=12" alt="Operator" class="w-8 h-8 rounded-full border-2 border-[#F4F3EF] shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)]">
|
|
183
|
+
<div class="w-8 h-8 rounded-full border-2 border-[#F4F3EF] bg-[#EAE8E1] flex items-center justify-center text-xs font-medium text-[#8E8B82] shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)]">
|
|
184
|
+
<iconify-icon icon="solar:user-linear" width="14" height="14"></iconify-icon>
|
|
185
|
+
</div>
|
|
186
|
+
</div>
|
|
187
|
+
<div class="text-sm text-[#8E8B82]">
|
|
188
|
+
Validated by <span class="font-medium text-[#1A1918]">10,000+</span> operators
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
</div>
|
|
192
|
+
|
|
193
|
+
<!-- Bottom CTA -->
|
|
194
|
+
<div class="mt-6 fade-up">
|
|
195
|
+
<button class="group relative inline-flex items-center justify-center rounded-full p-[1px] shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)] bg-gradient-to-b from-[#5c5a58] to-[#1A1918] focus:outline-none focus:ring-2 focus:ring-[#E4573D]/50 focus:ring-offset-2 focus:ring-offset-[#F4F3EF]">
|
|
196
|
+
<span class="relative inline-flex items-center gap-2 bg-[#1A1918] px-6 py-2.5 rounded-full text-sm font-medium text-white transition-all group-hover:bg-[#252422]">
|
|
197
|
+
Initialize Sequence
|
|
198
|
+
<iconify-icon icon="solar:arrow-right-linear" width="16" height="16" class="text-[#A39F96] group-hover:text-white transition-all group-hover:translate-x-0.5"></iconify-icon>
|
|
199
|
+
</span>
|
|
200
|
+
</button>
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
</main>
|
|
204
|
+
|
|
205
|
+
<script>
|
|
206
|
+
// --- 1. Canvas Animation ---
|
|
207
|
+
const canvas = document.getElementById('digital-canvas');
|
|
208
|
+
const ctx = canvas.getContext('2d');
|
|
209
|
+
|
|
210
|
+
let width, height;
|
|
211
|
+
let particles = [];
|
|
212
|
+
const particleCount = 150;
|
|
213
|
+
|
|
214
|
+
function resize() {
|
|
215
|
+
const rect = canvas.getBoundingClientRect();
|
|
216
|
+
width = rect.width;
|
|
217
|
+
height = rect.height;
|
|
218
|
+
canvas.width = width * window.devicePixelRatio;
|
|
219
|
+
canvas.height = height * window.devicePixelRatio;
|
|
220
|
+
ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
|
|
221
|
+
initParticles();
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
class Particle {
|
|
225
|
+
constructor() {
|
|
226
|
+
this.x = (Math.random() * 0.6 + 0.3) * width;
|
|
227
|
+
this.y = (Math.random() * 0.8 + 0.1) * height;
|
|
228
|
+
this.baseX = this.x;
|
|
229
|
+
this.baseY = this.y;
|
|
230
|
+
|
|
231
|
+
this.size = Math.random() > 0.9 ? Math.random() * 3 + 2 : Math.random() * 1.5 + 0.5;
|
|
232
|
+
this.speedX = Math.random() * 0.4 - 0.2;
|
|
233
|
+
this.speedY = Math.random() * 0.4 - 0.2;
|
|
234
|
+
|
|
235
|
+
const isAccent = Math.random() > 0.95;
|
|
236
|
+
if (isAccent) {
|
|
237
|
+
this.color = `rgba(228, 87, 61, ${Math.random() * 0.7 + 0.3})`;
|
|
238
|
+
} else {
|
|
239
|
+
const shade = Math.floor(Math.random() * 60 + 30);
|
|
240
|
+
this.color = `rgba(${shade}, ${shade}, ${shade}, ${Math.random() * 0.5 + 0.2})`;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
this.targetX = this.x;
|
|
244
|
+
this.targetY = this.y;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
update(mouseX, mouseY) {
|
|
248
|
+
this.baseX += this.speedX;
|
|
249
|
+
this.baseY += this.speedY;
|
|
250
|
+
|
|
251
|
+
if(this.baseX < 0 || this.baseX > width) this.speedX *= -1;
|
|
252
|
+
if(this.baseY < 0 || this.baseY > height) this.speedY *= -1;
|
|
253
|
+
|
|
254
|
+
let dx = mouseX - this.baseX;
|
|
255
|
+
let dy = mouseY - this.baseY;
|
|
256
|
+
let distance = Math.sqrt(dx * dx + dy * dy);
|
|
257
|
+
|
|
258
|
+
if (distance < 80) {
|
|
259
|
+
let forceDirectionX = dx / distance;
|
|
260
|
+
let forceDirectionY = dy / distance;
|
|
261
|
+
let force = (80 - distance) / 80;
|
|
262
|
+
this.targetX = this.baseX - forceDirectionX * force * 20;
|
|
263
|
+
this.targetY = this.baseY - forceDirectionY * force * 20;
|
|
264
|
+
} else {
|
|
265
|
+
this.targetX = this.baseX;
|
|
266
|
+
this.targetY = this.baseY;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
this.x += (this.targetX - this.x) * 0.1;
|
|
270
|
+
this.y += (this.targetY - this.y) * 0.1;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
draw() {
|
|
274
|
+
ctx.fillStyle = this.color;
|
|
275
|
+
ctx.fillRect(this.x, this.y, this.size, this.size);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
function initParticles() {
|
|
280
|
+
particles = [];
|
|
281
|
+
for (let i = 0; i < particleCount; i++) {
|
|
282
|
+
particles.push(new Particle());
|
|
283
|
+
}
|
|
284
|
+
for(let i=0; i<5; i++) {
|
|
285
|
+
let p = new Particle();
|
|
286
|
+
p.x = p.baseX = Math.random() * width;
|
|
287
|
+
p.y = p.baseY = Math.random() * height;
|
|
288
|
+
p.size = Math.random() * 4 + 3;
|
|
289
|
+
p.color = `rgba(160, 156, 145, ${Math.random() * 0.4 + 0.2})`;
|
|
290
|
+
particles.push(p);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
let mouseX = -1000;
|
|
295
|
+
let mouseY = -1000;
|
|
296
|
+
|
|
297
|
+
canvas.addEventListener('mousemove', (e) => {
|
|
298
|
+
const rect = canvas.getBoundingClientRect();
|
|
299
|
+
mouseX = e.clientX - rect.left;
|
|
300
|
+
mouseY = e.clientY - rect.top;
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
canvas.addEventListener('mouseleave', () => {
|
|
304
|
+
mouseX = -1000;
|
|
305
|
+
mouseY = -1000;
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
function animate() {
|
|
309
|
+
ctx.clearRect(0, 0, width, height);
|
|
310
|
+
|
|
311
|
+
const gradient = ctx.createRadialGradient(width*0.6, height*0.5, 0, width*0.6, height*0.5, height*0.6);
|
|
312
|
+
gradient.addColorStop(0, 'rgba(0,0,0,0.015)');
|
|
313
|
+
gradient.addColorStop(1, 'rgba(0,0,0,0)');
|
|
314
|
+
ctx.fillStyle = gradient;
|
|
315
|
+
ctx.fillRect(0,0,width,height);
|
|
316
|
+
|
|
317
|
+
particles.forEach(p => {
|
|
318
|
+
p.update(mouseX, mouseY);
|
|
319
|
+
p.draw();
|
|
320
|
+
});
|
|
321
|
+
requestAnimationFrame(animate);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
window.addEventListener('resize', resize);
|
|
325
|
+
resize();
|
|
326
|
+
animate();
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
// --- 2. 3D Tilt Effect on Badge ---
|
|
330
|
+
const container = document.getElementById('badge-container');
|
|
331
|
+
const badge = document.getElementById('badge');
|
|
332
|
+
|
|
333
|
+
container.addEventListener('mousemove', (e) => {
|
|
334
|
+
const rect = container.getBoundingClientRect();
|
|
335
|
+
const x = e.clientX - rect.left;
|
|
336
|
+
const y = e.clientY - rect.top;
|
|
337
|
+
|
|
338
|
+
const centerX = rect.width / 2;
|
|
339
|
+
const centerY = rect.height / 2;
|
|
340
|
+
|
|
341
|
+
const rotateX = ((y - centerY) / centerY) * -5;
|
|
342
|
+
const rotateY = ((x - centerX) / centerX) * 5;
|
|
343
|
+
|
|
344
|
+
badge.style.transform = `rotateX(${rotateX}deg) rotateY(${rotateY}deg) translateZ(10px)`;
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
container.addEventListener('mouseleave', () => {
|
|
348
|
+
badge.style.transform = `rotateX(0deg) rotateY(0deg) translateZ(0px)`;
|
|
349
|
+
badge.style.transition = "transform 0.5s cubic-bezier(0.25, 1, 0.5, 1)";
|
|
350
|
+
setTimeout(() => { badge.style.transition = "transform 0.1s ease-out"; }, 500);
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
// --- 3. GSAP Animations ---
|
|
355
|
+
gsap.registerPlugin(ScrollTrigger);
|
|
356
|
+
|
|
357
|
+
const tl = gsap.timeline({
|
|
358
|
+
defaults: { ease: "power4.out" },
|
|
359
|
+
scrollTrigger: {
|
|
360
|
+
trigger: "#badge-container",
|
|
361
|
+
start: "top 80%"
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
tl.fromTo(badge,
|
|
366
|
+
{ y: 50, opacity: 0, scale: 0.95 },
|
|
367
|
+
{ y: 0, opacity: 1, scale: 1, duration: 1.5, ease: "power3.out" }
|
|
368
|
+
)
|
|
369
|
+
.to(".reveal-text", {
|
|
370
|
+
y: "0%",
|
|
371
|
+
duration: 1,
|
|
372
|
+
stagger: 0.1,
|
|
373
|
+
}, "-=1")
|
|
374
|
+
.to(".fade-up", {
|
|
375
|
+
y: 0,
|
|
376
|
+
opacity: 1,
|
|
377
|
+
duration: 1,
|
|
378
|
+
stagger: 0.15,
|
|
379
|
+
ease: "power3.out"
|
|
380
|
+
}, "-=0.8");
|
|
381
|
+
|
|
382
|
+
</script>
|
|
383
|
+
</body>
|
|
384
|
+
</html>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: authsome
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3rc69
|
|
4
4
|
Summary: A portable local authentication library for AI agents and developer tools
|
|
5
5
|
Author-email: Manoj Bajaj <manojbajaj95@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -49,9 +49,9 @@ Description-Content-Type: text/markdown
|
|
|
49
49
|
\__,_/\__,_/\__/_/ /_/____/\____/_/ /_/ /_/\___/
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
**Local
|
|
52
|
+
**Local-first credential broker and vault for AI Agents**
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
An open-source credential broker that sits between your agents and the services they call. Instead of sharing credentials with every agent, log in once via OAuth2 or API keys. Authsome stores credentials securely and injects them via an HTTP proxy. You get one place to manage access, rotate keys, and see what every agent is doing.
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
@@ -61,21 +61,17 @@ https://github.com/user-attachments/assets/27f9b229-baf4-4889-be9a-378a133654dc
|
|
|
61
61
|
|
|
62
62
|
---
|
|
63
63
|
|
|
64
|
-
## Why Agents
|
|
64
|
+
## Why Agents need Authsome
|
|
65
65
|
|
|
66
|
-
Agents need API access that survives
|
|
66
|
+
Agents run beyond interactive sessions. They live in CI, over SSH, in cron jobs, in background workers, and in parallel pipelines. They need API access that survives without a human in the loop.
|
|
67
67
|
|
|
68
|
-
-
|
|
69
|
-
- tokens expire, rotate, and need refresh
|
|
70
|
-
- tool access must work in scripts, cron, CI, SSH, background workers, and parallel pipelines
|
|
68
|
+
Hardcoded environment tokens leak or go stale, and building auth flow logic, token storage, refresh handling, and per-provider config into every project rebuilds the same plumbing every time.
|
|
71
69
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
Authsome is the local credential layer agents can call at runtime.
|
|
70
|
+
Authsome is the local credential layer agents call at runtime.
|
|
75
71
|
|
|
76
72
|
- **No credential sprawl.** One encrypted store — every provider, every agent, one place.
|
|
77
|
-
- **No SaaS, no privacy trade-off.** Credentials never leave your machine.
|
|
78
|
-
- **No browser required at runtime.** Setup can use browser PKCE, device code, or a browser bridge for secure API key entry. After that, agents run headlessly
|
|
73
|
+
- **No SaaS, no privacy trade-off.** Credentials never leave your machine. Eliminates credential exfiltration risks as agents never see them.
|
|
74
|
+
- **No browser required at runtime.** Setup can use browser PKCE, device code, or a browser bridge for secure API key entry. After that, agents run headlessly.
|
|
79
75
|
|
|
80
76
|
---
|
|
81
77
|
|
|
@@ -83,14 +79,11 @@ Authsome is the local credential layer agents can call at runtime.
|
|
|
83
79
|
|
|
84
80
|
The CLI is the agent's interface: setup once, then inject fresh credentials whenever a tool runs.
|
|
85
81
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
│ fresh token / API key │ encrypted
|
|
92
|
-
└──────────────────────────────────────┘
|
|
93
|
-
```
|
|
82
|
+
<picture>
|
|
83
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/authsome-how-it-works-dark.svg">
|
|
84
|
+
<source media="(prefers-color-scheme: light)" srcset="assets/authsome-how-it-works-light.svg">
|
|
85
|
+
<img alt="Authsome Architecture" src="assets/authsome-how-it-works-light.svg" width="100%">
|
|
86
|
+
</picture>
|
|
94
87
|
|
|
95
88
|
Authenticate once:
|
|
96
89
|
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
\__,_/\__,_/\__/_/ /_/____/\____/_/ /_/ /_/\___/
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
**Local
|
|
18
|
+
**Local-first credential broker and vault for AI Agents**
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
An open-source credential broker that sits between your agents and the services they call. Instead of sharing credentials with every agent, log in once via OAuth2 or API keys. Authsome stores credentials securely and injects them via an HTTP proxy. You get one place to manage access, rotate keys, and see what every agent is doing.
|
|
21
21
|
|
|
22
22
|
---
|
|
23
23
|
|
|
@@ -27,21 +27,17 @@ https://github.com/user-attachments/assets/27f9b229-baf4-4889-be9a-378a133654dc
|
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
## Why Agents
|
|
30
|
+
## Why Agents need Authsome
|
|
31
31
|
|
|
32
|
-
Agents need API access that survives
|
|
32
|
+
Agents run beyond interactive sessions. They live in CI, over SSH, in cron jobs, in background workers, and in parallel pipelines. They need API access that survives without a human in the loop.
|
|
33
33
|
|
|
34
|
-
-
|
|
35
|
-
- tokens expire, rotate, and need refresh
|
|
36
|
-
- tool access must work in scripts, cron, CI, SSH, background workers, and parallel pipelines
|
|
34
|
+
Hardcoded environment tokens leak or go stale, and building auth flow logic, token storage, refresh handling, and per-provider config into every project rebuilds the same plumbing every time.
|
|
37
35
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
Authsome is the local credential layer agents can call at runtime.
|
|
36
|
+
Authsome is the local credential layer agents call at runtime.
|
|
41
37
|
|
|
42
38
|
- **No credential sprawl.** One encrypted store — every provider, every agent, one place.
|
|
43
|
-
- **No SaaS, no privacy trade-off.** Credentials never leave your machine.
|
|
44
|
-
- **No browser required at runtime.** Setup can use browser PKCE, device code, or a browser bridge for secure API key entry. After that, agents run headlessly
|
|
39
|
+
- **No SaaS, no privacy trade-off.** Credentials never leave your machine. Eliminates credential exfiltration risks as agents never see them.
|
|
40
|
+
- **No browser required at runtime.** Setup can use browser PKCE, device code, or a browser bridge for secure API key entry. After that, agents run headlessly.
|
|
45
41
|
|
|
46
42
|
---
|
|
47
43
|
|
|
@@ -49,14 +45,11 @@ Authsome is the local credential layer agents can call at runtime.
|
|
|
49
45
|
|
|
50
46
|
The CLI is the agent's interface: setup once, then inject fresh credentials whenever a tool runs.
|
|
51
47
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
│ fresh token / API key │ encrypted
|
|
58
|
-
└──────────────────────────────────────┘
|
|
59
|
-
```
|
|
48
|
+
<picture>
|
|
49
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/authsome-how-it-works-dark.svg">
|
|
50
|
+
<source media="(prefers-color-scheme: light)" srcset="assets/authsome-how-it-works-light.svg">
|
|
51
|
+
<img alt="Authsome Architecture" src="assets/authsome-how-it-works-light.svg" width="100%">
|
|
52
|
+
</picture>
|
|
60
53
|
|
|
61
54
|
Authenticate once:
|
|
62
55
|
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1160 520" fill="none">
|
|
2
|
+
<style>
|
|
3
|
+
text { font-family: Inter, system-ui, sans-serif; }
|
|
4
|
+
.mono { font-family: "JetBrains Mono", "Fira Mono", ui-monospace, monospace; }
|
|
5
|
+
.label { font-size: 10px; fill: #8E8B82; letter-spacing: 2px; font-weight: 500; }
|
|
6
|
+
.card { fill: #FCFBF9; stroke: #E6E4DD; stroke-width: 1; }
|
|
7
|
+
.name { fill: #1A1918; font-size: 13px; font-weight: 500; }
|
|
8
|
+
.sub { fill: #8E8B82; font-size: 11px; }
|
|
9
|
+
</style>
|
|
10
|
+
|
|
11
|
+
<!-- Background -->
|
|
12
|
+
<rect width="1160" height="520" fill="#F4F3EF"/>
|
|
13
|
+
|
|
14
|
+
<!-- Spatial guide lines -->
|
|
15
|
+
<line x1="0" y1="130" x2="1160" y2="130" stroke="#EAE8E1" stroke-width="1"/>
|
|
16
|
+
<line x1="0" y1="390" x2="1160" y2="390" stroke="#EAE8E1" stroke-width="1"/>
|
|
17
|
+
<line x1="290" y1="0" x2="290" y2="520" stroke="#EAE8E1" stroke-width="1"/>
|
|
18
|
+
<line x1="870" y1="0" x2="870" y2="520" stroke="#EAE8E1" stroke-width="1"/>
|
|
19
|
+
|
|
20
|
+
<!-- Inset frame -->
|
|
21
|
+
<rect x="16" y="16" width="1128" height="488" rx="20" fill="none" stroke="#E2DED6" stroke-width="1"/>
|
|
22
|
+
|
|
23
|
+
<!-- Frame corner brackets -->
|
|
24
|
+
<path d="M36,16 Q16,16 16,36" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
|
|
25
|
+
<path d="M1124,16 Q1144,16 1144,36" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
|
|
26
|
+
<path d="M16,484 Q16,504 36,504" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
|
|
27
|
+
<path d="M1144,484 Q1144,504 1124,504" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
|
|
28
|
+
|
|
29
|
+
<!-- AI AGENTS -->
|
|
30
|
+
<text x="580" y="72" text-anchor="middle" class="mono" fill="#34D399" font-size="10" font-weight="600" letter-spacing="2px">AI AGENTS</text>
|
|
31
|
+
|
|
32
|
+
<rect x="52" y="90" width="192" height="52" rx="4" class="card"/>
|
|
33
|
+
<text x="148" y="122" text-anchor="middle" class="name">Claude Code</text>
|
|
34
|
+
<rect x="268" y="90" width="192" height="52" rx="4" class="card"/>
|
|
35
|
+
<text x="364" y="122" text-anchor="middle" class="name">Codex</text>
|
|
36
|
+
<rect x="484" y="90" width="192" height="52" rx="4" class="card"/>
|
|
37
|
+
<text x="580" y="122" text-anchor="middle" class="name">OpenClaw</text>
|
|
38
|
+
<rect x="700" y="90" width="192" height="52" rx="4" class="card"/>
|
|
39
|
+
<text x="796" y="122" text-anchor="middle" class="name">Hermes</text>
|
|
40
|
+
<rect x="916" y="90" width="192" height="52" rx="4" class="card"/>
|
|
41
|
+
<text x="1012" y="122" text-anchor="middle" class="name">Any Agent</text>
|
|
42
|
+
|
|
43
|
+
<!-- Agents → Authsome -->
|
|
44
|
+
<g stroke="#8E8B82" stroke-width="1" marker-end="url(#tip)">
|
|
45
|
+
<line x1="148" y1="142" x2="148" y2="178"/>
|
|
46
|
+
<line x1="364" y1="142" x2="364" y2="178"/>
|
|
47
|
+
<line x1="580" y1="142" x2="580" y2="178"/>
|
|
48
|
+
<line x1="796" y1="142" x2="796" y2="178"/>
|
|
49
|
+
<line x1="1012" y1="142" x2="1012" y2="178"/>
|
|
50
|
+
</g>
|
|
51
|
+
|
|
52
|
+
<!-- Authsome zone -->
|
|
53
|
+
<rect x="34" y="178" width="1092" height="164" rx="12" fill="#ECEBE5" stroke="#E6E4DD" stroke-width="1"/>
|
|
54
|
+
|
|
55
|
+
<!-- Zone corner brackets -->
|
|
56
|
+
<path d="M46,178 Q34,178 34,190" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
|
|
57
|
+
<path d="M1114,178 Q1126,178 1126,190" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
|
|
58
|
+
<path d="M34,330 Q34,342 46,342" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
|
|
59
|
+
<path d="M1126,330 Q1126,342 1114,342" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
|
|
60
|
+
|
|
61
|
+
<!-- AUTHSOME label -->
|
|
62
|
+
<text x="580" y="204" text-anchor="middle" class="mono" fill="#34D399" font-size="10" font-weight="600" letter-spacing="2px">AUTHSOME</text>
|
|
63
|
+
|
|
64
|
+
<!-- CLI -->
|
|
65
|
+
<rect x="72" y="228" width="300" height="66" rx="4" class="card"/>
|
|
66
|
+
<text x="222" y="256" text-anchor="middle" class="name">CLI</text>
|
|
67
|
+
<text x="222" y="277" text-anchor="middle" class="sub">Login, export, and run commands</text>
|
|
68
|
+
|
|
69
|
+
<!-- Local Auth Proxy — highlighted with coral border -->
|
|
70
|
+
<rect x="422" y="216" width="316" height="90" rx="8" class="card"/>
|
|
71
|
+
<!-- Proxy inner corner brackets -->
|
|
72
|
+
<path d="M430,216 Q422,216 422,224" stroke="#8E8B82" stroke-width="0.8" fill="none" stroke-linecap="round"/>
|
|
73
|
+
<path d="M730,216 Q738,216 738,224" stroke="#8E8B82" stroke-width="0.8" fill="none" stroke-linecap="round"/>
|
|
74
|
+
<path d="M422,298 Q422,306 430,306" stroke="#8E8B82" stroke-width="0.8" fill="none" stroke-linecap="round"/>
|
|
75
|
+
<path d="M730,306 Q738,306 738,298" stroke="#8E8B82" stroke-width="0.8" fill="none" stroke-linecap="round"/>
|
|
76
|
+
<text x="580" y="254" text-anchor="middle" fill="#1A1918" font-size="15" font-weight="500">Local Auth Proxy</text>
|
|
77
|
+
<text x="580" y="276" text-anchor="middle" class="sub">Injects fresh credentials at request time</text>
|
|
78
|
+
<text x="580" y="294" text-anchor="middle" class="mono" fill="#34D399" font-size="9" letter-spacing="1.2px">CONTROLLED HANDOFF</text>
|
|
79
|
+
|
|
80
|
+
<!-- Encrypted Vault -->
|
|
81
|
+
<rect x="788" y="228" width="300" height="66" rx="4" class="card"/>
|
|
82
|
+
<text x="938" y="256" text-anchor="middle" class="name">Encrypted Vault</text>
|
|
83
|
+
<text x="938" y="277" text-anchor="middle" class="sub">Local storage and token refresh</text>
|
|
84
|
+
|
|
85
|
+
<!-- Authsome → Services -->
|
|
86
|
+
<g stroke="#8E8B82" stroke-width="1" marker-end="url(#tip)">
|
|
87
|
+
<line x1="148" y1="342" x2="148" y2="414"/>
|
|
88
|
+
<line x1="364" y1="342" x2="364" y2="414"/>
|
|
89
|
+
<line x1="580" y1="342" x2="580" y2="414"/>
|
|
90
|
+
<line x1="796" y1="342" x2="796" y2="414"/>
|
|
91
|
+
<line x1="1012" y1="342" x2="1012" y2="414"/>
|
|
92
|
+
</g>
|
|
93
|
+
|
|
94
|
+
<!-- EXTERNAL SERVICES -->
|
|
95
|
+
<text x="580" y="396" text-anchor="middle" class="mono" fill="#34D399" font-size="10" font-weight="600" letter-spacing="2px">EXTERNAL SERVICES</text>
|
|
96
|
+
|
|
97
|
+
<rect x="52" y="414" width="192" height="52" rx="4" class="card"/>
|
|
98
|
+
<text x="148" y="446" text-anchor="middle" class="name">Stripe</text>
|
|
99
|
+
<rect x="268" y="414" width="192" height="52" rx="4" class="card"/>
|
|
100
|
+
<text x="364" y="446" text-anchor="middle" class="name">GitHub</text>
|
|
101
|
+
<rect x="484" y="414" width="192" height="52" rx="4" class="card"/>
|
|
102
|
+
<text x="580" y="446" text-anchor="middle" class="name">OpenAI</text>
|
|
103
|
+
<rect x="700" y="414" width="192" height="52" rx="4" class="card"/>
|
|
104
|
+
<text x="796" y="446" text-anchor="middle" class="name">Gmail</text>
|
|
105
|
+
<rect x="916" y="414" width="192" height="52" rx="4" class="card"/>
|
|
106
|
+
<text x="1012" y="446" text-anchor="middle" class="name">Any App</text>
|
|
107
|
+
|
|
108
|
+
<defs>
|
|
109
|
+
<marker id="tip" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="6" markerHeight="6" orient="auto">
|
|
110
|
+
<path d="M1 1 L7 4 L1 7" stroke="#8E8B82" stroke-width="1.2" fill="none"/>
|
|
111
|
+
</marker>
|
|
112
|
+
</defs>
|
|
113
|
+
</svg>
|