@betterportal/auth-workos 10.1.32 → 10.1.33

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.
Files changed (16) hide show
  1. package/bsb-plugin.json +1 -1
  2. package/lib/bp-contracts/org.betterportal.auth.workos.json +942 -0
  3. package/lib/plugins/service-betterportal-auth-workos/bp-routes/.well-known/bp/config/workos-role-sync/index.d.ts.map +1 -1
  4. package/lib/plugins/service-betterportal-auth-workos/bp-routes/.well-known/bp/config/workos-role-sync/index.js +1 -1
  5. package/lib/plugins/service-betterportal-auth-workos/bp-routes/.well-known/bp/config/workos-role-sync/index.js.map +1 -1
  6. package/lib/plugins/service-betterportal-auth-workos/bp-routes/.well-known/bp/config/workos-role-sync/permissions/index.d.ts.map +1 -1
  7. package/lib/plugins/service-betterportal-auth-workos/bp-routes/.well-known/bp/config/workos-role-sync/permissions/index.js +1 -1
  8. package/lib/plugins/service-betterportal-auth-workos/bp-routes/.well-known/bp/config/workos-role-sync/permissions/index.js.map +1 -1
  9. package/lib/plugins/service-betterportal-auth-workos/bp-routes/.well-known/bp/config/workos-role-sync/roles/index.d.ts.map +1 -1
  10. package/lib/plugins/service-betterportal-auth-workos/bp-routes/.well-known/bp/config/workos-role-sync/roles/index.js +1 -1
  11. package/lib/plugins/service-betterportal-auth-workos/bp-routes/.well-known/bp/config/workos-role-sync/roles/index.js.map +1 -1
  12. package/lib/plugins/service-betterportal-auth-workos/index.js +1 -1
  13. package/lib/plugins/service-betterportal-auth-workos/index.js.map +1 -1
  14. package/lib/schemas/service-betterportal-auth-workos.json +2 -2
  15. package/lib/schemas/service-betterportal-auth-workos.plugin.json +2 -2
  16. package/package.json +15 -5
