@snokam/platform-client 1.0.0 → 3.0.0

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/CHANGELOG.md ADDED
@@ -0,0 +1,349 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
+
6
+ # [3.0.0](https://github.com/GIT_USER_ID/GIT_REPO_ID/compare/@snokam/platform-client@2.0.0...@snokam/platform-client@3.0.0) (2026-10-01)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **tooling:** keep a regenerated client's published version ([33c866c](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/33c866cdd916bba2ea4bdd975d4783ae22f2224b)), closes [#2530](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2530)
12
+
13
+
14
+ * feat(onboarding)!: vendor-independent onboarding + onboarding tasks in Jira (#2530) ([ebb4592](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/ebb4592d64ca68dfcf04470435bdb6d30931eb00)), closes [#2530](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2530)
15
+
16
+
17
+ ### BREAKING CHANGES
18
+
19
+ * `SanitySystemsInner` and the `/v1.0/systems` endpoints
20
+ are removed from the sanity/recruitment clients.
21
+
22
+ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
23
+
24
+ * feat(recruitment): surface catalog activate/deactivate deep-links on onboarding rows
25
+
26
+ Restore the manual "activate account"/"deactivate" deep-links that the Sanity
27
+ system-doc teardown dropped, now sourced from the OnboardingSystemCatalog via
28
+ RequestTenant. OnboardingStepSystemView carries nullable activateUrl/deactivateUrl,
29
+ populated per system from tenant.OnboardingActivateUrl/OnboardingDeactivateUrl
30
+ (rendering the {slug} template + per-tenant override map). recruitment-web renders
31
+ the activate link on onboarding system rows and the deactivate link on offboarding
32
+ rows when present. Regenerated recruitment client.
33
+
34
+ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
35
+
36
+ * fix(recruitment): micros cannot use the @/ alias — my-page-web compiles them
37
+
38
+ The kandidat, drift and onboarding micros are imported by my-page-web, where
39
+ @/ resolves to my-page-web's src. The eight @/utils/systemCapabilities imports
40
+ this branch added were therefore unresolvable in that build — six module-not-
41
+ found errors, and the image never got built. Every other file under micros/
42
+ already reaches app-local code by relative path; these now do too.
43
+
44
+ Also runs prettier over the candidate process schema, which the lint job
45
+ flagged.
46
+
47
+ Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
48
+ Claude-Session: https://claude.ai/code/session_01FatBj58knAM48WmDppDYyg
49
+
50
+ * chore(platform): regenerate the platform client for the merged integration model
51
+
52
+ The merge took main's IntegrationSummary, which renamed isActive to isInUse
53
+ and does not know about logoUrl. Regenerating against the merged
54
+ platform-function gives a client with both.
55
+
56
+ Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
57
+ Claude-Session: https://claude.ai/code/session_01FatBj58knAM48WmDppDYyg
58
+
59
+ * chore(platform): keep the platform-client changelog the regenerator dropped
60
+
61
+ The client generator rewrites the package directory and took CHANGELOG.md with
62
+ it. Restored from main.
63
+
64
+ Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
65
+ Claude-Session: https://claude.ai/code/session_01FatBj58knAM48WmDppDYyg
66
+
67
+ * fix(platform): follow the tenancy refactor's namespaces in the integration catalog
68
+
69
+ main's refactor removed Snokam.Security: FunctionAuthorize now lives in Snokam.Auth and ImplicitAuthFlow in Snokam.Api. IntegrationCatalog still imported the old namespace, so the platform-function image build failed once main was merged in. Platform.Function builds with 0 errors.
70
+
71
+ Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
72
+
73
+ * feat: create onboarding tasks as Jira issues and sync them back
74
+
75
+ Onboarding tasks become Jira issues instead of checkboxes only. The
76
+ intranet onboarding list stays the master for which issues get created.
77
+
78
+ - Onboarding chain step `jira-onboarding-tasks` creates one issue per
79
+ open onboarding task, in the configured epic and the active sprint,
80
+ labelled onboarding-firstname-lastname. Assignee comes from the task's
81
+ new role (recruiter / buddy / new hire) or a fixed person.
82
+ - SyncOnboardingIssuesJob (every 15 min, plus POST
83
+ /v1.0/protected/onboarding/jira-sync) creates the equipment issue once
84
+ the new hire orders equipment, creates the follow-up issue X days after
85
+ start, and ticks tasks off in the checklist when their issue is done.
86
+ A done equipment issue posts who ordered it.
87
+ - Recruitment Settings gets an "Onboarding i Jira" section (project,
88
+ epic, issue type, equipment assignee, follow-up days/role), served by a
89
+ new sanity-function endpoint.
90
+ - The equipment-ordered Slack message points to the Jira issue instead
91
+ of the Confluence checklist.
92
+
93
+ Committed with --no-verify from a worktree; lint (0 errors) and prettier
94
+ were run on the changed TS workspaces.
95
+
96
+ Refs SNO-4167
97
+
98
+ Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
99
+
100
+ * feat: read onboarding task status live from Jira instead of copying it
101
+
102
+ Jira is the source of truth for onboarding tasks, so the intranet no
103
+ longer mirrors completion into onboardingChecklist.
104
+
105
+ - Candidates keep only the link from task to issue key; `done` is gone,
106
+ `announced` remains for the one-time "utstyret er bestilt" message.
107
+ - GET /v1.0/protected/onboarding/issues returns every onboarding
108
+ candidate's issues (or one, with candidateId) with status, assignee
109
+ and browse link from a single Jira query; statusError says why when
110
+ Jira is unreachable.
111
+ - Candidate detail, the onboarding dashboard and Min rekruttering count
112
+ a task as done when Jira says so (or it was ticked before it got an
113
+ issue). Tasks with an issue are read-only and link to Jira.
114
+ - The sync job now only creates the equipment and follow-up issues and
115
+ announces a finished equipment order.
116
+
117
+ New UI text keys are seeded on recruitment-web-admin-candidate-page in
118
+ prod. Committed with --no-verify from a worktree; recruitment-web lint
119
+ (0 errors), prettier and tsc on the changed micros were run.
120
+
121
+ Refs SNO-4167
122
+
123
+ Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
124
+
125
+ * feat: create the equipment issue when the order is placed; sync daily
126
+
127
+ - employees-function calls recruitment-function (generated client, MI
128
+ token) right after an equipment order, and recruitment creates the
129
+ equipment Jira issue on the new hire's onboarding. A failed call is
130
+ reported and the daily run catches up.
131
+ - New POST /v1.0/protected/onboarding/equipment-order.
132
+ - SyncOnboardingIssuesJob now runs daily at 07:00: due follow-ups,
133
+ missed equipment issues, and the one-time "utstyret er bestilt"
134
+ message.
135
+ - Studio hides the manual onboarding checklist once a candidate has
136
+ Jira issues (status lives in Jira and the intranet); the Jira list
137
+ shows task title per issue.
138
+
139
+ Refs SNO-4167
140
+
141
+ Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
142
+
143
+ * fix(recruitment): look up Jira assignees with assignable-user search
144
+
145
+ The connected Jira account (Olaf) lacks the global Browse users
146
+ permission, so /user/search returns nothing. /user/assignable/search
147
+ scoped to the project works with read:jira-user and is the right
148
+ question anyway: can this person be assigned in the project?
149
+
150
+ Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
151
+
152
+ * fix(recruitment): bulk-create onboarding issues and harden Jira parsing
153
+
154
+ Found in a live run against the test Jira site:
155
+ - Creating 27 issues one by one took ~45 s locally, close to the 60 s
156
+ request budget, and a run cut short left issues in Jira that were
157
+ never linked, so a retry duplicated them. Task issues are now created
158
+ with one /issue/bulk call, and every issue Jira accepted is saved even
159
+ when others are rejected.
160
+ - The Jira access token was fetched from platform on every Jira call;
161
+ it is now fetched once per request.
162
+ - Unassigned issues ("assignee": null) crashed status parsing; JSON
163
+ nulls are handled.
164
+
165
+ Adds adapter tests against recorded Jira responses.
166
+
167
+ Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
168
+
169
+ * feat(recruitment): create onboarding Jira issues on schedule, X days before start
170
+
171
+ Each onboarding task's existing "Påminn kanal X dager før oppstart"
172
+ (remindDaysBefore) now also decides when its Jira issue is created:
173
+ start date minus X days. Tasks without it are created as soon as the
174
+ candidate is onboarding. The daily job creates what has become due for
175
+ ONBOARDING candidates whose start date is at most follow-up-days back;
176
+ "Kjør automatisk onboarding" creates what is due right away. Candidates
177
+ without a start date get nothing.
178
+
179
+ Also fixes the task API, which projected the stale reminderWeeksBefore
180
+ field instead of remindDaysBefore.
181
+
182
+ Refs SNO-4167
183
+
184
+ Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
185
+
186
+ * feat(recruitment): create all onboarding issues at once and place each in the sprint of its due date
187
+
188
+ From recruitment (Silje): create the issues when the candidate is moved
189
+ to onboarding, and put them in sprints based on the start date.
190
+
191
+ - Moving a candidate to ONBOARDING starts issue creation in the
192
+ background from the candidate page; the daily job is the safety net.
193
+ - Every issue gets a Jira due date: start date minus the task's "X dager
194
+ før oppstart", or the start date when it has none.
195
+ - Each issue goes into the sprint whose dates cover its due date (active
196
+ sprint when due already, the last planned sprint when beyond the
197
+ planned ones). Nothing is left in the backlog. Sprints are read from
198
+ issue search, so no extra Jira Software scope is needed.
199
+ - The daily job moves open issues to the right sprint when sprints are
200
+ added or re-dated.
201
+ - Candidate page shows due date and sprint on each Jira task; the
202
+ "planned" state is gone since every task exists in Jira.
203
+
204
+ Refs SNO-4167
205
+
206
+ Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
207
+
208
+ * chore: regenerate Sanity types and clients for the integrated onboarding branch
209
+
210
+ Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
211
+
212
+
213
+
214
+
215
+
216
+ # 2.0.0 (2026-09-02)
217
+
218
+
219
+ ### Bug Fixes
220
+
221
+ * **platform:** collect the founder's details at signup ([#2112](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2112)) ([c5d8149](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/c5d814902d4b298cb6a26375f9c0af074eedf279))
222
+ * **platform:** export endpoint declares binary response — regen emitted a dangling BusinessExport ref that broke every JS build ([d3cf2d9](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/d3cf2d9818ded0388e56254d2328a8f3ded70b84))
223
+ * **platform:** show SSO for accounts without a password, pin scim to platform host ([fc2f551](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/fc2f5512ff8f4983ac052b0728753e630b81d761))
224
+ * **sanity:** close the scope-grant escalation, and move tenant access onto generated clients ([#2093](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2093)) ([c40608a](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/c40608a223cc725d1182dc176561540c3bc237a9))
225
+
226
+
227
+ * feat!: subcontractor re-invoicing — year overview, kickback via AI, own access scope (#2283) ([bdc81f6](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/bdc81f6818bfc0e910aa3a820cb870054dc73c9f)), closes [#2283](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2283)
228
+
229
+
230
+ ### Features
231
+
232
+ * **access:** hide baseline (default) scopes from the user-grant picker ([#1684](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1684)) ([2750333](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/27503339d0baac52b2d0da51998551d00f1f6d39))
233
+ * add BusinessStatus enum and update related files ([2af8de7](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/2af8de7707a20e44aca3a3f358b83fbd77cf0ccb))
234
+ * add initial .NET and TypeScript client implementations ([425d183](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/425d183d5f3d928b6c0dd6c2cb36c4d82459b8b6))
235
+ * add platform client and update business management code ([d6c3e5a](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/d6c3e5a7587ee31cb780e13debc35150819cc338))
236
+ * **admin:** self-service admin forms, form kit, and fleet-wide content edit mode ([#1748](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1748)) ([174dab1](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/174dab19f7c75e9e56884cf21b553b6b3893dbb9))
237
+ * **auth:** exchange identity-provider tokens for platform tokens ([#1991](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1991)) ([e711a2f](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/e711a2f638f355891e97e84109b960184bcc2fec))
238
+ * **auth:** password + TOTP login (Phase 1, deploy-dark behind PASSWORD_AUTH_ENABLED) ([#1777](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1777)) ([8545b84](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/8545b847258d6f15563f74808eddf714d32d7f6e))
239
+ * **auth:** record every impersonated request in the impersonation audit log ([#2188](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2188)) ([65e4ab7](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/65e4ab76e842c326c931a18399deae60e08cd4d2))
240
+ * **billing:** card on file is Stripe-owned truth, operators only set invoice terms ([f789f2a](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/f789f2abeafeb9326d79b5ad8590c3244ae6ddfb))
241
+ * **billing:** Phase 2 — enforcement, trial UX, module-aware menu ([#1755](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1755)) ([a5a4533](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/a5a4533b6c8a7658d90063ce76a6f940318cbad8))
242
+ * **employees:** inherited system access + provisioning status on /manage/users ([#2233](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2233)) ([5286900](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/5286900de3524cc9bbffc06e759f3de22c70964c))
243
+ * enforcement hardening + view-as-employee + mobile/dark + scroll fix ([#1780](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1780)) ([54e0eae](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/54e0eae0a31384de6bb65cb86af0a5b5dfff3a0e)), closes [#1779](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1779) [#1779](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1779)
244
+ * **integrations:** disconnect from the UI, and ask which provider to use ([#2410](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2410)) ([a068f81](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/a068f81f1b23c2860b9ed8aeddc2500ae6aeebab))
245
+ * **integrations:** show connected OAuth user on integrasjoner page ([a7703c0](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/a7703c00a1784cabe010d9aa013d5a580a5df2d9))
246
+ * multi-business platform — secret persistence, integration checks, feature flags ([#1556](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1556)) ([990de8f](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/990de8f2044a619de641d8066d40d503ab390070)), closes [#70](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/70) [#71](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/71) [#69](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/69)
247
+ * **newsletter:** AI-summarized newsletters for tag subscribers ([#861](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/861)) ([9f7e676](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/9f7e6761e8c7e8271f0d10856bbc155b890ad1f2))
248
+ * **openapi:** use 7.23.0-SNAPSHOT, drop ThrowOnAnyError post-gen patch ([#1327](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1327)) ([22903d3](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/22903d3fba7234a9222019589922dbfd21484aa2)), closes [OpenAPITools/openapi-generator#23663](https://github.com/OpenAPITools/openapi-generator/issues/23663) [#30](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/30)
249
+ * **platform-client:** regen for GitHub repo picker + business api-token ([ab6aa36](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/ab6aa36354aaadff87c8b5cea5d37317a39d371b))
250
+ * **platform-web:** add an sso section under the enterprise menu ([6349b35](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/6349b354790e3bd69515561f3603954971d91df9))
251
+ * **platform:** access endpoints to edit tenant scopeGrants (phase 4) ([8231fcc](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/8231fcca8aca85c0e09283e87c0b39efa7a37783))
252
+ * **platform:** add olaf teams-settings endpoint and business-config model ([64baa53](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/64baa53b6eafe47e83c73cb10331026e54baf3e4))
253
+ * **platform:** admin app picker for systems + explicit role assignment ([#2234](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2234)) ([9a496f2](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/9a496f214eccdef27bbeb60e5b0b0256b0ace5f4))
254
+ * **platform:** customer API keys with scoped auth + printer pull API ([#1654](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1654)) ([076d7ee](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/076d7ee3a7b5f46fb77e4e5a7718f75a120b3e9d))
255
+ * **platform:** disconnect an integration, and stop guessing between two ([#2408](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2408)) ([2c66faa](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/2c66faae2d0e892269755e968254981b215766e9))
256
+ * **platform:** granular customer API-key scopes with typed catalog + endpoint ([#1660](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1660)) ([20289a3](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/20289a3b5bfe4a19c11e7df6e8b91cf505471d2c))
257
+ * **platform:** hide password management when Entra SSO is the identity source ([da7fd6a](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/da7fd6a6aa9f0ab5c03f2d557f410f5bde63c2f5))
258
+ * **platform:** let businesses pick repos Olaf works on, cloned to the VM ([#1636](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1636)) ([c4f8730](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/c4f873062dba23ec758823e45256ace272fc0feb))
259
+ * **platform:** license-override picker in /manage onboarding config ([7572f1e](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/7572f1e6a3ecd957d62be326cb13c92a5010bcc6))
260
+ * **platform:** meter cleanup + password signup + view-as + loader/copy passes ([#1778](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1778)) ([4f65a12](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/4f65a129a542130679fd7aff5898aaf1999c54f6))
261
+ * **platform:** per-tenant PowerOffice re-invoice product picker ([#2322](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2322)) ([db4fd2b](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/db4fd2b759aa68ee72ff80aee600674a799d24d4)), closes [#2321](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2321)
262
+ * **platform:** per-user system seats with role selection on /manage/users ([#2231](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2231)) ([35c90d5](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/35c90d50ac56aeb28f37cab67ada6f49e93df9d5))
263
+ * **platform:** pick onboarding groups from the tenant's own entra ([d3662d0](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/d3662d0a50dead9f8c4761ecc91842618b54786c))
264
+ * **platform:** PowerOffice onboarding as a connect-style integration ([#2214](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2214)) ([3ea9c70](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/3ea9c704bc958835879f36bb71e0eae517f9070d))
265
+ * **platform:** reconcile registered AI tokens against Azure's actual cost ([#1781](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1781)) ([fdf26bc](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/fdf26bc7f4d6d39d42df2e985cb985560d7e89d1))
266
+ * **platform:** remember saved onboarding directory selections ([#1857](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1857)) ([192e10d](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/192e10d6b66c8214461606869916391f6fc0551a))
267
+ * **platform:** resolve app links for non-admin employees on /manage ([#1893](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1893)) ([4022417](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/4022417a90cf0f037c97a9940c0d953ac16225ed))
268
+ * **platform:** select Google Analytics property at platform level ([#1598](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1598)) ([a4dffed](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/a4dffed997e1128ebc3b729d50a62030d68b1399))
269
+ * **platform:** serve tenant users through platform-function ([#2090](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2090)) ([2a622e6](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/2a622e62ae624a8fda57d7c4cd7940e255e39458))
270
+ * **platform:** serve the caller's settings and employee photos through platform-function ([#2095](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2095)) ([e2ddcb7](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/e2ddcb7514e2a30528168c1d95dbbb3112caeffd))
271
+ * **platform:** systems picker via enterprise-app + app-role dropdowns ([1326174](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/1326174992b77f0df118065dc958072ba42a9eee))
272
+ * **platform:** update generated client with secret status API and use API types ([d2143e4](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/d2143e46f53ca6e089cb483cd90bd4f95b7ac718))
273
+ * **platform:** usage in kroner — stage 1 (units + value everywhere) ([#2073](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2073)) ([aa94645](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/aa94645793e4d320f6a8acfd45f64c560d12a75e))
274
+ * provider-independent accounting connector + PowerOffice-employee onboarding ([#2327](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2327)) ([69fee51](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/69fee51c6353b464de68494dfc0e88768b362deb))
275
+ * **signup:** keep the plan the customer picked on the pricing page ([#2051](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/2051)) ([2795b55](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/2795b55ef094c8d8c1ea1e947003cd304e5c4ff9))
276
+ * **snokam.no/presentasjoner:** Added presentasjoner page ([#1535](https://github.com/GIT_USER_ID/GIT_REPO_ID/issues/1535)) ([c37fbb6](https://github.com/GIT_USER_ID/GIT_REPO_ID/commit/c37fbb60aec35a2817254e4139c3d2080231b15a))
277
+
278
+
279
+ ### BREAKING CHANGES
280
+
281
+ * accounting client contract replaces SubcontractorMonthlySummary,
282
+ SubcontractorConfig and ProjectSubcontractor with SubcontractorProject,
283
+ SubcontractorProjectSummary and OutgoingInvoiceSummary.
284
+
285
+ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
286
+
287
+ * chore(clients): regenerate accounting client for year-based reinvoicing
288
+
289
+ Regenerated from the reworked reinvoicing endpoints: adds SubcontractorProject,
290
+ SubcontractorProjectSummary and OutgoingInvoiceSummary; removes the retired
291
+ SubcontractorMonthlySummary, SubcontractorConfig and ProjectSubcontractor models.
292
+
293
+ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
294
+
295
+ * feat: auto-create subcontractor drafts daily and tag them with the project
296
+
297
+ - Cron GenerateSubcontractorDraftInvoices runs daily (was monthly) so a new
298
+ incoming supplier invoice gets its draft re-invoice the next morning
299
+ - Draft outgoing invoices now carry the project code on both the invoice
300
+ header and each line, so they reconcile in the /okonomi/underleverandor
301
+ panel by project like any posted invoice — previously auto-drafts had no
302
+ project and never appeared
303
+ - Manual re-run endpoint (CreateSubcontractorInvoiceDraft) kept as override
304
+
305
+ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
306
+
307
+ * chore(clients): regenerate accounting client for optional-year reinvoicing endpoints
308
+
309
+ Project incoming/outgoing endpoints now accept an optional `year` (omit for full
310
+ history), so the generated query params become `year?: number | null`.
311
+
312
+ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
313
+
314
+ * feat: correct incoming totals, full-width income graph, årssum row, full-history detail
315
+
316
+ - Incoming supplier invoices now read from PowerOffice AccountTransactions
317
+ (VoucherType.IncomingInvoice, cost-account lines), fixing the empty incoming
318
+ column: the Voucher.IncomingInvoice list feed returns nothing, so the net cost
319
+ (verified 631 377 for 29.10 Mar–May) never showed.
320
+ - Voucher documentation fetch degrades to no-PDF on PowerOffice Forbidden instead
321
+ of a 500, so "Ingen PDF tilgjengelig" renders cleanly until the scope is granted.
322
+ - Detail page defaults to the project's full history; year becomes an optional
323
+ filter ("Alle år"), and the reconciliation table groups by year+month.
324
+ - Accumulated-income graph spans full width (Section stretchItems); detail table
325
+ gains an annual-total footer row.
326
+
327
+ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
328
+
329
+ * feat: kickback subcontractors — AI-parse forwarded invoices into provision drafts
330
+
331
+ - chatgpt-function: generic extract(pdf, schema) endpoint (Azure OpenAI Responses
332
+ API, native PDF, metered) — no PdfPig.
333
+ - accounting-function: read the provisjon inbox over Microsoft Graph (per-tenant
334
+ microsoft365 OAuth connection + KICKBACK_INBOX tenant secret), AI-extract each
335
+ forwarded invoice, AI-match to a PowerOffice subproject (Bestillingsnr/
336
+ PurchaseOrderNo + consultant), create an idempotent provision draft
337
+ (markup% × net) — DraftInvoiceExists-guarded, safe to re-run.
338
+ - new accounting.subcontractors scope in the baseline (own scope, not salary);
339
+ all reinvoicing/kickback endpoints move off accounting.salary; frontend shows
340
+ "Du har ikke tilgang" on 403.
341
+ - platform-function: provider-agnostic ListMailboxes endpoint (/businesses/{id}/
342
+ mailboxes) via DirectoryReader — for the provisjon-inbox picker.
343
+ - finance-web: kickback review table. platform-web: provisjon-inbox selector.
344
+ - Regenerate accounting, chatgpt and platform clients.
345
+
346
+ (--no-verify: huge staged set trips the React-Compiler phantom eslint bail;
347
+ prettier clean and per-workspace tsc green.)
348
+
349
+ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
package/README.md CHANGED
@@ -62,6 +62,7 @@ All URIs are relative to *https://snokam.snosky.no/api/platform*
62
62
  *PlatformClient* | [**backfillBridgeWebhook**](docs/PlatformClient.md#backfillbridgewebhook) | **POST** /v1.0/protected/businesses/{id}/bridge-webhook | Re-create a business\&#39;s Sanity bridge webhook with a managed API key
63
63
  *PlatformClient* | [**checkIntegration**](docs/PlatformClient.md#checkintegration) | **POST** /v1.0/protected/businesses/{id}/integrations/{key}/check | Run a live integration connectivity check
64
64
  *PlatformClient* | [**checkPlatformIntegration**](docs/PlatformClient.md#checkplatformintegration) | **POST** /v1.0/protected/platform/integrations/{key}/check | Live-probe a platform integration
65
+ *PlatformClient* | [**chooseProvider**](docs/PlatformClient.md#chooseprovideroperation) | **PUT** /v1.0/protected/businesses/{id}/integrations/chosen | Choose the active provider for a capability
65
66
  *PlatformClient* | [**connectTenant**](docs/PlatformClient.md#connecttenant) | **POST** /v1.0/protected/businesses/{id}/connect | Connect the caller\&#39;s tenant to a business
66
67
  *PlatformClient* | [**createApiToken**](docs/PlatformClient.md#createapitokenoperation) | **POST** /v1.0/protected/businesses/{id}/tokens | Create an API token
67
68
  *PlatformClient* | [**createBillingCheckout**](docs/PlatformClient.md#createbillingcheckout) | **POST** /v1.0/protected/businesses/{id}/billing/checkout | Start a subscription checkout
@@ -73,6 +74,7 @@ All URIs are relative to *https://snokam.snosky.no/api/platform*
73
74
  *PlatformClient* | [**devicePairPoll**](docs/PlatformClient.md#devicepairpoll) | **POST** /v1.0/public/devices/poll | Ask whether the code was approved
74
75
  *PlatformClient* | [**devicePairRequest**](docs/PlatformClient.md#devicepairrequest) | **POST** /v1.0/public/devices/pair | Ask for a pairing code
75
76
  *PlatformClient* | [**disableCredential**](docs/PlatformClient.md#disablecredential) | **DELETE** /v1.0/protected/businesses/{id}/credentials/{credentialId} | Disable a password credential
77
+ *PlatformClient* | [**disconnectIntegration**](docs/PlatformClient.md#disconnectintegration) | **DELETE** /v1.0/protected/businesses/{id}/integrations/{key} | Disconnect an integration
76
78
  *PlatformClient* | [**endImpersonation**](docs/PlatformClient.md#endimpersonation) | **POST** /v1.0/protected/impersonate/{tokenId}/end | End a view-as-employee session
77
79
  *PlatformClient* | [**exportBusinessData**](docs/PlatformClient.md#exportbusinessdata) | **POST** /v1.0/protected/businesses/{id}/export | Export a business\&#39;s data (GDPR)
78
80
  *PlatformClient* | [**getApiScopes**](docs/PlatformClient.md#getapiscopes) | **GET** /v1.0/protected/scopes | List grantable API scopes
@@ -101,6 +103,7 @@ All URIs are relative to *https://snokam.snosky.no/api/platform*
101
103
  *PlatformClient* | [**getPlatformIntegrations**](docs/PlatformClient.md#getplatformintegrations) | **GET** /v1.0/protected/platform/integrations | List platform-shared integrations
102
104
  *PlatformClient* | [**getPlatformOAuthAccessToken**](docs/PlatformClient.md#getplatformoauthaccesstoken) | **GET** /v1.0/protected/platform/oauth/{provider}/access-token | Mint a fresh platform OAuth access token
103
105
  *PlatformClient* | [**getPlatformSecrets**](docs/PlatformClient.md#getplatformsecrets) | **GET** /v1.0/protected/platform/secrets | List shared platform secrets
106
+ *PlatformClient* | [**getProviderCatalog**](docs/PlatformClient.md#getprovidercatalog) | **GET** /v1.0/protected/catalog/providers | List provider brand catalog
104
107
  *PlatformClient* | [**getProvisioningStatus**](docs/PlatformClient.md#getprovisioningstatus) | **GET** /v1.0/protected/businesses/{id}/status | Get provisioning status
105
108
  *PlatformClient* | [**getTeamsAuthState**](docs/PlatformClient.md#getteamsauthstate) | **GET** /v1.0/protected/businesses/{id}/teams/auth-state | Read the business\&#39;s stored Teams authenticated join session
106
109
  *PlatformClient* | [**getTeamsUserAcsToken**](docs/PlatformClient.md#getteamsuseracstoken) | **GET** /v1.0/protected/businesses/{id}/teams/acs-token | Mint an ACS access token for the connected M365 user as a Teams user
@@ -155,7 +158,7 @@ All URIs are relative to *https://snokam.snosky.no/api/platform*
155
158
  *PlatformClient* | [**requestUpgrade**](docs/PlatformClient.md#requestupgrade) | **POST** /v1.0/protected/businesses/{id}/request-upgrade | Request an Enterprise upgrade
156
159
  *PlatformClient* | [**resetCredential**](docs/PlatformClient.md#resetcredential) | **POST** /v1.0/protected/businesses/{id}/credentials/{credentialId}/reset | Admin-initiated password reset
157
160
  *PlatformClient* | [**resolvePlatformSanityConfig**](docs/PlatformClient.md#resolveplatformsanityconfig) | **GET** /v1.0/protected/sanity/platform | Resolve the platform Sanity read config
158
- *PlatformClient* | [**resolveStudioSanityConfig**](docs/PlatformClient.md#resolvestudiosanityconfig) | **GET** /v1.0/public/sanity-config | Resolve the Sanity Studio project/dataset for a host
161
+ *PlatformClient* | [**resolveStudioSanityConfig**](docs/PlatformClient.md#resolvestudiosanityconfig) | **GET** /v1.0/public/sanity-config | Resolve the Sanity Studio project/dataset and frontend URLs for a host
159
162
  *PlatformClient* | [**resolveTenant**](docs/PlatformClient.md#resolvetenant) | **GET** /v1.0/protected/tenant | Resolve a tenant
160
163
  *PlatformClient* | [**resolveTenantSanityCredentials**](docs/PlatformClient.md#resolvetenantsanitycredentials) | **GET** /v1.0/protected/businesses/by-host/{host}/sanity | Resolve a tenant\&#39;s Sanity read credentials by host
161
164
  *PlatformClient* | [**revokeApiToken**](docs/PlatformClient.md#revokeapitoken) | **DELETE** /v1.0/protected/businesses/{id}/tokens/{fingerprint} | Revoke an API token
@@ -163,7 +166,6 @@ All URIs are relative to *https://snokam.snosky.no/api/platform*
163
166
  *PlatformClient* | [**revokeDevice**](docs/PlatformClient.md#revokedevice) | **DELETE** /v1.0/protected/businesses/{id}/devices/{deviceId} | Revoke a screen
164
167
  *PlatformClient* | [**setAccountingGadgetsProject**](docs/PlatformClient.md#setaccountinggadgetsproject) | **POST** /v1.0/protected/businesses/{id}/accounting/gadgets-project | Set the gadgets project code
165
168
  *PlatformClient* | [**setAccountingReinvoiceProduct**](docs/PlatformClient.md#setaccountingreinvoiceproduct) | **POST** /v1.0/protected/businesses/{id}/accounting/reinvoice-product | Set the re-invoice product code
166
- *PlatformClient* | [**setActiveProvider**](docs/PlatformClient.md#setactiveprovideroperation) | **PUT** /v1.0/protected/businesses/{id}/integrations/active | Choose the active provider for a capability
167
169
  *PlatformClient* | [**setBusinessEmployeePhoto**](docs/PlatformClient.md#setbusinessemployeephoto) | **POST** /v1.0/protected/businesses/{id}/employees/{employeeId}/photo | Upload an employee\&#39;s profile photo
168
170
  *PlatformClient* | [**setEmployeeScopeGrants**](docs/PlatformClient.md#setemployeescopegrants) | **PUT** /v1.0/protected/businesses/{id}/access/employees/{employeeId} | Set the scopes granted directly to an employee
169
171
  *PlatformClient* | [**setFacebookSelectedAccount**](docs/PlatformClient.md#setfacebookselectedaccount) | **PUT** /v1.0/protected/businesses/{id}/oauth/facebook/account | Set the selected Facebook/Instagram posting account
@@ -210,6 +212,7 @@ All URIs are relative to *https://snokam.snosky.no/api/platform*
210
212
  - [BusinessOwner](docs/BusinessOwner.md)
211
213
  - [BusinessUsageRollup](docs/BusinessUsageRollup.md)
212
214
  - [Capability](docs/Capability.md)
215
+ - [ChooseProviderRequest](docs/ChooseProviderRequest.md)
213
216
  - [CommissionTierReference](docs/CommissionTierReference.md)
214
217
  - [ComponentBlocksInnerOneOfChildrenInner](docs/ComponentBlocksInnerOneOfChildrenInner.md)
215
218
  - [ComponentBlocksInnerOneOfMarkDefsInner](docs/ComponentBlocksInnerOneOfMarkDefsInner.md)
@@ -286,6 +289,8 @@ All URIs are relative to *https://snokam.snosky.no/api/platform*
286
289
  - [PowerOfficeProject](docs/PowerOfficeProject.md)
287
290
  - [PowerOfficeProjectsResponse](docs/PowerOfficeProjectsResponse.md)
288
291
  - [ProtectedEmployee](docs/ProtectedEmployee.md)
292
+ - [ProviderCatalogEntry](docs/ProviderCatalogEntry.md)
293
+ - [ProviderCatalogResponse](docs/ProviderCatalogResponse.md)
289
294
  - [ProvisioningEvent](docs/ProvisioningEvent.md)
290
295
  - [RecordImpersonationActivityRequest](docs/RecordImpersonationActivityRequest.md)
291
296
  - [RenameDeviceRequest](docs/RenameDeviceRequest.md)
@@ -317,7 +322,6 @@ All URIs are relative to *https://snokam.snosky.no/api/platform*
317
322
  - [SanityTvCategoryDashboardsInnerBackgroundImageAsset](docs/SanityTvCategoryDashboardsInnerBackgroundImageAsset.md)
318
323
  - [ScopeDefinition](docs/ScopeDefinition.md)
319
324
  - [SessionBootstrapRequest](docs/SessionBootstrapRequest.md)
320
- - [SetActiveProviderRequest](docs/SetActiveProviderRequest.md)
321
325
  - [SetFacebookAccountRequest](docs/SetFacebookAccountRequest.md)
322
326
  - [SetGoogleAnalyticsPropertyRequest](docs/SetGoogleAnalyticsPropertyRequest.md)
323
327
  - [SetPlatformSecretRequest](docs/SetPlatformSecretRequest.md)
@@ -10,7 +10,7 @@
10
10
  * Do not edit the class manually.
11
11
  */
12
12
  import * as runtime from '../runtime';
13
- import type { ActivateRequest, ActivateResult, AddCustomDomainRequest, ApiTokenSummary, ApiTokenVerifyResult, AppCatalogEntry, AppModule, ApproveDeviceRequest, BillingPaymentMethod, BillingSessionRequest, BillingSessionResponse, BridgeWebhookResult, Business, BusinessAccess, BusinessHealth, Capability, CreateApiTokenRequest, CreateUserRequest, CreatedApiToken, CredentialSummary, CustomDomainProvisioning, DevicePairRequestBody, DevicePairing, DevicePairingStatus, DevicePollRequestBody, DeviceScreen, DirectoryGroupsResponse, DirectoryLicensesResponse, DirectoryMailbox, DirectoryServicePrincipalsResponse, EmployeeSettings, EmployeeSystemAccess, EmployeeSystemConfig, FacebookAccount, GitHubRepo, GoogleAnalyticsProperty, GoogleAnalyticsSelection, ImpersonationHistoryEntry, IntegrationCheckResult, IntegrationSummary, InviteCredentialRequest, InvoiceBasis, LoginConfig, MeApp, MeterEnforcementDecision, OAuthAccessTokenResponse, OAuthStartResponse, OlafApiKeyResponse, OlafTeamsSettings, OnboardBusinessRequest, OnboardingConfig, OnboardingStatus, PasswordLoginRequest, PasswordLoginResult, PatchBusinessRequest, PatchEmployee, PendingDevicePreview, PlanInfo, PlatformIntegration, PlatformSanityConfig, PlatformSecretStatus, PowerOfficeConnectResponse, PowerOfficeProduct, PowerOfficeProductsResponse, PowerOfficeProject, PowerOfficeProjectsResponse, ProtectedEmployee, RecordImpersonationActivityRequest, RenameDeviceRequest, ResetConfirmRequest, ResetRequest, RevokeRequest, ScopeDefinition, SessionBootstrapRequest, SetActiveProviderRequest, SetFacebookAccountRequest, SetGoogleAnalyticsPropertyRequest, SetPlatformSecretRequest, SetScopeGrantsRequest, SetWorkReposRequest, SetWorkspaceRepoRequest, SignupConfig, SignupRequest, SignupResult, SsoExchangeRequest, StartImpersonationRequest, StartImpersonationResult, StudioSanityConfig, TeamsAcsTokenResponse, TeamsAuthStateResponse, TenantInfo, TenantSanityCredentials, TokenExchangeRequest, TokenExchangeResult, TokenReconciliationReport, TotpEnrollRequest, TotpEnrollResult, UpdateAppsRequest, UpdateSecretsRequest, UsageDailySeries, UsageEventsRequest, UsageRollup, UsageSummary, VerifyApiTokenRequest, WorkReposSelection, WorkspaceRepoSelection } from '../models/index';
13
+ import type { ActivateRequest, ActivateResult, AddCustomDomainRequest, ApiTokenSummary, ApiTokenVerifyResult, AppCatalogEntry, AppModule, ApproveDeviceRequest, BillingPaymentMethod, BillingSessionRequest, BillingSessionResponse, BridgeWebhookResult, Business, BusinessAccess, BusinessHealth, Capability, ChooseProviderRequest, CreateApiTokenRequest, CreateUserRequest, CreatedApiToken, CredentialSummary, CustomDomainProvisioning, DevicePairRequestBody, DevicePairing, DevicePairingStatus, DevicePollRequestBody, DeviceScreen, DirectoryGroupsResponse, DirectoryLicensesResponse, DirectoryMailbox, DirectoryServicePrincipalsResponse, EmployeeSettings, EmployeeSystemAccess, EmployeeSystemConfig, FacebookAccount, GitHubRepo, GoogleAnalyticsProperty, GoogleAnalyticsSelection, ImpersonationHistoryEntry, IntegrationCheckResult, IntegrationSummary, InviteCredentialRequest, InvoiceBasis, LoginConfig, MeApp, MeterEnforcementDecision, OAuthAccessTokenResponse, OAuthStartResponse, OlafApiKeyResponse, OlafTeamsSettings, OnboardBusinessRequest, OnboardingConfig, OnboardingStatus, PasswordLoginRequest, PasswordLoginResult, PatchBusinessRequest, PatchEmployee, PendingDevicePreview, PlanInfo, PlatformIntegration, PlatformSanityConfig, PlatformSecretStatus, PowerOfficeConnectResponse, PowerOfficeProduct, PowerOfficeProductsResponse, PowerOfficeProject, PowerOfficeProjectsResponse, ProtectedEmployee, ProviderCatalogResponse, RecordImpersonationActivityRequest, RenameDeviceRequest, ResetConfirmRequest, ResetRequest, RevokeRequest, ScopeDefinition, SessionBootstrapRequest, SetFacebookAccountRequest, SetGoogleAnalyticsPropertyRequest, SetPlatformSecretRequest, SetScopeGrantsRequest, SetWorkReposRequest, SetWorkspaceRepoRequest, SignupConfig, SignupRequest, SignupResult, SsoExchangeRequest, StartImpersonationRequest, StartImpersonationResult, StudioSanityConfig, TeamsAcsTokenResponse, TeamsAuthStateResponse, TenantInfo, TenantSanityCredentials, TokenExchangeRequest, TokenExchangeResult, TokenReconciliationReport, TotpEnrollRequest, TotpEnrollResult, UpdateAppsRequest, UpdateSecretsRequest, UsageDailySeries, UsageEventsRequest, UsageRollup, UsageSummary, VerifyApiTokenRequest, WorkReposSelection, WorkspaceRepoSelection } from '../models/index';
14
14
  export interface AddCustomDomainOperationRequest {
15
15
  id: string;
16
16
  addCustomDomainRequest: AddCustomDomainRequest;
@@ -35,6 +35,10 @@ export interface CheckIntegrationRequest {
35
35
  export interface CheckPlatformIntegrationRequest {
36
36
  key: string;
37
37
  }
38
+ export interface ChooseProviderOperationRequest {
39
+ id: string;
40
+ chooseProviderRequest: ChooseProviderRequest;
41
+ }
38
42
  export interface ConnectTenantRequest {
39
43
  id: string;
40
44
  }
@@ -74,6 +78,10 @@ export interface DisableCredentialRequest {
74
78
  id: string;
75
79
  credentialId: string;
76
80
  }
81
+ export interface DisconnectIntegrationRequest {
82
+ id: string;
83
+ key: string;
84
+ }
77
85
  export interface EndImpersonationRequest {
78
86
  tokenId: string;
79
87
  }
@@ -311,10 +319,6 @@ export interface SetAccountingReinvoiceProductRequest {
311
319
  id: string;
312
320
  powerOfficeProduct: PowerOfficeProduct;
313
321
  }
314
- export interface SetActiveProviderOperationRequest {
315
- id: string;
316
- setActiveProviderRequest: SetActiveProviderRequest;
317
- }
318
322
  export interface SetBusinessEmployeePhotoRequest {
319
323
  id: string;
320
324
  employeeId: string;
@@ -481,6 +485,20 @@ export declare class PlatformClient extends runtime.BaseAPI {
481
485
  * Live-probe a platform integration
482
486
  */
483
487
  checkPlatformIntegration(requestParameters: CheckPlatformIntegrationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<IntegrationCheckResult>;
488
+ /**
489
+ * Creates request options for chooseProvider without sending the request
490
+ */
491
+ chooseProviderRequestOpts(requestParameters: ChooseProviderOperationRequest): Promise<runtime.RequestOpts>;
492
+ /**
493
+ * When a capability has several providers (e.g. PowerOffice vs Tripletex, Coinbase API-key vs OAuth), selects which one the business uses.
494
+ * Choose the active provider for a capability
495
+ */
496
+ chooseProviderRaw(requestParameters: ChooseProviderOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Business>>;
497
+ /**
498
+ * When a capability has several providers (e.g. PowerOffice vs Tripletex, Coinbase API-key vs OAuth), selects which one the business uses.
499
+ * Choose the active provider for a capability
500
+ */
501
+ chooseProvider(requestParameters: ChooseProviderOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Business>;
484
502
  /**
485
503
  * Creates request options for connectTenant without sending the request
486
504
  */
@@ -635,6 +653,20 @@ export declare class PlatformClient extends runtime.BaseAPI {
635
653
  * Disable a password credential
636
654
  */
637
655
  disableCredential(requestParameters: DisableCredentialRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void>;
656
+ /**
657
+ * Creates request options for disconnectIntegration without sending the request
658
+ */
659
+ disconnectIntegrationRequestOpts(requestParameters: DisconnectIntegrationRequest): Promise<runtime.RequestOpts>;
660
+ /**
661
+ * Deletes every secret the integration stores for this business — including the OAuth refresh token and cached access token — and clears the capability\'s provider choice when it pointed at this integration. Settings such as base URLs are left alone.
662
+ * Disconnect an integration
663
+ */
664
+ disconnectIntegrationRaw(requestParameters: DisconnectIntegrationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Business>>;
665
+ /**
666
+ * Deletes every secret the integration stores for this business — including the OAuth refresh token and cached access token — and clears the capability\'s provider choice when it pointed at this integration. Settings such as base URLs are left alone.
667
+ * Disconnect an integration
668
+ */
669
+ disconnectIntegration(requestParameters: DisconnectIntegrationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Business>;
638
670
  /**
639
671
  * Creates request options for endImpersonation without sending the request
640
672
  */
@@ -1027,6 +1059,20 @@ export declare class PlatformClient extends runtime.BaseAPI {
1027
1059
  * List shared platform secrets
1028
1060
  */
1029
1061
  getPlatformSecrets(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<PlatformSecretStatus>>;
1062
+ /**
1063
+ * Creates request options for getProviderCatalog without sending the request
1064
+ */
1065
+ getProviderCatalogRequestOpts(): Promise<runtime.RequestOpts>;
1066
+ /**
1067
+ * Returns the global, platform-owned provider brand catalog (key, capability, title, logo, description). Single source of truth for provider branding across tenants.
1068
+ * List provider brand catalog
1069
+ */
1070
+ getProviderCatalogRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ProviderCatalogResponse>>;
1071
+ /**
1072
+ * Returns the global, platform-owned provider brand catalog (key, capability, title, logo, description). Single source of truth for provider branding across tenants.
1073
+ * List provider brand catalog
1074
+ */
1075
+ getProviderCatalog(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ProviderCatalogResponse>;
1030
1076
  /**
1031
1077
  * Creates request options for getProvisioningStatus without sending the request
1032
1078
  */
@@ -1782,13 +1828,13 @@ export declare class PlatformClient extends runtime.BaseAPI {
1782
1828
  */
1783
1829
  resolveStudioSanityConfigRequestOpts(requestParameters: ResolveStudioSanityConfigRequest): Promise<runtime.RequestOpts>;
1784
1830
  /**
1785
- * Returns the non-secret Sanity project id and dataset a studio should point at for the given host. A tenant host returns that tenant\'s project; a host that belongs to no business (the platform host) returns the shared platform project. No read/write token is returned — the studio authenticates the user via Sanity login — so this is a public endpoint safe to call from a browser.
1786
- * Resolve the Sanity Studio project/dataset for a host
1831
+ * Returns the non-secret Sanity project id and dataset a studio should point at for the given host, plus that tenant\'s frontend app URLs so document \'Vis side\' links resolve per tenant. A tenant host returns that tenant\'s project; a host that belongs to no business (the platform host) returns the shared platform project and no app URLs. No read/write token is returned — the studio authenticates the user via Sanity login — so this is a public endpoint safe to call from a browser.
1832
+ * Resolve the Sanity Studio project/dataset and frontend URLs for a host
1787
1833
  */
1788
1834
  resolveStudioSanityConfigRaw(requestParameters: ResolveStudioSanityConfigRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<StudioSanityConfig>>;
1789
1835
  /**
1790
- * Returns the non-secret Sanity project id and dataset a studio should point at for the given host. A tenant host returns that tenant\'s project; a host that belongs to no business (the platform host) returns the shared platform project. No read/write token is returned — the studio authenticates the user via Sanity login — so this is a public endpoint safe to call from a browser.
1791
- * Resolve the Sanity Studio project/dataset for a host
1836
+ * Returns the non-secret Sanity project id and dataset a studio should point at for the given host, plus that tenant\'s frontend app URLs so document \'Vis side\' links resolve per tenant. A tenant host returns that tenant\'s project; a host that belongs to no business (the platform host) returns the shared platform project and no app URLs. No read/write token is returned — the studio authenticates the user via Sanity login — so this is a public endpoint safe to call from a browser.
1837
+ * Resolve the Sanity Studio project/dataset and frontend URLs for a host
1792
1838
  */
1793
1839
  resolveStudioSanityConfig(requestParameters: ResolveStudioSanityConfigRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<StudioSanityConfig>;
1794
1840
  /**
@@ -1887,20 +1933,6 @@ export declare class PlatformClient extends runtime.BaseAPI {
1887
1933
  * Set the re-invoice product code
1888
1934
  */
1889
1935
  setAccountingReinvoiceProduct(requestParameters: SetAccountingReinvoiceProductRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void>;
1890
- /**
1891
- * Creates request options for setActiveProvider without sending the request
1892
- */
1893
- setActiveProviderRequestOpts(requestParameters: SetActiveProviderOperationRequest): Promise<runtime.RequestOpts>;
1894
- /**
1895
- * When a capability has several providers (e.g. PowerOffice vs Tripletex, Coinbase API-key vs OAuth), selects which one the business uses.
1896
- * Choose the active provider for a capability
1897
- */
1898
- setActiveProviderRaw(requestParameters: SetActiveProviderOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Business>>;
1899
- /**
1900
- * When a capability has several providers (e.g. PowerOffice vs Tripletex, Coinbase API-key vs OAuth), selects which one the business uses.
1901
- * Choose the active provider for a capability
1902
- */
1903
- setActiveProvider(requestParameters: SetActiveProviderOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Business>;
1904
1936
  /**
1905
1937
  * Creates request options for setBusinessEmployeePhoto without sending the request
1906
1938
  */