Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Publish selected Obsidian notes as formatted documents in Basecamp Docs & Files.

Built by [mkdev](https://mkdev.me). MIT licensed. Uses the [official Basecamp TypeScript SDK](https://github.com/basecamp/basecamp-sdk/tree/main/typescript).

**Status:** installable development release. Desktop loading, settings and previews were checked in Obsidian 1.13.7. Automated checks cover the sync engine, authentication, native HTTP adapter and bundled SDK under mobile restrictions. The shared mkdev integration is registered and deployed; its service URL is filled in automatically. Live Basecamp and physical iOS acceptance checks remain in [the release checklist](docs/releasing.md).
**Status:** installable development release. Desktop login, live Basecamp sync and folder mapping were verified in Obsidian 1.13.7 on macOS. The maintainer confirmed iOS syncing works on 2026-09-08 after the initial sign-in on that device. The shared mkdev integration is registered and deployed; its service URL is filled in automatically. See [the release checklist](docs/releasing.md) for verification details and remaining checks.

## What it does

Expand Down Expand Up @@ -55,7 +55,7 @@ Open **Settings → Basecamp Sync** and choose a login method:
| My own integration | The user or their organization | Enter the client ID, select the client secret in Obsidian Secret storage, and set the registered redirect URI. |
| Existing access token | No new registration if you already have a valid bearer token | Advanced option. Replace the token yourself when it expires. |

See [authentication and integration setup](docs/authentication.md) for the complete instructions, including a shared service that can also be self-hosted. Connect separately on each device. Tokens and private client secrets are stored in Obsidian's device-local Secret storage, outside plugin `data.json` and note properties. This storage is shared with other plugins in the vault; it is not a separate password-manager security boundary.
See [authentication and integration setup](docs/authentication.md) for the complete instructions, including a shared service that can also be self-hosted. Connect once on each device, even if your vault and plugin settings have already synced there. The plugin refreshes OAuth tokens automatically after that initial sign-in. Tokens and private client secrets are stored in Obsidian's device-local Secret storage, outside plugin `data.json` and note properties. This storage is shared with other plugins in the vault; it is not a separate password-manager security boundary.

## Choose what to sync

Expand Down
4 changes: 3 additions & 1 deletion docs/authentication.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ The official [SDK authentication guide](https://github.com/basecamp/basecamp-sdk

Basecamp's API and SDK documentation currently disagree about personal access tokens. The plugin accepts an existing bearer token if you already have one, but does not claim a universally available personal-token creation workflow.

Ordinary users do **not** need their own OAuth app. The mkdev integration was registered and deployed on 2026-09-07 at `https://basecamp-obsidian-sync.fodoj.com`. Its HTTPS health check and login-start routing pass. The plugin fills in this URL automatically, including when upgrading an installation with an empty saved URL. Custom service URLs are preserved. Real desktop and iOS login and renewal acceptance checks remain pending.
Ordinary users do **not** need their own OAuth app. The mkdev integration was registered and deployed on 2026-09-07 at `https://basecamp-obsidian-sync.fodoj.com`. Its HTTPS health check and login-start routing pass. The plugin fills in this URL automatically, including when upgrading an installation with an empty saved URL. Custom service URLs are preserved. Live desktop login was verified, and the maintainer confirmed iOS syncing works after its initial sign-in on 2026-09-08. Live token-renewal checks remain in [the release checklist](releasing.md).

## Maintainer: prepare the shared mkdev integration

Expand Down Expand Up @@ -36,6 +36,8 @@ Choose **Shared mkdev integration** and click **Connect to Basecamp**. The **Log

If the browser does not open Obsidian, copy the full callback/deep-link URL into **Complete login manually**. Pending logins expire after ten minutes; restart the connection if necessary. The callback must complete in the same vault and on the same device that started it.

Connect once on each device: vault sync carries your notes and plugin settings, but login credentials stay in that device's Secret storage. An initial sign-in on iOS after connecting on desktop is expected. The plugin refreshes OAuth tokens automatically; routine syncing should not require repeated sign-ins.

## User: use your own integration

1. Register your own integration at [Launchpad integrations](https://launchpad.37signals.com/integrations).
Expand Down
6 changes: 5 additions & 1 deletion docs/releasing.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ Automated tests run without credentials and do not write to a real Basecamp acco

Desktop smoke check on 2026-09-07: the built plugin loaded successfully in Obsidian 1.13.7 on macOS using an isolated two-note test vault. Its native settings, registered commands, selected-note preview and formatted-content preview were exercised in the real app. Properties and private scratch comments were absent from the rendered preview. This check did not connect to or write to Basecamp.

The mkdev OAuth app and hosted login service were provisioned on 2026-09-07. HTTPS `/health` returns 200, login start points to the registered app and exact callback, and malformed requests are rejected. Terraform reports no changes after deployment. These checks do not authorize a Basecamp account or prove token renewal. Physical iOS/Android behavior, real Basecamp HTML normalization and end-to-end live publication must be checked before a public stable release. Do not claim those checks passed merely because the bundle compiles or mocks pass.
Live desktop checks on 2026-09-08 in Obsidian 1.13.7 on macOS verified shared-integration login, document creation and source-folder mapping into existing Basecamp folders. Version 0.1.5 then updated the same document to remove its old footer, preserving its document ID, parent folder and authored text; the run reported one update and no errors.

On 2026-09-08, the maintainer reported that syncing works on physical iOS and confirmed authentication was needed only for the first connection on that device. This is expected because credentials are device-local. Exact iOS and Obsidian versions and individual test scenarios were not recorded, so this confirms basic iOS use rather than every acceptance case below.

The mkdev OAuth app and hosted login service were provisioned on 2026-09-07. HTTPS `/health` returned 200, login start pointed to the registered app and exact callback, and malformed requests were rejected. Terraform reported no changes after deployment. Live expired-token renewal, Android, the full formatting and attachment matrix, recovery scenarios and cross-device continuation of the same document remain to be checked. Do not count automated coverage or basic device checks as evidence that all of those scenarios passed.

## Private BRAT releases

Expand Down
Loading