@@ -0,0 +1,942 @@
1
+ {
2
+ "manifest": {
3
+ "protocolVersion": 1,
4
+ "pluginId": "org.betterportal.auth.workos",
5
+ "title": "BetterPortal WorkOS",
6
+ "description": "WorkOS-backed auth service for BetterPortal apps.",
7
+ "version": "10.1.33",
8
+ "category": "service",
9
+ "deploymentModes": [
10
+ "self-hosted"
11
+ ],
12
+ "capabilities": [
13
+ "auth",
14
+ "auth.roles.sync",
15
+ "auth.roles.authority.provider",
16
+ "auth.roles.authority.betterportal",
17
+ "view.json",
18
+ "view.metadata",
19
+ "theme.bootstrap1",
20
+ "view.html",
21
+ "theme.embedded"
22
+ ],
23
+ "supportedThemes": [
24
+ "bootstrap1",
25
+ "embedded"
26
+ ],
27
+ "supportedRenderModes": [
28
+ "page",
29
+ "fragment"
30
+ ],
31
+ "views": [
32
+ {
33
+ "viewId": "workos-role-sync.index",
34
+ "title": "WorkOS Role Sync",
35
+ "description": "Synchronize BetterPortal permissions and roles with WorkOS.",
36
+ "path": "/.well-known/bp/config/workos-role-sync",
37
+ "methods": [
38
+ "GET"
39
+ ],
40
+ "paramsSchema": {},
41
+ "querySchema": {},
42
+ "headersSchema": {},
43
+ "bodySchema": {},
44
+ "jsonResponseSchema": {},
45
+ "metadataResponseSchema": {},
46
+ "renderable": false,
47
+ "raw": true,
48
+ "html": {
49
+ "themeRenderers": {}
50
+ },
51
+ "auth": {
52
+ "required": true,
53
+ "permissions": [
54
+ {
55
+ "serviceId": "org.betterportal.auth.workos",
56
+ "viewId": "workos-role-sync.index",
57
+ "permissions": [
58
+ "read"
59
+ ]
60
+ }
61
+ ]
62
+ },
63
+ "role": "auth.roles.sync",
64
+ "dependencies": [],
65
+ "apiContracts": [],
66
+ "demoScenarios": [],
67
+ "cacheHints": {
68
+ "ttlSeconds": 0,
69
+ "varyBy": []
70
+ }
71
+ },
72
+ {
73
+ "viewId": "workos-role-sync.permissions",
74
+ "title": "Sync WorkOS Permissions",
75
+ "description": "Synchronize BetterPortal permissions to WorkOS.",
76
+ "path": "/.well-known/bp/config/workos-role-sync/permissions",
77
+ "methods": [
78
+ "POST"
79
+ ],
80
+ "paramsSchema": {},
81
+ "querySchema": {},
82
+ "headersSchema": {},
83
+ "bodySchema": {},
84
+ "jsonResponseSchema": {},
85
+ "metadataResponseSchema": {},
86
+ "renderable": false,
87
+ "raw": true,
88
+ "html": {
89
+ "themeRenderers": {}
90
+ },
91
+ "auth": {
92
+ "required": true,
93
+ "permissions": [
94
+ {
95
+ "serviceId": "org.betterportal.auth.workos",
96
+ "viewId": "workos-role-sync.permissions",
97
+ "permissions": [
98
+ "create"
99
+ ]
100
+ }
101
+ ]
102
+ },
103
+ "role": "auth.roles.sync",
104
+ "dependencies": [],
105
+ "apiContracts": [],
106
+ "demoScenarios": [],
107
+ "cacheHints": {
108
+ "ttlSeconds": 0,
109
+ "varyBy": []
110
+ }
111
+ },
112
+ {
113
+ "viewId": "workos-role-sync.roles",
114
+ "title": "Sync WorkOS Roles",
115
+ "description": "Synchronize WorkOS roles into BetterPortal.",
116
+ "path": "/.well-known/bp/config/workos-role-sync/roles",
117
+ "methods": [
118
+ "POST"
119
+ ],
120
+ "paramsSchema": {},
121
+ "querySchema": {},
122
+ "headersSchema": {},
123
+ "bodySchema": {},
124
+ "jsonResponseSchema": {},
125
+ "metadataResponseSchema": {},
126
+ "renderable": false,
127
+ "raw": true,
128
+ "html": {
129
+ "themeRenderers": {}
130
+ },
131
+ "auth": {
132
+ "required": true,
133
+ "permissions": [
134
+ {
135
+ "serviceId": "org.betterportal.auth.workos",
136
+ "viewId": "workos-role-sync.roles",
137
+ "permissions": [
138
+ "update"
139
+ ]
140
+ }
141
+ ]
142
+ },
143
+ "role": "auth.roles.sync",
144
+ "dependencies": [],
145
+ "apiContracts": [],
146
+ "demoScenarios": [],
147
+ "cacheHints": {
148
+ "ttlSeconds": 0,
149
+ "varyBy": []
150
+ }
151
+ },
152
+ {
153
+ "viewId": "login.index",
154
+ "title": "WorkOS Login",
155
+ "description": "Authenticate with WorkOS AuthKit and store BetterPortal auth headers.",
156
+ "path": "/login",
157
+ "methods": [
158
+ "GET"
159
+ ],
160
+ "paramsSchema": {},
161
+ "querySchema": {
162
+ "anyvaliVersion": "1.0",
163
+ "schemaVersion": "1.1",
164
+ "root": {
165
+ "kind": "object",
166
+ "properties": {
167
+ "action": {
168
+ "kind": "optional",
169
+ "inner": {
170
+ "kind": "string"
171
+ }
172
+ },
173
+ "code": {
174
+ "kind": "optional",
175
+ "inner": {
176
+ "kind": "string"
177
+ }
178
+ },
179
+ "state": {
180
+ "kind": "optional",
181
+ "inner": {
182
+ "kind": "string"
183
+ }
184
+ },
185
+ "next": {
186
+ "kind": "optional",
187
+ "inner": {
188
+ "kind": "string"
189
+ }
190
+ },
191
+ "redirect": {
192
+ "kind": "optional",
193
+ "inner": {
194
+ "kind": "string"
195
+ }
196
+ },
197
+ "error": {
198
+ "kind": "optional",
199
+ "inner": {
200
+ "kind": "string"
201
+ }
202
+ },
203
+ "error_description": {
204
+ "kind": "optional",
205
+ "inner": {
206
+ "kind": "string"
207
+ }
208
+ }
209
+ },
210
+ "required": [],
211
+ "unknownKeys": "strip"
212
+ },
213
+ "definitions": {},
214
+ "extensions": {}
215
+ },
216
+ "headersSchema": {
217
+ "anyvaliVersion": "1.0",
218
+ "schemaVersion": "1.1",
219
+ "root": {
220
+ "kind": "object",
221
+ "properties": {},
222
+ "required": [],
223
+ "unknownKeys": "strip"
224
+ },
225
+ "definitions": {},
226
+ "extensions": {}
227
+ },
228
+ "bodySchema": {},
229
+ "jsonResponseSchema": {
230
+ "anyvaliVersion": "1.0",
231
+ "schemaVersion": "1.1",
232
+ "root": {
233
+ "kind": "object",
234
+ "properties": {
235
+ "status": {
236
+ "kind": "enum",
237
+ "values": [
238
+ "ok",
239
+ "error"
240
+ ]
241
+ },
242
+ "message": {
243
+ "kind": "optional",
244
+ "inner": {
245
+ "kind": "string"
246
+ }
247
+ },
248
+ "authorizationUrl": {
249
+ "kind": "optional",
250
+ "inner": {
251
+ "kind": "string"
252
+ }
253
+ },
254
+ "loginUI": {
255
+ "kind": "enum",
256
+ "values": [
257
+ "default",
258
+ "clean",
259
+ "redirect"
260
+ ],
261
+ "default": "default"
262
+ },
263
+ "alreadyLoggedIn": {
264
+ "kind": "optional",
265
+ "inner": {
266
+ "kind": "bool"
267
+ }
268
+ },
269
+ "loggedOut": {
270
+ "kind": "optional",
271
+ "inner": {
272
+ "kind": "bool"
273
+ }
274
+ },
275
+ "signedIn": {
276
+ "kind": "optional",
277
+ "inner": {
278
+ "kind": "bool"
279
+ }
280
+ },
281
+ "nextUrl": {
282
+ "kind": "optional",
283
+ "inner": {
284
+ "kind": "string"
285
+ }
286
+ },
287
+ "user": {
288
+ "kind": "optional",
289
+ "inner": {
290
+ "kind": "object",
291
+ "properties": {
292
+ "id": {
293
+ "kind": "optional",
294
+ "inner": {
295
+ "kind": "string"
296
+ }
297
+ },
298
+ "name": {
299
+ "kind": "optional",
300
+ "inner": {
301
+ "kind": "string"
302
+ }
303
+ },
304
+ "email": {
305
+ "kind": "optional",
306
+ "inner": {
307
+ "kind": "string"
308
+ }
309
+ },
310
+ "picture": {
311
+ "kind": "optional",
312
+ "inner": {
313
+ "kind": "string"
314
+ }
315
+ }
316
+ },
317
+ "required": [],
318
+ "unknownKeys": "strip"
319
+ }
320
+ }
321
+ },
322
+ "required": [
323
+ "status",
324
+ "loginUI"
325
+ ],
326
+ "unknownKeys": "strip"
327
+ },
328
+ "definitions": {},
329
+ "extensions": {}
330
+ },
331
+ "metadataResponseSchema": {},
332
+ "renderable": true,
333
+ "html": {
334
+ "themeRenderers": {
335
+ "bootstrap1": {
336
+ "defaultRenderer": "default",
337
+ "renderModes": [
338
+ "page",
339
+ "fragment"
340
+ ],
341
+ "slots": [
342
+ "main",
343
+ "background.monitor",
344
+ "nav.profile"
345
+ ],
346
+ "renderers": [
347
+ {
348
+ "id": "default",
349
+ "title": "Default Content",
350
+ "slotId": "main",
351
+ "renderModes": [
352
+ "page",
353
+ "fragment"
354
+ ]
355
+ },
356
+ {
357
+ "id": "background.monitor",
358
+ "title": "background.monitor",
359
+ "slotId": "background.monitor",
360
+ "renderModes": [
361
+ "fragment"
362
+ ]
363
+ },
364
+ {
365
+ "id": "nav.profile",
366
+ "title": "nav.profile",
367
+ "slotId": "nav.profile",
368
+ "renderModes": [
369
+ "fragment"
370
+ ]
371
+ }
372
+ ]
373
+ },
374
+ "embedded": {
375
+ "defaultRenderer": "default",
376
+ "renderModes": [
377
+ "fragment"
378
+ ],
379
+ "slots": [
380
+ "background.monitor"
381
+ ],
382
+ "renderers": [
383
+ {
384
+ "id": "background.monitor",
385
+ "title": "background.monitor",
386
+ "slotId": "background.monitor",
387
+ "renderModes": [
388
+ "fragment"
389
+ ]
390
+ }
391
+ ]
392
+ }
393
+ }
394
+ },
395
+ "auth": {
396
+ "required": false,
397
+ "permissions": []
398
+ },
399
+ "role": "auth.login",
400
+ "dependencies": [
401
+ "logout.index",
402
+ "refresh.index"
403
+ ],
404
+ "chrome": {
405
+ "fullScreen": true
406
+ },
407
+ "apiContracts": [],
408
+ "demoScenarios": [],
409
+ "cacheHints": {
410
+ "ttlSeconds": 0,
411
+ "varyBy": []
412
+ }
413
+ },
414
+ {
415
+ "viewId": "logout.index",
416
+ "title": "WorkOS Logout",
417
+ "description": "Clear the stored WorkOS bearer token.",
418
+ "path": "/logout",
419
+ "methods": [
420
+ "GET"
421
+ ],
422
+ "paramsSchema": {},
423
+ "querySchema": {
424
+ "anyvaliVersion": "1.0",
425
+ "schemaVersion": "1.1",
426
+ "root": {
427
+ "kind": "object",
428
+ "properties": {
429
+ "next": {
430
+ "kind": "optional",
431
+ "inner": {
432
+ "kind": "string"
433
+ }
434
+ },
435
+ "redirect": {
436
+ "kind": "optional",
437
+ "inner": {
438
+ "kind": "string"
439
+ }
440
+ }
441
+ },
442
+ "required": [],
443
+ "unknownKeys": "strip"
444
+ },
445
+ "definitions": {},
446
+ "extensions": {}
447
+ },
448
+ "headersSchema": {},
449
+ "bodySchema": {},
450
+ "jsonResponseSchema": {
451
+ "anyvaliVersion": "1.0",
452
+ "schemaVersion": "1.1",
453
+ "root": {
454
+ "kind": "object",
455
+ "properties": {
456
+ "status": {
457
+ "kind": "enum",
458
+ "values": [
459
+ "ok"
460
+ ]
461
+ },
462
+ "message": {
463
+ "kind": "string"
464
+ },
465
+ "nextUrl": {
466
+ "kind": "string"
467
+ }
468
+ },
469
+ "required": [
470
+ "status",
471
+ "message",
472
+ "nextUrl"
473
+ ],
474
+ "unknownKeys": "strip"
475
+ },
476
+ "definitions": {},
477
+ "extensions": {}
478
+ },
479
+ "metadataResponseSchema": {},
480
+ "renderable": false,
481
+ "html": {
482
+ "themeRenderers": {}
483
+ },
484
+ "auth": {
485
+ "required": false,
486
+ "permissions": []
487
+ },
488
+ "role": "auth.logout",
489
+ "dependencies": [],
490
+ "apiContracts": [],
491
+ "demoScenarios": [],
492
+ "cacheHints": {
493
+ "ttlSeconds": 0,
494
+ "varyBy": []
495
+ }
496
+ },
497
+ {
498
+ "viewId": "refresh.index",
499
+ "title": "WorkOS Refresh",
500
+ "description": "Refresh BetterPortal tokens using a WorkOS-backed BP refresh token.",
501
+ "path": "/refresh",
502
+ "methods": [
503
+ "POST"
504
+ ],
505
+ "paramsSchema": {},
506
+ "querySchema": {},
507
+ "headersSchema": {},
508
+ "bodySchema": {
509
+ "anyvaliVersion": "1.0",
510
+ "schemaVersion": "1.1",
511
+ "root": {
512
+ "kind": "object",
513
+ "properties": {
514
+ "refreshToken": {
515
+ "kind": "optional",
516
+ "inner": {
517
+ "kind": "string",
518
+ "minLength": 1
519
+ }
520
+ }
521
+ },
522
+ "required": [],
523
+ "unknownKeys": "strip"
524
+ },
525
+ "definitions": {},
526
+ "extensions": {}
527
+ },
528
+ "jsonResponseSchema": {
529
+ "anyvaliVersion": "1.0",
530
+ "schemaVersion": "1.1",
531
+ "root": {
532
+ "kind": "object",
533
+ "properties": {
534
+ "status": {
535
+ "kind": "enum",
536
+ "values": [
537
+ "ok",
538
+ "error"
539
+ ]
540
+ },
541
+ "message": {
542
+ "kind": "optional",
543
+ "inner": {
544
+ "kind": "string"
545
+ }
546
+ },
547
+ "accessToken": {
548
+ "kind": "optional",
549
+ "inner": {
550
+ "kind": "string"
551
+ }
552
+ },
553
+ "expiresInSeconds": {
554
+ "kind": "optional",
555
+ "inner": {
556
+ "kind": "int",
557
+ "min": 1
558
+ }
559
+ }
560
+ },
561
+ "required": [
562
+ "status"
563
+ ],
564
+ "unknownKeys": "strip"
565
+ },
566
+ "definitions": {},
567
+ "extensions": {}
568
+ },
569
+ "metadataResponseSchema": {},
570
+ "renderable": false,
571
+ "html": {
572
+ "themeRenderers": {}
573
+ },
574
+ "auth": {
575
+ "required": false,
576
+ "permissions": []
577
+ },
578
+ "role": "auth.refresh",
579
+ "dependencies": [],
580
+ "apiContracts": [],
581
+ "demoScenarios": [],
582
+ "cacheHints": {
583
+ "ttlSeconds": 0,
584
+ "varyBy": []
585
+ }
586
+ }
587
+ ],
588
+ "configSchemas": [
589
+ {
590
+ "id": "workos.app",
591
+ "title": "WorkOS App Config",
592
+ "description": "App-scoped WorkOS AuthKit settings.",
593
+ "scope": "app",
594
+ "jsonSchema": {
595
+ "clientId": "string",
596
+ "apiKey": "string",
597
+ "provider": "string",
598
+ "connectionId": "string",
599
+ "organizationId": "string",
600
+ "domainHint": "string",
601
+ "scopes": "string",
602
+ "loginUI": "string",
603
+ "loginRedirectPath": "string",
604
+ "logoutRedirectPath": "string",
605
+ "roleClaimPath": "string",
606
+ "webhookSecret": "string"
607
+ },
608
+ "groups": [
609
+ {
610
+ "id": "connection",
611
+ "title": "Connection",
612
+ "description": "WorkOS AuthKit application credentials.",
613
+ "order": 10,
614
+ "optional": false
615
+ },
616
+ {
617
+ "id": "login",
618
+ "title": "Login",
619
+ "description": "Provider routing and post-login routes.",
620
+ "order": 20,
621
+ "optional": true
622
+ },
623
+ {
624
+ "id": "claims",
625
+ "title": "Claims",
626
+ "description": "WorkOS access-token claim paths mapped into BP roles.",
627
+ "order": 30,
628
+ "optional": true
629
+ },
630
+ {
631
+ "id": "sync",
632
+ "title": "Role Sync",
633
+ "description": "WorkOS webhook + BP role sync settings.",
634
+ "order": 40,
635
+ "optional": true
636
+ }
637
+ ],
638
+ "fields": [
639
+ {
640
+ "key": "clientId",
641
+ "title": "Client ID",
642
+ "description": "WorkOS client ID for this BP app.",
643
+ "scope": "app",
644
+ "visibility": "protected",
645
+ "ownership": "bp",
646
+ "sourceOfTruth": "bp",
647
+ "groupId": "connection",
648
+ "order": 10,
649
+ "required": true
650
+ },
651
+ {
652
+ "key": "apiKey",
653
+ "title": "API Key",
654
+ "description": "WorkOS API key used server-side for code exchange and refresh.",
655
+ "scope": "app",
656
+ "visibility": "secret",
657
+ "ownership": "bp",
658
+ "sourceOfTruth": "bp",
659
+ "groupId": "connection",
660
+ "order": 20,
661
+ "required": true
662
+ },
663
+ {
664
+ "key": "provider",
665
+ "title": "Provider",
666
+ "description": "WorkOS provider, usually authkit.",
667
+ "scope": "app",
668
+ "visibility": "protected",
669
+ "ownership": "bp",
670
+ "sourceOfTruth": "bp",
671
+ "groupId": "login",
672
+ "order": 10,
673
+ "defaultValue": "authkit",
674
+ "required": false
675
+ },
676
+ {
677
+ "key": "connectionId",
678
+ "title": "Connection ID",
679
+ "description": "Optional WorkOS connection to force.",
680
+ "scope": "app",
681
+ "visibility": "protected",
682
+ "ownership": "bp",
683
+ "sourceOfTruth": "bp",
684
+ "groupId": "login",
685
+ "order": 20,
686
+ "required": false
687
+ },
688
+ {
689
+ "key": "organizationId",
690
+ "title": "Organization ID",
691
+ "description": "Optional WorkOS organization to force.",
692
+ "scope": "app",
693
+ "visibility": "protected",
694
+ "ownership": "bp",
695
+ "sourceOfTruth": "bp",
696
+ "groupId": "login",
697
+ "order": 30,
698
+ "required": false
699
+ },
700
+ {
701
+ "key": "domainHint",
702
+ "title": "Domain Hint",
703
+ "description": "Optional WorkOS domain hint.",
704
+ "scope": "app",
705
+ "visibility": "protected",
706
+ "ownership": "bp",
707
+ "sourceOfTruth": "bp",
708
+ "groupId": "login",
709
+ "order": 40,
710
+ "required": false
711
+ },
712
+ {
713
+ "key": "scopes",
714
+ "title": "Scopes",
715
+ "description": "Space-separated provider scopes.",
716
+ "scope": "app",
717
+ "visibility": "protected",
718
+ "ownership": "bp",
719
+ "sourceOfTruth": "bp",
720
+ "groupId": "login",
721
+ "order": 50,
722
+ "defaultValue": "openid profile email",
723
+ "required": false
724
+ },
725
+ {
726
+ "key": "loginUI",
727
+ "title": "Login UI",
728
+ "description": "Default provider UI, clean button UI, or clean UI with automatic redirect.",
729
+ "scope": "app",
730
+ "visibility": "protected",
731
+ "ownership": "bp",
732
+ "sourceOfTruth": "bp",
733
+ "groupId": "login",
734
+ "order": 60,
735
+ "defaultValue": "default",
736
+ "ui": {
737
+ "control": "select",
738
+ "options": [
739
+ {
740
+ "value": "default",
741
+ "label": "Default"
742
+ },
743
+ {
744
+ "value": "clean",
745
+ "label": "Clean"
746
+ },
747
+ {
748
+ "value": "redirect",
749
+ "label": "Redirect"
750
+ }
751
+ ]
752
+ },
753
+ "required": false
754
+ },
755
+ {
756
+ "key": "loginRedirectPath",
757
+ "title": "Logged In Route",
758
+ "description": "Tenant route shown after signing in when no next path is supplied.",
759
+ "scope": "app",
760
+ "visibility": "protected",
761
+ "ownership": "bp",
762
+ "sourceOfTruth": "bp",
763
+ "groupId": "login",
764
+ "order": 70,
765
+ "defaultValue": "/",
766
+ "ui": {
767
+ "control": "select",
768
+ "optionsSource": "app.routes"
769
+ },
770
+ "required": false
771
+ },
772
+ {
773
+ "key": "logoutRedirectPath",
774
+ "title": "Logged Out Route",
775
+ "description": "Tenant route shown after signing out.",
776
+ "scope": "app",
777
+ "visibility": "protected",
778
+ "ownership": "bp",
779
+ "sourceOfTruth": "bp",
780
+ "groupId": "login",
781
+ "order": 80,
782
+ "defaultValue": "/",
783
+ "ui": {
784
+ "control": "select",
785
+ "optionsSource": "app.routes"
786
+ },
787
+ "required": false
788
+ },
789
+ {
790
+ "key": "roleClaimPath",
791
+ "title": "Role Claim Path",
792
+ "description": "Dot path to roles in the WorkOS access token.",
793
+ "scope": "app",
794
+ "visibility": "protected",
795
+ "ownership": "bp",
796
+ "sourceOfTruth": "bp",
797
+ "groupId": "claims",
798
+ "order": 10,
799
+ "defaultValue": "roles",
800
+ "required": false
801
+ },
802
+ {
803
+ "key": "webhookSecret",
804
+ "title": "Webhook Secret",
805
+ "description": "WorkOS webhook signing secret for role sync events.",
806
+ "scope": "app",
807
+ "visibility": "secret",
808
+ "ownership": "bp",
809
+ "sourceOfTruth": "bp",
810
+ "groupId": "sync",
811
+ "order": 10,
812
+ "required": false
813
+ }
814
+ ]
815
+ }
816
+ ],
817
+ "permissions": [],
818
+ "adminApis": [
819
+ {
820
+ "id": "config.schema",
821
+ "title": "Config Schema",
822
+ "description": "BetterPortal-managed config schemas for this service.",
823
+ "path": "/.well-known/bp/config/schema",
824
+ "methods": [
825
+ "GET"
826
+ ],
827
+ "supportsCustomUi": false
828
+ },
829
+ {
830
+ "id": "config.values",
831
+ "title": "Config Values",
832
+ "description": "Read and write BetterPortal-managed config values.",
833
+ "path": "/.well-known/bp/config",
834
+ "methods": [
835
+ "GET",
836
+ "POST"
837
+ ],
838
+ "supportsCustomUi": false
839
+ }
840
+ ],
841
+ "webhooks": [],
842
+ "apiContracts": [],
843
+ "m2mRequests": [],
844
+ "developerResources": [],
845
+ "cacheHints": {
846
+ "metadataTtlSeconds": 1800
847
+ }
848
+ },
849
+ "routes": [
850
+ {
851
+ "viewId": "workos-role-sync.index",
852
+ "path": "/.well-known/bp/config/workos-role-sync",
853
+ "methods": [
854
+ "GET"
855
+ ],
856
+ "paramNames": [],
857
+ "themes": [],
858
+ "hasFragments": false,
859
+ "fragments": [],
860
+ "components": []
861
+ },
862
+ {
863
+ "viewId": "workos-role-sync.permissions",
864
+ "path": "/.well-known/bp/config/workos-role-sync/permissions",
865
+ "methods": [
866
+ "POST"
867
+ ],
868
+ "paramNames": [],
869
+ "themes": [],
870
+ "hasFragments": false,
871
+ "fragments": [],
872
+ "components": []
873
+ },
874
+ {
875
+ "viewId": "workos-role-sync.roles",
876
+ "path": "/.well-known/bp/config/workos-role-sync/roles",
877
+ "methods": [
878
+ "POST"
879
+ ],
880
+ "paramNames": [],
881
+ "themes": [],
882
+ "hasFragments": false,
883
+ "fragments": [],
884
+ "components": []
885
+ },
886
+ {
887
+ "viewId": "login.index",
888
+ "path": "/login",
889
+ "methods": [
890
+ "GET"
891
+ ],
892
+ "paramNames": [],
893
+ "themes": [
894
+ "bootstrap1",
895
+ "embedded"
896
+ ],
897
+ "hasFragments": true,
898
+ "fragments": [
899
+ {
900
+ "fragmentLocation": "background",
901
+ "fragmentId": "monitor",
902
+ "themes": [
903
+ "bootstrap1",
904
+ "embedded"
905
+ ]
906
+ },
907
+ {
908
+ "fragmentLocation": "nav",
909
+ "fragmentId": "profile",
910
+ "themes": [
911
+ "bootstrap1"
912
+ ]
913
+ }
914
+ ],
915
+ "components": []
916
+ },
917
+ {
918
+ "viewId": "logout.index",
919
+ "path": "/logout",
920
+ "methods": [
921
+ "GET"
922
+ ],
923
+ "paramNames": [],
924
+ "themes": [],
925
+ "hasFragments": false,
926
+ "fragments": [],
927
+ "components": []
928
+ },
929
+ {
930
+ "viewId": "refresh.index",
931
+ "path": "/refresh",
932
+ "methods": [
933
+ "POST"
934
+ ],
935
+ "paramNames": [],
936
+ "themes": [],
937
+ "hasFragments": false,
938
+ "fragments": [],
939
+ "components": []
940
+ }
941
+ ]
942
+ }