@bongos/core 1.21.136 → 1.21.137
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/.bongos-core.json +42 -27
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +12 -0
- package/clients/bongos-client/index.cjs +12 -0
- package/clients/bongos-client/index.d.ts +20 -0
- package/clients/bongos-client/index.mjs +12 -0
- package/docs/api/openapi.json +349 -3
- package/docs/api-reference.md +8 -2
- package/docs/copy-inventory.md +67 -51
- package/docs/copy-registry.json +199 -55
- package/docs/module-api-changelog.md +2 -0
- package/docs/page-inventory.json +1 -0
- package/docs/page-readings.json +154 -149
- package/modules/hall-ui/public/settings-passkeys.js +113 -0
- package/modules/hall-ui/public/settings.html +20 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +6 -0
- package/src/bongos/passkeys.js +11 -1
- package/src/bongos/routes/my-passkeys.js +249 -0
- package/src/bongos/routes.js +2 -0
- package/src/module-api.js +1 -1
- package/tests/my_passkeys.mjs +108 -0
- package/tests/own_scope_guard.mjs +5 -0
package/docs/api/openapi.json
CHANGED
|
@@ -13779,6 +13779,272 @@
|
|
|
13779
13779
|
]
|
|
13780
13780
|
}
|
|
13781
13781
|
},
|
|
13782
|
+
"/me/passkeys": {
|
|
13783
|
+
"get": {
|
|
13784
|
+
"operationId": "get_me_passkeys",
|
|
13785
|
+
"tags": [
|
|
13786
|
+
"me"
|
|
13787
|
+
],
|
|
13788
|
+
"summary": "GET /me/passkeys",
|
|
13789
|
+
"description": "GET /api/bongos/me/passkeys — the caller's registered cards. rank: any-builder (own identity only).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
13790
|
+
"x-rank": "any-builder",
|
|
13791
|
+
"x-source": "src/bongos/routes/my-passkeys.js",
|
|
13792
|
+
"responses": {
|
|
13793
|
+
"200": {
|
|
13794
|
+
"description": "Success.",
|
|
13795
|
+
"content": {
|
|
13796
|
+
"application/json": {
|
|
13797
|
+
"schema": {
|
|
13798
|
+
"$ref": "#/components/schemas/GetMePasskeysResponse"
|
|
13799
|
+
}
|
|
13800
|
+
}
|
|
13801
|
+
}
|
|
13802
|
+
},
|
|
13803
|
+
"400": {
|
|
13804
|
+
"$ref": "#/components/responses/BadRequest"
|
|
13805
|
+
},
|
|
13806
|
+
"401": {
|
|
13807
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
13808
|
+
},
|
|
13809
|
+
"403": {
|
|
13810
|
+
"$ref": "#/components/responses/Forbidden"
|
|
13811
|
+
}
|
|
13812
|
+
},
|
|
13813
|
+
"security": [
|
|
13814
|
+
{
|
|
13815
|
+
"builderSession": []
|
|
13816
|
+
}
|
|
13817
|
+
]
|
|
13818
|
+
}
|
|
13819
|
+
},
|
|
13820
|
+
"/me/passkeys/browser.js": {
|
|
13821
|
+
"get": {
|
|
13822
|
+
"operationId": "get_me_passkeys_browser_js",
|
|
13823
|
+
"tags": [
|
|
13824
|
+
"me"
|
|
13825
|
+
],
|
|
13826
|
+
"summary": "GET /me/passkeys/browser.js",
|
|
13827
|
+
"description": "GET /api/bongos/me/passkeys/browser.js — the vetted @simplewebauthn/browser bundle, served same-origin so the page needs no CDN and no build step. rank: any-builder (own identity only) — a vendored static file at a fixed path, served only to a signed-in builder like the rest of /me.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
13828
|
+
"x-rank": "any-builder",
|
|
13829
|
+
"x-source": "src/bongos/routes/my-passkeys.js",
|
|
13830
|
+
"responses": {
|
|
13831
|
+
"200": {
|
|
13832
|
+
"description": "Success."
|
|
13833
|
+
},
|
|
13834
|
+
"400": {
|
|
13835
|
+
"$ref": "#/components/responses/BadRequest"
|
|
13836
|
+
},
|
|
13837
|
+
"401": {
|
|
13838
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
13839
|
+
},
|
|
13840
|
+
"403": {
|
|
13841
|
+
"$ref": "#/components/responses/Forbidden"
|
|
13842
|
+
}
|
|
13843
|
+
},
|
|
13844
|
+
"security": [
|
|
13845
|
+
{
|
|
13846
|
+
"builderSession": []
|
|
13847
|
+
}
|
|
13848
|
+
]
|
|
13849
|
+
}
|
|
13850
|
+
},
|
|
13851
|
+
"/me/passkeys/register/options": {
|
|
13852
|
+
"post": {
|
|
13853
|
+
"operationId": "post_me_passkeys_register_options",
|
|
13854
|
+
"tags": [
|
|
13855
|
+
"me"
|
|
13856
|
+
],
|
|
13857
|
+
"summary": "POST /me/passkeys/register/options",
|
|
13858
|
+
"description": "POST /api/bongos/me/passkeys/register/options — start adding a card. rank: any-builder (own identity only).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
13859
|
+
"x-rank": "any-builder",
|
|
13860
|
+
"x-source": "src/bongos/routes/my-passkeys.js",
|
|
13861
|
+
"requestBody": {
|
|
13862
|
+
"required": false,
|
|
13863
|
+
"content": {
|
|
13864
|
+
"application/json": {
|
|
13865
|
+
"schema": {
|
|
13866
|
+
"type": "object",
|
|
13867
|
+
"additionalProperties": true
|
|
13868
|
+
}
|
|
13869
|
+
}
|
|
13870
|
+
},
|
|
13871
|
+
"x-validated": true
|
|
13872
|
+
},
|
|
13873
|
+
"responses": {
|
|
13874
|
+
"200": {
|
|
13875
|
+
"description": "Success.",
|
|
13876
|
+
"content": {
|
|
13877
|
+
"application/json": {
|
|
13878
|
+
"schema": {
|
|
13879
|
+
"$ref": "#/components/schemas/PostMePasskeysRegisterOptionsResponse"
|
|
13880
|
+
}
|
|
13881
|
+
}
|
|
13882
|
+
}
|
|
13883
|
+
},
|
|
13884
|
+
"400": {
|
|
13885
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
13886
|
+
},
|
|
13887
|
+
"401": {
|
|
13888
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
13889
|
+
},
|
|
13890
|
+
"403": {
|
|
13891
|
+
"$ref": "#/components/responses/Forbidden"
|
|
13892
|
+
}
|
|
13893
|
+
},
|
|
13894
|
+
"security": [
|
|
13895
|
+
{
|
|
13896
|
+
"builderSession": []
|
|
13897
|
+
}
|
|
13898
|
+
]
|
|
13899
|
+
}
|
|
13900
|
+
},
|
|
13901
|
+
"/me/passkeys/register/verify": {
|
|
13902
|
+
"post": {
|
|
13903
|
+
"operationId": "post_me_passkeys_register_verify",
|
|
13904
|
+
"tags": [
|
|
13905
|
+
"me"
|
|
13906
|
+
],
|
|
13907
|
+
"summary": "POST /me/passkeys/register/verify",
|
|
13908
|
+
"description": "POST /api/bongos/me/passkeys/register/verify — finish adding a card. Body: { response, nickname? } where response is the browser's attestation. rank: any-builder (own identity only).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
13909
|
+
"x-rank": "any-builder",
|
|
13910
|
+
"x-source": "src/bongos/routes/my-passkeys.js",
|
|
13911
|
+
"requestBody": {
|
|
13912
|
+
"required": false,
|
|
13913
|
+
"content": {
|
|
13914
|
+
"application/json": {
|
|
13915
|
+
"schema": {
|
|
13916
|
+
"$ref": "#/components/schemas/PostMePasskeysRegisterVerifyRequest"
|
|
13917
|
+
}
|
|
13918
|
+
}
|
|
13919
|
+
},
|
|
13920
|
+
"x-validated": true
|
|
13921
|
+
},
|
|
13922
|
+
"responses": {
|
|
13923
|
+
"200": {
|
|
13924
|
+
"description": "Success.",
|
|
13925
|
+
"content": {
|
|
13926
|
+
"application/json": {
|
|
13927
|
+
"schema": {
|
|
13928
|
+
"$ref": "#/components/schemas/PostMePasskeysRegisterVerifyResponse"
|
|
13929
|
+
}
|
|
13930
|
+
}
|
|
13931
|
+
}
|
|
13932
|
+
},
|
|
13933
|
+
"400": {
|
|
13934
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
13935
|
+
},
|
|
13936
|
+
"401": {
|
|
13937
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
13938
|
+
},
|
|
13939
|
+
"403": {
|
|
13940
|
+
"$ref": "#/components/responses/Forbidden"
|
|
13941
|
+
}
|
|
13942
|
+
},
|
|
13943
|
+
"security": [
|
|
13944
|
+
{
|
|
13945
|
+
"builderSession": []
|
|
13946
|
+
}
|
|
13947
|
+
]
|
|
13948
|
+
}
|
|
13949
|
+
},
|
|
13950
|
+
"/me/passkeys/remove": {
|
|
13951
|
+
"post": {
|
|
13952
|
+
"operationId": "post_me_passkeys_remove",
|
|
13953
|
+
"tags": [
|
|
13954
|
+
"me"
|
|
13955
|
+
],
|
|
13956
|
+
"summary": "POST /me/passkeys/remove",
|
|
13957
|
+
"description": "POST /api/bongos/me/passkeys/remove — Body: { credential_id }. rank: any-builder (own identity only) — the WHERE clause is the boundary.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
13958
|
+
"x-rank": "any-builder",
|
|
13959
|
+
"x-source": "src/bongos/routes/my-passkeys.js",
|
|
13960
|
+
"requestBody": {
|
|
13961
|
+
"required": false,
|
|
13962
|
+
"content": {
|
|
13963
|
+
"application/json": {
|
|
13964
|
+
"schema": {
|
|
13965
|
+
"$ref": "#/components/schemas/PostMePasskeysRemoveRequest"
|
|
13966
|
+
}
|
|
13967
|
+
}
|
|
13968
|
+
},
|
|
13969
|
+
"x-validated": true
|
|
13970
|
+
},
|
|
13971
|
+
"responses": {
|
|
13972
|
+
"200": {
|
|
13973
|
+
"description": "Success.",
|
|
13974
|
+
"content": {
|
|
13975
|
+
"application/json": {
|
|
13976
|
+
"schema": {
|
|
13977
|
+
"$ref": "#/components/schemas/PostMePasskeysRemoveResponse"
|
|
13978
|
+
}
|
|
13979
|
+
}
|
|
13980
|
+
}
|
|
13981
|
+
},
|
|
13982
|
+
"400": {
|
|
13983
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
13984
|
+
},
|
|
13985
|
+
"401": {
|
|
13986
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
13987
|
+
},
|
|
13988
|
+
"403": {
|
|
13989
|
+
"$ref": "#/components/responses/Forbidden"
|
|
13990
|
+
}
|
|
13991
|
+
},
|
|
13992
|
+
"security": [
|
|
13993
|
+
{
|
|
13994
|
+
"builderSession": []
|
|
13995
|
+
}
|
|
13996
|
+
]
|
|
13997
|
+
}
|
|
13998
|
+
},
|
|
13999
|
+
"/me/passkeys/rename": {
|
|
14000
|
+
"post": {
|
|
14001
|
+
"operationId": "post_me_passkeys_rename",
|
|
14002
|
+
"tags": [
|
|
14003
|
+
"me"
|
|
14004
|
+
],
|
|
14005
|
+
"summary": "POST /me/passkeys/rename",
|
|
14006
|
+
"description": "POST /api/bongos/me/passkeys/rename — Body: { credential_id, nickname }. rank: any-builder (own identity only) — the WHERE clause is the boundary.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
14007
|
+
"x-rank": "any-builder",
|
|
14008
|
+
"x-source": "src/bongos/routes/my-passkeys.js",
|
|
14009
|
+
"requestBody": {
|
|
14010
|
+
"required": false,
|
|
14011
|
+
"content": {
|
|
14012
|
+
"application/json": {
|
|
14013
|
+
"schema": {
|
|
14014
|
+
"$ref": "#/components/schemas/PostMePasskeysRenameRequest"
|
|
14015
|
+
}
|
|
14016
|
+
}
|
|
14017
|
+
},
|
|
14018
|
+
"x-validated": true
|
|
14019
|
+
},
|
|
14020
|
+
"responses": {
|
|
14021
|
+
"200": {
|
|
14022
|
+
"description": "Success.",
|
|
14023
|
+
"content": {
|
|
14024
|
+
"application/json": {
|
|
14025
|
+
"schema": {
|
|
14026
|
+
"$ref": "#/components/schemas/PostMePasskeysRenameResponse"
|
|
14027
|
+
}
|
|
14028
|
+
}
|
|
14029
|
+
}
|
|
14030
|
+
},
|
|
14031
|
+
"400": {
|
|
14032
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
14033
|
+
},
|
|
14034
|
+
"401": {
|
|
14035
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
14036
|
+
},
|
|
14037
|
+
"403": {
|
|
14038
|
+
"$ref": "#/components/responses/Forbidden"
|
|
14039
|
+
}
|
|
14040
|
+
},
|
|
14041
|
+
"security": [
|
|
14042
|
+
{
|
|
14043
|
+
"builderSession": []
|
|
14044
|
+
}
|
|
14045
|
+
]
|
|
14046
|
+
}
|
|
14047
|
+
},
|
|
13782
14048
|
"/me/profile": {
|
|
13783
14049
|
"patch": {
|
|
13784
14050
|
"operationId": "patch_me_profile",
|
|
@@ -27433,6 +27699,15 @@
|
|
|
27433
27699
|
"count"
|
|
27434
27700
|
]
|
|
27435
27701
|
},
|
|
27702
|
+
"GetMePasskeysResponse": {
|
|
27703
|
+
"type": "object",
|
|
27704
|
+
"properties": {
|
|
27705
|
+
"passkeys": {}
|
|
27706
|
+
},
|
|
27707
|
+
"required": [
|
|
27708
|
+
"passkeys"
|
|
27709
|
+
]
|
|
27710
|
+
},
|
|
27436
27711
|
"GetMeRecentShipsResponse": {
|
|
27437
27712
|
"type": "object",
|
|
27438
27713
|
"properties": {
|
|
@@ -32548,6 +32823,77 @@
|
|
|
32548
32823
|
},
|
|
32549
32824
|
"additionalProperties": false
|
|
32550
32825
|
},
|
|
32826
|
+
"PostMePasskeysRegisterOptionsResponse": {
|
|
32827
|
+
"type": "object",
|
|
32828
|
+
"properties": {
|
|
32829
|
+
"options": {}
|
|
32830
|
+
},
|
|
32831
|
+
"required": [
|
|
32832
|
+
"options"
|
|
32833
|
+
]
|
|
32834
|
+
},
|
|
32835
|
+
"PostMePasskeysRegisterVerifyRequest": {
|
|
32836
|
+
"type": "object",
|
|
32837
|
+
"properties": {
|
|
32838
|
+
"response": {},
|
|
32839
|
+
"nickname": {}
|
|
32840
|
+
},
|
|
32841
|
+
"additionalProperties": false
|
|
32842
|
+
},
|
|
32843
|
+
"PostMePasskeysRegisterVerifyResponse": {
|
|
32844
|
+
"type": "object",
|
|
32845
|
+
"properties": {
|
|
32846
|
+
"ok": {
|
|
32847
|
+
"type": "boolean"
|
|
32848
|
+
},
|
|
32849
|
+
"credential_id": {}
|
|
32850
|
+
},
|
|
32851
|
+
"required": [
|
|
32852
|
+
"ok",
|
|
32853
|
+
"credential_id"
|
|
32854
|
+
]
|
|
32855
|
+
},
|
|
32856
|
+
"PostMePasskeysRemoveRequest": {
|
|
32857
|
+
"type": "object",
|
|
32858
|
+
"properties": {
|
|
32859
|
+
"credential_id": {
|
|
32860
|
+
"$ref": "#/components/schemas/StringifiableId"
|
|
32861
|
+
}
|
|
32862
|
+
},
|
|
32863
|
+
"additionalProperties": false
|
|
32864
|
+
},
|
|
32865
|
+
"PostMePasskeysRemoveResponse": {
|
|
32866
|
+
"type": "object",
|
|
32867
|
+
"properties": {
|
|
32868
|
+
"ok": {
|
|
32869
|
+
"type": "boolean"
|
|
32870
|
+
}
|
|
32871
|
+
},
|
|
32872
|
+
"required": [
|
|
32873
|
+
"ok"
|
|
32874
|
+
]
|
|
32875
|
+
},
|
|
32876
|
+
"PostMePasskeysRenameRequest": {
|
|
32877
|
+
"type": "object",
|
|
32878
|
+
"properties": {
|
|
32879
|
+
"credential_id": {
|
|
32880
|
+
"$ref": "#/components/schemas/StringifiableId"
|
|
32881
|
+
},
|
|
32882
|
+
"nickname": {}
|
|
32883
|
+
},
|
|
32884
|
+
"additionalProperties": false
|
|
32885
|
+
},
|
|
32886
|
+
"PostMePasskeysRenameResponse": {
|
|
32887
|
+
"type": "object",
|
|
32888
|
+
"properties": {
|
|
32889
|
+
"ok": {
|
|
32890
|
+
"type": "boolean"
|
|
32891
|
+
}
|
|
32892
|
+
},
|
|
32893
|
+
"required": [
|
|
32894
|
+
"ok"
|
|
32895
|
+
]
|
|
32896
|
+
},
|
|
32551
32897
|
"PostMeSessionsRevokeAllResponse": {
|
|
32552
32898
|
"type": "object",
|
|
32553
32899
|
"properties": {
|
|
@@ -35614,9 +35960,9 @@
|
|
|
35614
35960
|
"description": "A required dependency/feature is not configured or is temporarily down."
|
|
35615
35961
|
}
|
|
35616
35962
|
},
|
|
35617
|
-
"x-endpoint-count":
|
|
35618
|
-
"x-schema-count":
|
|
35963
|
+
"x-endpoint-count": 564,
|
|
35964
|
+
"x-schema-count": 602,
|
|
35619
35965
|
"x-undocumented-bodies": 12,
|
|
35620
|
-
"x-response-schemas":
|
|
35966
|
+
"x-response-schemas": 395,
|
|
35621
35967
|
"x-generated-by": "scripts/gds/gen-api-docs.js"
|
|
35622
35968
|
}
|
package/docs/api-reference.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# Bongos API reference
|
|
4
4
|
|
|
5
|
-
> **Generated from the live route files** — the route file is authoritative.
|
|
5
|
+
> **Generated from the live route files** — the route file is authoritative. 564 endpoints across 96 route files.
|
|
6
6
|
> Machine-readable spec: [`docs/api/openapi.json`](api/openapi.json) (OpenAPI 3.1). Rendered docs site: **`/docs`** (e.g. `cloudbongos.com/docs`).
|
|
7
7
|
|
|
8
8
|
Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust-boundary-server-enforced-permissions.md)): `public` < `any-builder` < `metic+archon` < `archon`.
|
|
@@ -489,7 +489,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
|
|
|
489
489
|
| POST | `/api/bongos/llm-cache/lookup` | `metic+archon` | `cache_key`, `tokens_saved_est` | POST /llm-cache/lookup — hit/miss + atomic hit_count bump. |
|
|
490
490
|
| POST | `/api/bongos/llm-cache/store` | `metic+archon` | `spec`, `result_stdout`, `result_cost_usd` | POST /llm-cache/store — upsert a freshly-produced result. |
|
|
491
491
|
|
|
492
|
-
## `me` (
|
|
492
|
+
## `me` (48)
|
|
493
493
|
|
|
494
494
|
| Method | Path | Rank | Body | Description |
|
|
495
495
|
|---|---|---|---|---|
|
|
@@ -519,6 +519,12 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
|
|
|
519
519
|
| PATCH | `/api/bongos/me/interaction` | `any-builder` | _undocumented_ | PATCH the interaction profile. |
|
|
520
520
|
| GET | `/api/bongos/me/model-allocation` | `any-builder` | — | |
|
|
521
521
|
| PATCH | `/api/bongos/me/model-allocation` | `any-builder` | _undocumented_ | PATCH the model allocation. |
|
|
522
|
+
| GET | `/api/bongos/me/passkeys` | `any-builder` | — | GET /api/bongos/me/passkeys — the caller's registered cards. |
|
|
523
|
+
| GET | `/api/bongos/me/passkeys/browser.js` | `any-builder` | — | GET /api/bongos/me/passkeys/browser.js — the vetted @simplewebauthn/browser bundle, served same-origin so the page needs no CDN and no bu… |
|
|
524
|
+
| POST | `/api/bongos/me/passkeys/register/options` | `any-builder` | validated | POST /api/bongos/me/passkeys/register/options — start adding a card. |
|
|
525
|
+
| POST | `/api/bongos/me/passkeys/register/verify` | `any-builder` | `response`, `nickname` | POST /api/bongos/me/passkeys/register/verify — finish adding a card. |
|
|
526
|
+
| POST | `/api/bongos/me/passkeys/remove` | `any-builder` | `credential_id` | POST /api/bongos/me/passkeys/remove — Body: { credential_id }. |
|
|
527
|
+
| POST | `/api/bongos/me/passkeys/rename` | `any-builder` | `credential_id`, `nickname` | POST /api/bongos/me/passkeys/rename — Body: { credential_id, nickname }. |
|
|
522
528
|
| PATCH | `/api/bongos/me/profile` | `any-builder` | `display_name`, `bio`, `links` | the caller's OWN profile fields (P02, task 1002798; spec Decision 4): bio, typed links, account display name. |
|
|
523
529
|
| GET | `/api/bongos/me/profile-nudge` | `any-builder` | — | The "Complete your profile" nudge dismissal (task 1002802 / P06). |
|
|
524
530
|
| PATCH | `/api/bongos/me/profile-nudge` | `any-builder` | _undocumented_ | PATCH the dismissal. |
|