bkper 4.24.2 → 4.24.3
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.
- package/lib/agent/extensions/builtins.d.ts.map +1 -1
- package/lib/agent/extensions/builtins.js +2 -2
- package/lib/agent/extensions/builtins.js.map +1 -1
- package/lib/agent/extensions/handoff.d.ts +2 -13
- package/lib/agent/extensions/handoff.d.ts.map +1 -1
- package/lib/agent/extensions/handoff.js +37 -17
- package/lib/agent/extensions/handoff.js.map +1 -1
- package/lib/agent/interactive/interactive-mode.d.ts.map +1 -1
- package/lib/agent/interactive/interactive-mode.js +1 -10
- package/lib/agent/interactive/interactive-mode.js.map +1 -1
- package/lib/commands/apps/deploy.d.ts +3 -1
- package/lib/commands/apps/deploy.d.ts.map +1 -1
- package/lib/commands/apps/deploy.js +29 -4
- package/lib/commands/apps/deploy.js.map +1 -1
- package/lib/commands/apps/git/clone.d.ts +23 -0
- package/lib/commands/apps/git/clone.d.ts.map +1 -0
- package/lib/commands/apps/git/clone.js +161 -0
- package/lib/commands/apps/git/clone.js.map +1 -0
- package/lib/commands/apps/git/credentials.d.ts +35 -0
- package/lib/commands/apps/git/credentials.d.ts.map +1 -0
- package/lib/commands/apps/git/credentials.js +196 -0
- package/lib/commands/apps/git/credentials.js.map +1 -0
- package/lib/commands/apps/git/index.d.ts +12 -0
- package/lib/commands/apps/git/index.d.ts.map +1 -0
- package/lib/commands/apps/git/index.js +12 -0
- package/lib/commands/apps/git/index.js.map +1 -0
- package/lib/commands/apps/git/inspect.d.ts +26 -0
- package/lib/commands/apps/git/inspect.d.ts.map +1 -0
- package/lib/commands/apps/git/inspect.js +207 -0
- package/lib/commands/apps/git/inspect.js.map +1 -0
- package/lib/commands/apps/git/markers.d.ts +16 -0
- package/lib/commands/apps/git/markers.d.ts.map +1 -0
- package/lib/commands/apps/git/markers.js +125 -0
- package/lib/commands/apps/git/markers.js.map +1 -0
- package/lib/commands/apps/git/mode.d.ts +25 -0
- package/lib/commands/apps/git/mode.d.ts.map +1 -0
- package/lib/commands/apps/git/mode.js +106 -0
- package/lib/commands/apps/git/mode.js.map +1 -0
- package/lib/commands/apps/git/platform-source.d.ts +18 -0
- package/lib/commands/apps/git/platform-source.d.ts.map +1 -0
- package/lib/commands/apps/git/platform-source.js +151 -0
- package/lib/commands/apps/git/platform-source.js.map +1 -0
- package/lib/commands/apps/git/preflight.d.ts +21 -0
- package/lib/commands/apps/git/preflight.d.ts.map +1 -0
- package/lib/commands/apps/git/preflight.js +130 -0
- package/lib/commands/apps/git/preflight.js.map +1 -0
- package/lib/commands/apps/git/push.d.ts +22 -0
- package/lib/commands/apps/git/push.d.ts.map +1 -0
- package/lib/commands/apps/git/push.js +107 -0
- package/lib/commands/apps/git/push.js.map +1 -0
- package/lib/commands/apps/git/remote.d.ts +7 -0
- package/lib/commands/apps/git/remote.d.ts.map +1 -0
- package/lib/commands/apps/git/remote.js +48 -0
- package/lib/commands/apps/git/remote.js.map +1 -0
- package/lib/commands/apps/git/run-git.d.ts +17 -0
- package/lib/commands/apps/git/run-git.d.ts.map +1 -0
- package/lib/commands/apps/git/run-git.js +61 -0
- package/lib/commands/apps/git/run-git.js.map +1 -0
- package/lib/commands/apps/git/types.d.ts +95 -0
- package/lib/commands/apps/git/types.d.ts.map +1 -0
- package/lib/commands/apps/git/types.js +17 -0
- package/lib/commands/apps/git/types.js.map +1 -0
- package/lib/commands/apps/index.d.ts +2 -0
- package/lib/commands/apps/index.d.ts.map +1 -1
- package/lib/commands/apps/index.js +3 -0
- package/lib/commands/apps/index.js.map +1 -1
- package/lib/commands/apps/init.d.ts.map +1 -1
- package/lib/commands/apps/init.js +19 -3
- package/lib/commands/apps/init.js.map +1 -1
- package/lib/commands/apps/register.d.ts.map +1 -1
- package/lib/commands/apps/register.js +23 -4
- package/lib/commands/apps/register.js.map +1 -1
- package/lib/commands/apps/source-workflow.d.ts +32 -0
- package/lib/commands/apps/source-workflow.d.ts.map +1 -0
- package/lib/commands/apps/source-workflow.js +170 -0
- package/lib/commands/apps/source-workflow.js.map +1 -0
- package/lib/commands/apps/sync.d.ts.map +1 -1
- package/lib/commands/apps/sync.js +13 -8
- package/lib/commands/apps/sync.js.map +1 -1
- package/lib/docs/cli/app-management.md +94 -6
- package/lib/docs/index.md +1 -1
- package/package.json +1 -1
|
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { BkperError } from 'bkper-js';
|
|
11
11
|
import { getBkperInstance } from '../../bkper-factory.js';
|
|
12
12
|
import { createConfiguredApp } from './config.js';
|
|
13
|
+
import { syncManagedAppSource } from './source-workflow.js';
|
|
13
14
|
/**
|
|
14
15
|
* Creates a new app from the configuration in the current directory.
|
|
15
16
|
*
|
|
@@ -63,14 +64,18 @@ export function syncApp() {
|
|
|
63
64
|
throw err;
|
|
64
65
|
}
|
|
65
66
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
67
|
+
return syncManagedAppSource({
|
|
68
|
+
appId,
|
|
69
|
+
coreAppExists: exists,
|
|
70
|
+
syncCore: (action) => __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
if (action === 'updated') {
|
|
72
|
+
yield app.update();
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
yield app.create();
|
|
76
|
+
}
|
|
77
|
+
}),
|
|
78
|
+
});
|
|
74
79
|
});
|
|
75
80
|
}
|
|
76
81
|
//# sourceMappingURL=sync.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/apps/sync.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAO,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/apps/sync.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAO,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAC,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAgB,SAAS;;QAC3B,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,UAAU,CAAC;IACtB,CAAC;CAAA;AAED;;;;GAIG;AACH,MAAM,UAAgB,SAAS;;QAC3B,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,UAAU,CAAC;IACtB,CAAC;CAAA;AAED;;;;GAIG;AACH,MAAM,UAAgB,OAAO;;QACzB,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAE1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACxD,CAAC;QAED,sBAAsB;QACtB,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC;YACD,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,GAAG,IAAI,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAChD,iCAAiC;gBACjC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gBAC/C,MAAM,GAAG,KAAK,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACJ,MAAM,GAAG,CAAC;YACd,CAAC;QACL,CAAC;QAED,OAAO,oBAAoB,CAAC;YACxB,KAAK;YACL,aAAa,EAAE,MAAM;YACrB,QAAQ,EAAE,CAAM,MAAM,EAAC,EAAE;gBACrB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACvB,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACJ,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;gBACvB,CAAC;YACL,CAAC,CAAA;SACJ,CAAC,CAAC;IACP,CAAC;CAAA"}
|
|
@@ -7,6 +7,21 @@ Build, deploy, and manage Bkper apps using the `bkper` CLI.
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## Source control modes
|
|
11
|
+
|
|
12
|
+
Bkper selects source mode without changing the local-build deployment model:
|
|
13
|
+
|
|
14
|
+
- **Managed source:** the first `bkper app sync` activates private Bkper-managed Git only when that same sync creates the Core App, `bkper.yaml` is at the root of a standalone Git repository, the current clean committed branch is `main`, and no Git remote exists. Bkper configures the managed repository as `origin` and pushes the committed source.
|
|
15
|
+
- **External source:** an App keeps direct sync/deploy behavior when it has an external Git remote, is nested in a monorepo, is not rooted at `bkper.yaml`, or already existed in Core without a pending activation marker. Existing no-remote Apps are not migrated automatically. The CLI never changes an existing external remote.
|
|
16
|
+
|
|
17
|
+
To opt out for a new standalone App, add a GitHub, GitLab, or other provider remote before its first sync. Managed mode is sticky after activation; adding another remote later does not change it, and Artifacts remains `origin`.
|
|
18
|
+
|
|
19
|
+
Source and deployment remain separate. `git push` stores source only and **never deploys**. `bkper app sync` pushes managed source before syncing local metadata. `bkper app deploy` pushes managed source, verifies that the exact commit exists in the linked repository, and then uploads the existing local `dist/server` and optional `dist/client` output. Builds remain local and explicit; Bkper does not claim reproducible remote CI or prove that the local bundle was built from the declared commit. Source linkage is best-effort provenance for already-authorized developers.
|
|
20
|
+
|
|
21
|
+
CLI-managed pushes are clean-tree and fast-forward-only. The CLI never commits, merges, rebases, force-pushes, resets, or discards files. Authorized developers may use ordinary Git commands, including an intentional force-push, but a push still never deploys.
|
|
22
|
+
|
|
23
|
+
Configured App developers, including matches such as `*@example.com`, can read and modify private managed source under the existing owner/developer policy. App users and Book collaborators do not receive source access unless they also satisfy that developer policy. Repository credentials are exact URL/path-scoped, noninteractive, and valid for five minutes; they are never persisted by Bkper.
|
|
24
|
+
|
|
10
25
|
## Verification Workflow
|
|
11
26
|
|
|
12
27
|
When scaffolding, developing, or deploying an app, verify each step before proceeding. This prevents broken deployments and silent failures.
|
|
@@ -18,13 +33,14 @@ bkper app init my-app
|
|
|
18
33
|
cd my-app
|
|
19
34
|
```
|
|
20
35
|
|
|
21
|
-
`bkper app init <name>` creates and scaffolds `./<name>` using the same value as the app id. Run `bkper app init` with no name inside an existing empty or VCS-only directory to use the current folder name as the app id.
|
|
36
|
+
`bkper app init <name>` creates and scaffolds `./<name>` using the same value as the app id. Run `bkper app init` with no name inside an existing empty or VCS-only directory to use the current folder name as the app id. Init initializes Git on `main` when needed, but does not create commits.
|
|
22
37
|
|
|
23
38
|
Verify:
|
|
24
39
|
|
|
25
40
|
- `client/` and `server/` exist
|
|
26
41
|
- `bkper.yaml` has `id`, `name`, `description`, and `developers`
|
|
27
42
|
- `package.json` scripts include `dev` and `build`
|
|
43
|
+
- `.git` exists on branch `main` with no automatic commit
|
|
28
44
|
|
|
29
45
|
### 2. Develop
|
|
30
46
|
|
|
@@ -53,14 +69,24 @@ Verify:
|
|
|
53
69
|
|
|
54
70
|
### 4. Sync & Deploy
|
|
55
71
|
|
|
72
|
+
Commit source before the first eligible managed sync:
|
|
73
|
+
|
|
56
74
|
```bash
|
|
57
|
-
|
|
75
|
+
git add .
|
|
76
|
+
git commit -m "Initial app"
|
|
77
|
+
bkper app sync
|
|
78
|
+
npm run build
|
|
79
|
+
bkper app deploy
|
|
58
80
|
```
|
|
59
81
|
|
|
82
|
+
For a managed App, sync and deploy safely push the current committed branch. For an external App, both commands preserve direct local metadata and bundle upload behavior without changing remotes.
|
|
83
|
+
|
|
60
84
|
Verify:
|
|
61
85
|
|
|
62
86
|
- `bkper app status` shows the deployed version
|
|
87
|
+
- managed status shows the declared branch and exact verified SHA
|
|
63
88
|
- URLs in `bkper.yaml` match the deployed domain (`https://{appId}.bkper.app`)
|
|
89
|
+
- an ordinary `git push` did not deploy anything
|
|
64
90
|
|
|
65
91
|
#### Preview testing with menu and events
|
|
66
92
|
|
|
@@ -139,6 +165,66 @@ bkper app status
|
|
|
139
165
|
|
|
140
166
|
---
|
|
141
167
|
|
|
168
|
+
## Clone managed source
|
|
169
|
+
|
|
170
|
+
Clone an existing managed App explicitly:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
bkper app clone <appId> [path]
|
|
174
|
+
cd <path-or-appId>
|
|
175
|
+
bun install
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Clone authenticates with Bkper, uses a temporary sibling directory, validates the cloned App ID, and atomically installs the destination. It never installs dependencies or executes repository lifecycle scripts. External-source Apps must be cloned from their configured provider instead.
|
|
179
|
+
|
|
180
|
+
If Git authentication fails:
|
|
181
|
+
|
|
182
|
+
1. Run `bkper auth login` when the Bkper session is missing or expired.
|
|
183
|
+
2. Retry the Git operation; a five-minute repository credential is minted automatically.
|
|
184
|
+
3. If the managed `origin` is missing or incorrect, inspect `git remote -v` and use a fresh `bkper app clone <appId>` as the safe reference. Never replace an unrelated external remote automatically.
|
|
185
|
+
4. Request App owner/developer access when Platform denies source access. Domain-pattern developers have the same private source read/write capability.
|
|
186
|
+
|
|
187
|
+
The helper command is intentionally `bkper app git-credential <appId> [operation]`. It is internal Git plumbing, not a root `git` command or an `app git` group.
|
|
188
|
+
|
|
189
|
+
## Managed Git preflight recovery
|
|
190
|
+
|
|
191
|
+
Managed sync and deploy require `bkper.yaml` at the Git root, an attached branch, committed `HEAD`, and a clean tree. Ignored build output such as `dist/` is allowed.
|
|
192
|
+
|
|
193
|
+
| Failure | Safe recovery |
|
|
194
|
+
| --- | --- |
|
|
195
|
+
| No Git repository | For a new standalone App, run `git init -b main`, review files, commit, and retry. Existing Apps are not migrated merely because they lack a remote. |
|
|
196
|
+
| `bkper.yaml` below Git root | Keep the monorepo/external workflow; managed monorepos are not supported. |
|
|
197
|
+
| No commits | Review, then run `git add .` and `git commit -m "Initial app"`. |
|
|
198
|
+
| Detached `HEAD` | Attach a branch with `git switch -c <branch>`; use `main` for first activation. |
|
|
199
|
+
| First activation is not on `main` | Switch to the existing `main` branch. The CLI does not rename or rewrite branches. |
|
|
200
|
+
| Staged changes | Inspect `git diff --cached`; commit them or intentionally unstage them before retrying. |
|
|
201
|
+
| Modified tracked files | Inspect `git diff`; commit or intentionally restore them before retrying. |
|
|
202
|
+
| Non-ignored untracked files | Inspect `git status`; commit, ignore, or intentionally remove them before retrying. |
|
|
203
|
+
| Missing or incorrect managed `origin` | Inspect `git remote -v`; compare with a fresh managed clone. Do not overwrite an external remote. |
|
|
204
|
+
| Authentication or expired credential | Run `bkper auth login` if needed, then retry the Git operation for a new five-minute token. |
|
|
205
|
+
| Remote branch ahead or divergent | Run `git fetch origin <branch>` and inspect `git log --oneline --left-right HEAD...origin/<branch>`; merge or rebase by your own choice, then push and retry. The CLI never force-resolves divergence. |
|
|
206
|
+
| App ID or repository mismatch | Stop and use the clone/config belonging to the requested App; do not rewrite repository identity. |
|
|
207
|
+
| Managed record temporarily missing | Retry sync/deploy. A managed marker never silently downgrades to external mode after a transient KV miss. |
|
|
208
|
+
| Exact commit missing | Ensure the current clean commit was pushed to the registered managed `origin`, then retry. |
|
|
209
|
+
|
|
210
|
+
## Roll back a managed deployment
|
|
211
|
+
|
|
212
|
+
There is no hidden rollback ref, retained build archive, or automatic rollback API. Create an ordinary attached rollback branch at the selected committed source, build locally, and deploy explicitly:
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
git switch -c rollback/<name> <older-commit>
|
|
216
|
+
bun run build
|
|
217
|
+
bkper app deploy --preview
|
|
218
|
+
# verify, then optionally deploy production
|
|
219
|
+
bkper app deploy
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
The rollback branch is pushed normally. Preview remains optional; production does not require promotion from preview.
|
|
223
|
+
|
|
224
|
+
`bkper app undeploy` removes only the selected runtime and optional runtime data. It never deletes managed source.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
142
228
|
## Install Apps on Books
|
|
143
229
|
|
|
144
230
|
```bash
|
|
@@ -425,11 +511,13 @@ Inside the interactive agent:
|
|
|
425
511
|
|
|
426
512
|
### App Lifecycle
|
|
427
513
|
|
|
428
|
-
- `app init [name]` - Scaffold a new app from the template. With `name`, creates `./<name>` and uses it as the app id. Without `name`, initializes the current directory and derives the app id from the folder name.
|
|
514
|
+
- `app init [name]` - Scaffold a new app from the template. With `name`, creates `./<name>` and uses it as the app id. Without `name`, initializes the current directory and derives the app id from the folder name. Initializes Git on `main` when the target is not already a repository, without staging or committing files.
|
|
515
|
+
- `app clone <appId> [path]` - Clone a Bkper-managed App source repository. Does not install dependencies; run `bun install` explicitly afterward. External-source Apps must be cloned from their provider instead.
|
|
516
|
+
- `app git-credential <appId> [operation]` - Internal noninteractive Git credential helper for managed Artifacts source. Generated repository config pins the App ID and exact remote URL/path; Git appends `get`, `store`, or `erase`. Never persists tokens.
|
|
429
517
|
- `app list` - List all apps you have access to
|
|
430
|
-
- `app sync` - Sync [bkper.yaml][bkper.yaml reference] configuration
|
|
518
|
+
- `app sync` - Sync [bkper.yaml][bkper.yaml reference] configuration. If this sync creates an eligible new standalone App, activate managed source; if already managed, cleanly fast-forward-push the current committed branch first.
|
|
431
519
|
- `app build` - Build the server Worker bundle for deployment
|
|
432
|
-
- `app deploy` -
|
|
520
|
+
- `app deploy` - For managed Apps, cleanly fast-forward-push and verify the current commit, then explicitly deploy the existing local build. External Apps keep direct upload behavior.
|
|
433
521
|
- `-p, --preview` - Deploy to preview environment
|
|
434
522
|
- `app status` - Show deployment status
|
|
435
523
|
- `app logs [appId]` - View recent app logs. When `appId` is omitted, the app id is read from local app config.
|
|
@@ -449,7 +537,7 @@ Inside the interactive agent:
|
|
|
449
537
|
- `--sp, --server-port <port>` - Server simulation port (default: `8787`)
|
|
450
538
|
- `--cp, --client-port <port>` - Client dev server port for local static assets (default: `5173`)
|
|
451
539
|
|
|
452
|
-
> **Note:** `sync` and `deploy` are independent operations.
|
|
540
|
+
> **Note:** `sync` and `deploy` are independent explicit operations. `sync` updates App metadata and, for managed Apps, safely pushes committed source. `deploy` uploads an existing local build and never runs a build command. An ordinary Git push never deploys.
|
|
453
541
|
|
|
454
542
|
### App Installation
|
|
455
543
|
|
package/lib/docs/index.md
CHANGED
|
@@ -6,7 +6,7 @@ For Bkper data, accounting, reporting, tax, or financial-flow tasks, read `core/
|
|
|
6
6
|
|
|
7
7
|
- `core/core-concepts.md` — canonical Bkper data model: resources, movements, balances, accounts, groups, books, transactions, properties, and the zero-sum invariant.
|
|
8
8
|
- `cli/data-management.md` — CLI reference for managing financial data and files: books, accounts, groups, files, transactions, per-account balance queries, query operators (on:, after:, before:, account:, group:), output formats (table/json/csv), human-review Bkper UI links, batch operations via stdin/piping, collections.
|
|
9
|
-
- `cli/app-management.md` — CLI reference for building and deploying Bkper apps: dev/build/deploy workflow, app install/uninstall, secrets management, app logs, bkper.yaml configuration reference (identity, branding, events, menu integration, deployment).
|
|
9
|
+
- `cli/app-management.md` — CLI reference for building and deploying Bkper apps: init/git clone/credential helpers, dev/build/deploy workflow, app install/uninstall, secrets management, app logs, bkper.yaml configuration reference (identity, branding, events, menu integration, deployment).
|
|
10
10
|
- `apps/app-building.md` — Full app-building reference: single Worker app architecture (`client/` + `server/`), development loop, `/api/*` routes, `/events` handlers, deployment patterns, the Bkper Platform, and self-hosted alternatives. Includes authentication patterns for web clients (`@bkper/web-auth`), server API routes (`Authorization: Bearer` on `/api/*` with outbound auth injection), platform event handlers (`new Bkper()` with outbound auth injection), and local development.
|
|
11
11
|
- `reporting/financial-statements.md` — Deterministic reporting principles and Bkper query semantics for balance sheet and P&L: trusted routes, root reporting groups, permanent vs period date rules, and provisional query patterns.
|
|
12
12
|
- `reporting/taxes.md` — Deterministic tax reporting principles: trusted routes, external tax-rule loading/discovery, user-approved tax-relevant groups/accounts, period activity queries, explicit jurisdiction assumptions, and provisional query patterns.
|