@onplo/sdk 0.0.1 → 0.0.2
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/generated/account.d.ts +100 -8
- package/generated/ai.d.ts +175 -16
- package/generated/identity.d.ts +136 -0
- package/generated/integrations.d.ts +88 -13
- package/generated/keys.d.ts +41 -3
- package/generated/storage.d.ts +36 -9
- package/package.json +1 -1
package/generated/account.d.ts
CHANGED
|
@@ -379,8 +379,8 @@ export interface paths {
|
|
|
379
379
|
/**
|
|
380
380
|
* Make an address the one Onplo writes to
|
|
381
381
|
* @description EXACTLY ONE ADDRESS IS THE ONE ONPLO WRITES TO, and marking another unmarks it — the server's
|
|
382
|
-
* job, never the caller's, as `updateSignInMethod` does for
|
|
383
|
-
* address can be marked, because Onplo never writes to one that is not.
|
|
382
|
+
* job, never the caller's, as `updateSignInMethod` does for the Primary sign-in method. Only a
|
|
383
|
+
* VERIFIED address can be marked, because Onplo never writes to one that is not.
|
|
384
384
|
*/
|
|
385
385
|
patch: operations["updateEmailAddress"];
|
|
386
386
|
trace?: never;
|
|
@@ -1465,6 +1465,10 @@ export interface paths {
|
|
|
1465
1465
|
* @description A suggestion for the public roadmap, made in your account's name from your personal
|
|
1466
1466
|
* environment: the suggestion is the person's, never a company's. An agent may draft one for you
|
|
1467
1467
|
* to send, and never sends it itself.
|
|
1468
|
+
*
|
|
1469
|
+
* IT IS KEPT, AND NOTHING ELSE HAPPENS YET: Onplo reads it, merges duplicates, and lists it as
|
|
1470
|
+
* an Idea once moderated. Sending the same words twice makes two suggestions; there is no
|
|
1471
|
+
* idempotency key.
|
|
1468
1472
|
*/
|
|
1469
1473
|
post: operations["suggestFeature"];
|
|
1470
1474
|
delete?: never;
|
|
@@ -1473,6 +1477,43 @@ export interface paths {
|
|
|
1473
1477
|
patch?: never;
|
|
1474
1478
|
trace?: never;
|
|
1475
1479
|
};
|
|
1480
|
+
"/feature-votes/{future_feature_id}": {
|
|
1481
|
+
parameters: {
|
|
1482
|
+
query?: never;
|
|
1483
|
+
header?: never;
|
|
1484
|
+
path: {
|
|
1485
|
+
/**
|
|
1486
|
+
* @description A future feature's permanent id, `<app>.feature.<concept>`, as its app's roadmap lists it:
|
|
1487
|
+
* `account.feature.family`. Lowercase, dot-separated, never rewritten when the title changes.
|
|
1488
|
+
*/
|
|
1489
|
+
future_feature_id: components["parameters"]["FutureFeatureId"];
|
|
1490
|
+
};
|
|
1491
|
+
cookie?: never;
|
|
1492
|
+
};
|
|
1493
|
+
get?: never;
|
|
1494
|
+
/**
|
|
1495
|
+
* Vote for a future feature
|
|
1496
|
+
* @description Your one vote on a feature an app has decided to build later, cast from your personal
|
|
1497
|
+
* environment. "ONE PERSON, ONE VOTE — the vote belongs to the account, never to the
|
|
1498
|
+
* environment": somebody who belongs to twenty companies still has one vote on a feature. An
|
|
1499
|
+
* agent may draft a vote for you to cast, and never casts it itself.
|
|
1500
|
+
*
|
|
1501
|
+
* VOTING AGAIN IS THE SAME VOTE. A second vote on the same feature changes nothing and answers
|
|
1502
|
+
* the vote as it was first cast, so a retry whose answer was lost is never told it already
|
|
1503
|
+
* voted. There is no second vote to refuse, and so no 409.
|
|
1504
|
+
*
|
|
1505
|
+
* THE FEATURE IS NAMED BY ITS PERMANENT ID, `<app>.feature.<concept>`, as its app's roadmap
|
|
1506
|
+
* lists it. An id no app's roadmap lists is refused with a 422 naming `future_feature_id`, and
|
|
1507
|
+
* no vote is kept.
|
|
1508
|
+
*/
|
|
1509
|
+
put: operations["castFeatureVote"];
|
|
1510
|
+
post?: never;
|
|
1511
|
+
delete?: never;
|
|
1512
|
+
options?: never;
|
|
1513
|
+
head?: never;
|
|
1514
|
+
patch?: never;
|
|
1515
|
+
trace?: never;
|
|
1516
|
+
};
|
|
1476
1517
|
"/support-tickets": {
|
|
1477
1518
|
parameters: {
|
|
1478
1519
|
query?: never;
|
|
@@ -1491,7 +1532,13 @@ export interface paths {
|
|
|
1491
1532
|
*
|
|
1492
1533
|
* A TICKET SPLITS RATHER THAN BELONGS TO ONE APP: the conversation with you is Communication's,
|
|
1493
1534
|
* and the work item is an ordinary task the Projects app renders. Account is the door; neither
|
|
1494
|
-
* app exists yet to hold the rest.
|
|
1535
|
+
* app exists yet to hold the rest. UNTIL THEY DO, Account keeps the report as it was sent — the
|
|
1536
|
+
* app, the page, your words, whether you chose diagnostics, and the environment this credential
|
|
1537
|
+
* acts in — and that is all: no diagnostic bundle is gathered yet, and nobody answers in a
|
|
1538
|
+
* conversation yet. Sending the same report twice makes two.
|
|
1539
|
+
*
|
|
1540
|
+
* A PERSON REPORTS A PROBLEM: the conversation that follows is with you. A machine's or an
|
|
1541
|
+
* agent's credential is answered 404 `subject_not_person`.
|
|
1495
1542
|
*/
|
|
1496
1543
|
post: operations["reportProblem"];
|
|
1497
1544
|
delete?: never;
|
|
@@ -1648,9 +1695,9 @@ export interface paths {
|
|
|
1648
1695
|
head?: never;
|
|
1649
1696
|
/**
|
|
1650
1697
|
* Edit a role
|
|
1651
|
-
* @description Its name, what it grants,
|
|
1652
|
-
* it is. Everyone holding it holds the new bundle from the next request. A built-in
|
|
1653
|
-
* edited: copy it into a role of the company's own instead.
|
|
1698
|
+
* @description Its name, what it grants, its Role selection on login and where it may be granted. What is not
|
|
1699
|
+
* sent stays as it is. Everyone holding it holds the new bundle from the next request. A built-in
|
|
1700
|
+
* role is not edited: copy it into a role of the company's own instead.
|
|
1654
1701
|
*/
|
|
1655
1702
|
patch: operations["updateRole"];
|
|
1656
1703
|
trace?: never;
|
|
@@ -4401,6 +4448,11 @@ export interface components {
|
|
|
4401
4448
|
title: string;
|
|
4402
4449
|
created_at: components["schemas"]["Timestamp"];
|
|
4403
4450
|
};
|
|
4451
|
+
FeatureVote: {
|
|
4452
|
+
/** @description The future feature voted for, by its permanent id, `account.feature.family`. */
|
|
4453
|
+
feature_id: string;
|
|
4454
|
+
cast_at: components["schemas"]["Timestamp"];
|
|
4455
|
+
};
|
|
4404
4456
|
ProblemReport: {
|
|
4405
4457
|
/** @description The app it happened in, by its id. */
|
|
4406
4458
|
app: string;
|
|
@@ -5261,6 +5313,11 @@ export interface components {
|
|
|
5261
5313
|
DataSearchId: components["schemas"]["Id"];
|
|
5262
5314
|
/** @description The feature's permanent id in Account's feature list. */
|
|
5263
5315
|
FeatureId: string;
|
|
5316
|
+
/**
|
|
5317
|
+
* @description A future feature's permanent id, `<app>.feature.<concept>`, as its app's roadmap lists it:
|
|
5318
|
+
* `account.feature.family`. Lowercase, dot-separated, never rewritten when the title changes.
|
|
5319
|
+
*/
|
|
5320
|
+
FutureFeatureId: string;
|
|
5264
5321
|
/** @description One holder's Premium seat of one app. */
|
|
5265
5322
|
PremiumSeatAssignmentId: components["schemas"]["Id"];
|
|
5266
5323
|
/** @description An environment's id — here, a company you are a member of. */
|
|
@@ -7917,7 +7974,42 @@ export interface operations {
|
|
|
7917
7974
|
415: components["responses"]["UnsupportedMediaType"];
|
|
7918
7975
|
422: components["responses"]["Unprocessable"];
|
|
7919
7976
|
500: components["responses"]["ServerError"];
|
|
7920
|
-
|
|
7977
|
+
503: components["responses"]["ServiceUnavailable"];
|
|
7978
|
+
};
|
|
7979
|
+
};
|
|
7980
|
+
castFeatureVote: {
|
|
7981
|
+
parameters: {
|
|
7982
|
+
query?: never;
|
|
7983
|
+
header?: never;
|
|
7984
|
+
path: {
|
|
7985
|
+
/**
|
|
7986
|
+
* @description A future feature's permanent id, `<app>.feature.<concept>`, as its app's roadmap lists it:
|
|
7987
|
+
* `account.feature.family`. Lowercase, dot-separated, never rewritten when the title changes.
|
|
7988
|
+
*/
|
|
7989
|
+
future_feature_id: components["parameters"]["FutureFeatureId"];
|
|
7990
|
+
};
|
|
7991
|
+
cookie?: never;
|
|
7992
|
+
};
|
|
7993
|
+
requestBody?: never;
|
|
7994
|
+
responses: {
|
|
7995
|
+
/** @description Your vote, as it was first cast. */
|
|
7996
|
+
200: {
|
|
7997
|
+
headers: {
|
|
7998
|
+
"Onplo-Request-Id": components["headers"]["OnploRequestId"];
|
|
7999
|
+
[name: string]: unknown;
|
|
8000
|
+
};
|
|
8001
|
+
content: {
|
|
8002
|
+
"application/json": components["schemas"]["FeatureVote"];
|
|
8003
|
+
};
|
|
8004
|
+
};
|
|
8005
|
+
400: components["responses"]["BadRequest"];
|
|
8006
|
+
401: components["responses"]["Unauthorized"];
|
|
8007
|
+
403: components["responses"]["Forbidden"];
|
|
8008
|
+
404: components["responses"]["NotAPerson"];
|
|
8009
|
+
413: components["responses"]["ContentTooLarge"];
|
|
8010
|
+
415: components["responses"]["UnsupportedMediaType"];
|
|
8011
|
+
422: components["responses"]["Unprocessable"];
|
|
8012
|
+
500: components["responses"]["ServerError"];
|
|
7921
8013
|
503: components["responses"]["ServiceUnavailable"];
|
|
7922
8014
|
};
|
|
7923
8015
|
};
|
|
@@ -7947,11 +8039,11 @@ export interface operations {
|
|
|
7947
8039
|
400: components["responses"]["BadRequest"];
|
|
7948
8040
|
401: components["responses"]["Unauthorized"];
|
|
7949
8041
|
403: components["responses"]["Forbidden"];
|
|
8042
|
+
404: components["responses"]["NotAPerson"];
|
|
7950
8043
|
413: components["responses"]["ContentTooLarge"];
|
|
7951
8044
|
415: components["responses"]["UnsupportedMediaType"];
|
|
7952
8045
|
422: components["responses"]["Unprocessable"];
|
|
7953
8046
|
500: components["responses"]["ServerError"];
|
|
7954
|
-
501: components["responses"]["NotImplemented"];
|
|
7955
8047
|
503: components["responses"]["ServiceUnavailable"];
|
|
7956
8048
|
};
|
|
7957
8049
|
};
|
package/generated/ai.d.ts
CHANGED
|
@@ -1121,12 +1121,11 @@ export interface paths {
|
|
|
1121
1121
|
* THE AGENT MUST BE ONE YOU MAY USE, in this account environment, and turned on. Anything else
|
|
1122
1122
|
* is refused (422 naming `agent_id`).
|
|
1123
1123
|
*
|
|
1124
|
-
* A MODEL CALL. Every one passes through the routing layer
|
|
1125
|
-
*
|
|
1124
|
+
* A MODEL CALL. Every one passes through the routing layer (ONPLO-2225).
|
|
1125
|
+
* IT ASKS THE MODEL SOMEBODY PICKED, AND ONPLO PICKS NONE (decision 0867): the
|
|
1126
1126
|
* agent's own, or else your Default provider & model. With none picked, nothing is asked and
|
|
1127
|
-
* no chat is made: 503 `no_model_picked`, which says where to pick one.
|
|
1128
|
-
*
|
|
1129
|
-
* **NOT BUILT YET — it answers 501 (ONPLO-1722).**
|
|
1127
|
+
* no chat is made: 503 `no_model_picked`, which says where to pick one. This said "the routing
|
|
1128
|
+
* layer, which is not built" and "NOT BUILT YET — it answers 501" until it was served (ONPLO-1722).
|
|
1130
1129
|
*/
|
|
1131
1130
|
post: operations["startChat"];
|
|
1132
1131
|
delete?: never;
|
|
@@ -1207,9 +1206,8 @@ export interface paths {
|
|
|
1207
1206
|
* not carried on (409 `chat_in_trash`).
|
|
1208
1207
|
*
|
|
1209
1208
|
* A MODEL CALL, as starting one is. No answer leaves nothing behind: 503 `no_model_answered`.
|
|
1210
|
-
* With no model picked, nothing is asked: 503 `no_model_picked` (decision 0867, rule 3).
|
|
1211
|
-
*
|
|
1212
|
-
* **NOT BUILT YET — it answers 501 (ONPLO-1722).**
|
|
1209
|
+
* With no model picked, nothing is asked: 503 `no_model_picked` (decision 0867, rule 3). This
|
|
1210
|
+
* said "NOT BUILT YET — it answers 501" until it was served (ONPLO-1722).
|
|
1213
1211
|
*/
|
|
1214
1212
|
post: operations["carryOnChat"];
|
|
1215
1213
|
delete?: never;
|
|
@@ -2614,6 +2612,72 @@ export interface paths {
|
|
|
2614
2612
|
patch?: never;
|
|
2615
2613
|
trace?: never;
|
|
2616
2614
|
};
|
|
2615
|
+
"/machines/{machine_id}/times": {
|
|
2616
|
+
parameters: {
|
|
2617
|
+
query?: never;
|
|
2618
|
+
header?: never;
|
|
2619
|
+
path: {
|
|
2620
|
+
machine_id: components["parameters"]["MachineId"];
|
|
2621
|
+
};
|
|
2622
|
+
cookie?: never;
|
|
2623
|
+
};
|
|
2624
|
+
get?: never;
|
|
2625
|
+
/**
|
|
2626
|
+
* Set when a machine shows offline, and when its job shows stalled
|
|
2627
|
+
* @description "Offline after 3 missed heartbeats · stalled after 10 min silence", the defaults, "all tunable":
|
|
2628
|
+
* this is where one machine's own times are set. A machine on a slow line may be given longer before
|
|
2629
|
+
* it shows offline, and one running long jobs longer before a silent job shows stalled.
|
|
2630
|
+
*
|
|
2631
|
+
* BOTH ARE SENT EVERY TIME, and each replaces what the machine had. Sending 180 and 600 gives it the
|
|
2632
|
+
* defaults back. Setting the times it already has changes nothing, and answers it as it is.
|
|
2633
|
+
*
|
|
2634
|
+
* WHO MAY: whoever may Pause the machine, `ai:machine.suspend`, as the owner ruled (ONPLO-5200). One AI
|
|
2635
|
+
* was never told about answers 404, as reading it does.
|
|
2636
|
+
*/
|
|
2637
|
+
put: operations["setMachineTimes"];
|
|
2638
|
+
post?: never;
|
|
2639
|
+
delete?: never;
|
|
2640
|
+
options?: never;
|
|
2641
|
+
head?: never;
|
|
2642
|
+
patch?: never;
|
|
2643
|
+
trace?: never;
|
|
2644
|
+
};
|
|
2645
|
+
"/machine-connector/work": {
|
|
2646
|
+
parameters: {
|
|
2647
|
+
query?: never;
|
|
2648
|
+
header?: never;
|
|
2649
|
+
path?: never;
|
|
2650
|
+
cookie?: never;
|
|
2651
|
+
};
|
|
2652
|
+
/**
|
|
2653
|
+
* A machine's waiting work
|
|
2654
|
+
* @description The connector "asks 'is there work for me?', and when there is, hands the job to the AI tool
|
|
2655
|
+
* already installed and signed in on that machine". This is that question: the jobs given to this
|
|
2656
|
+
* machine that wait to be picked up, in the order the task service lists them: it promises none.
|
|
2657
|
+
*
|
|
2658
|
+
* A MACHINE ASKS ONLY FOR ITSELF. It calls as itself, holding the machine-connector credential
|
|
2659
|
+
* Integrations made when it was connected (ONPLO-4445), so the machine is the caller and no
|
|
2660
|
+
* permission is asked, as for its heartbeat. A person or an agent asking is refused (403
|
|
2661
|
+
* `reported_by_a_machine_only`).
|
|
2662
|
+
*
|
|
2663
|
+
* A PAUSED MACHINE IS GIVEN NO NEW WORK: "Your Pause stops the machine entirely, so it is given no
|
|
2664
|
+
* new work." While it is paused, `data` is empty and `paused` is `true`, whatever waits under it.
|
|
2665
|
+
*
|
|
2666
|
+
* AT MOST 100 AT A TIME. The rest are answered once those are picked up.
|
|
2667
|
+
*
|
|
2668
|
+
* PICKING ONE UP IS NOT HERE: it is still the task service's StartTask, "through its grant". A job's
|
|
2669
|
+
* progress and cost ride on the heartbeat. Each poll leaves its look on the machine, as every read
|
|
2670
|
+
* here does (decision 0675).
|
|
2671
|
+
*/
|
|
2672
|
+
get: operations["listMachineWork"];
|
|
2673
|
+
put?: never;
|
|
2674
|
+
post?: never;
|
|
2675
|
+
delete?: never;
|
|
2676
|
+
options?: never;
|
|
2677
|
+
head?: never;
|
|
2678
|
+
patch?: never;
|
|
2679
|
+
trace?: never;
|
|
2680
|
+
};
|
|
2617
2681
|
"/machine-connector/heartbeat": {
|
|
2618
2682
|
parameters: {
|
|
2619
2683
|
query?: never;
|
|
@@ -4544,18 +4608,17 @@ export interface components {
|
|
|
4544
4608
|
/** @description The machine, by the id its record has in Integrations. */
|
|
4545
4609
|
machine_id: components["schemas"]["Id"];
|
|
4546
4610
|
/**
|
|
4547
|
-
* @description "Presence from connector heartbeats." Offline
|
|
4548
|
-
*
|
|
4549
|
-
* own for it yet (ONPLO-5200).
|
|
4611
|
+
* @description "Presence from connector heartbeats." Offline once `offline_after_seconds` have passed since
|
|
4612
|
+
* the last one: 180, three missed heartbeats, until somebody sets the machine's own (ONPLO-5200).
|
|
4550
4613
|
* @enum {string}
|
|
4551
4614
|
*/
|
|
4552
4615
|
presence: "online" | "offline";
|
|
4553
4616
|
/** @description When its last heartbeat arrived, or `null` until the first one. */
|
|
4554
4617
|
last_seen_at: components["schemas"]["Timestamp"] | null;
|
|
4555
4618
|
/**
|
|
4556
|
-
* @description `stalled` while a job it is running has not moved for longer than
|
|
4557
|
-
* minutes
|
|
4558
|
-
*
|
|
4619
|
+
* @description `stalled` while a job it is running has not moved for longer than `stalled_after_seconds` —
|
|
4620
|
+
* ten minutes until somebody sets the machine's own (ONPLO-5200) — as its last heartbeat
|
|
4621
|
+
* reported it. `working` otherwise. Returning such a job to waiting is the task
|
|
4559
4622
|
* service's, and not this board's.
|
|
4560
4623
|
* @enum {string}
|
|
4561
4624
|
*/
|
|
@@ -4569,8 +4632,29 @@ export interface components {
|
|
|
4569
4632
|
* on the machine, or `null` until it reports one. An estimate: the bill is the subscription's.
|
|
4570
4633
|
*/
|
|
4571
4634
|
month_cost_estimate: components["schemas"]["Money"] | null;
|
|
4635
|
+
/** @description Seconds after its last heartbeat that it shows offline. 180 until set (`setMachineTimes`). */
|
|
4636
|
+
offline_after_seconds: number;
|
|
4637
|
+
/** @description Seconds a job may go without moving before the machine shows stalled. 600 until set. */
|
|
4638
|
+
stalled_after_seconds: number;
|
|
4572
4639
|
environment_id: components["schemas"]["Id"];
|
|
4573
4640
|
};
|
|
4641
|
+
/** @description One machine's own times, both sent every time (ONPLO-5200). 180 and 600 are the defaults. */
|
|
4642
|
+
MachineTimes: {
|
|
4643
|
+
/**
|
|
4644
|
+
* @description Seconds after its last heartbeat that it shows offline. At least 120, two heartbeats, so one
|
|
4645
|
+
* heartbeat late never shows a machine offline; at most a day.
|
|
4646
|
+
*/
|
|
4647
|
+
offline_after_seconds: number;
|
|
4648
|
+
/** @description Seconds a job may go without moving before the machine shows stalled. One minute to a day. */
|
|
4649
|
+
stalled_after_seconds: number;
|
|
4650
|
+
};
|
|
4651
|
+
/** @description The jobs that wait for this machine, or none while it is paused (ONPLO-5202). */
|
|
4652
|
+
MachineWork: {
|
|
4653
|
+
/** @description Whether somebody here paused it. While `true`, `data` is empty. */
|
|
4654
|
+
paused: boolean;
|
|
4655
|
+
/** @description The jobs given to this machine that wait to be picked up, at most 100. */
|
|
4656
|
+
data: components["schemas"]["Job"][];
|
|
4657
|
+
};
|
|
4574
4658
|
/**
|
|
4575
4659
|
* @description What the connector reports of its own machine, every 60 seconds. Each heartbeat replaces the last
|
|
4576
4660
|
* one whole.
|
|
@@ -6861,7 +6945,6 @@ export interface operations {
|
|
|
6861
6945
|
415: components["responses"]["UnsupportedMediaType"];
|
|
6862
6946
|
422: components["responses"]["Unprocessable"];
|
|
6863
6947
|
500: components["responses"]["ServerError"];
|
|
6864
|
-
501: components["responses"]["NotImplemented"];
|
|
6865
6948
|
503: components["responses"]["ChatUnavailable"];
|
|
6866
6949
|
};
|
|
6867
6950
|
};
|
|
@@ -7041,7 +7124,6 @@ export interface operations {
|
|
|
7041
7124
|
415: components["responses"]["UnsupportedMediaType"];
|
|
7042
7125
|
422: components["responses"]["Unprocessable"];
|
|
7043
7126
|
500: components["responses"]["ServerError"];
|
|
7044
|
-
501: components["responses"]["NotImplemented"];
|
|
7045
7127
|
503: components["responses"]["ChatUnavailable"];
|
|
7046
7128
|
};
|
|
7047
7129
|
};
|
|
@@ -9098,6 +9180,83 @@ export interface operations {
|
|
|
9098
9180
|
503: components["responses"]["ServiceUnavailable"];
|
|
9099
9181
|
};
|
|
9100
9182
|
};
|
|
9183
|
+
setMachineTimes: {
|
|
9184
|
+
parameters: {
|
|
9185
|
+
query?: never;
|
|
9186
|
+
header?: never;
|
|
9187
|
+
path: {
|
|
9188
|
+
machine_id: components["parameters"]["MachineId"];
|
|
9189
|
+
};
|
|
9190
|
+
cookie?: never;
|
|
9191
|
+
};
|
|
9192
|
+
requestBody: {
|
|
9193
|
+
content: {
|
|
9194
|
+
"application/json": components["schemas"]["MachineTimes"];
|
|
9195
|
+
};
|
|
9196
|
+
};
|
|
9197
|
+
responses: {
|
|
9198
|
+
/** @description The machine, judged by its new times. */
|
|
9199
|
+
200: {
|
|
9200
|
+
headers: {
|
|
9201
|
+
"Onplo-Request-Id": components["headers"]["OnploRequestId"];
|
|
9202
|
+
[name: string]: unknown;
|
|
9203
|
+
};
|
|
9204
|
+
content: {
|
|
9205
|
+
"application/json": components["schemas"]["MachineOnTheBoard"];
|
|
9206
|
+
};
|
|
9207
|
+
};
|
|
9208
|
+
400: components["responses"]["BadRequest"];
|
|
9209
|
+
401: components["responses"]["Unauthorized"];
|
|
9210
|
+
403: components["responses"]["Forbidden"];
|
|
9211
|
+
404: components["responses"]["NotFound"];
|
|
9212
|
+
413: components["responses"]["ContentTooLarge"];
|
|
9213
|
+
415: components["responses"]["UnsupportedMediaType"];
|
|
9214
|
+
422: components["responses"]["Unprocessable"];
|
|
9215
|
+
500: components["responses"]["ServerError"];
|
|
9216
|
+
503: components["responses"]["ServiceUnavailable"];
|
|
9217
|
+
};
|
|
9218
|
+
};
|
|
9219
|
+
listMachineWork: {
|
|
9220
|
+
parameters: {
|
|
9221
|
+
query?: never;
|
|
9222
|
+
header?: never;
|
|
9223
|
+
path?: never;
|
|
9224
|
+
cookie?: never;
|
|
9225
|
+
};
|
|
9226
|
+
requestBody?: never;
|
|
9227
|
+
responses: {
|
|
9228
|
+
/** @description Its waiting work, or none. */
|
|
9229
|
+
200: {
|
|
9230
|
+
headers: {
|
|
9231
|
+
"Onplo-Request-Id": components["headers"]["OnploRequestId"];
|
|
9232
|
+
[name: string]: unknown;
|
|
9233
|
+
};
|
|
9234
|
+
content: {
|
|
9235
|
+
"application/json": components["schemas"]["MachineWork"];
|
|
9236
|
+
};
|
|
9237
|
+
};
|
|
9238
|
+
400: components["responses"]["BadRequest"];
|
|
9239
|
+
401: components["responses"]["Unauthorized"];
|
|
9240
|
+
/** @description Refused. `reported_by_a_machine_only`: the caller is a person or an agent, and only a machine asks for its own work. The door's own three, as on every other operation: `permission_missing` and `ring_requires_person`, when identity refuses the credential, and `outside_session_scope`, when the act is not within the scope this session declared at sign-in. */
|
|
9241
|
+
403: {
|
|
9242
|
+
headers: {
|
|
9243
|
+
"Onplo-Request-Id": components["headers"]["OnploRequestId"];
|
|
9244
|
+
[name: string]: unknown;
|
|
9245
|
+
};
|
|
9246
|
+
content: {
|
|
9247
|
+
"application/problem+json": components["schemas"]["Problem"] & {
|
|
9248
|
+
/** @enum {unknown} */
|
|
9249
|
+
code?: "reported_by_a_machine_only" | "permission_missing" | "ring_requires_person" | "outside_session_scope";
|
|
9250
|
+
};
|
|
9251
|
+
};
|
|
9252
|
+
};
|
|
9253
|
+
413: components["responses"]["ContentTooLarge"];
|
|
9254
|
+
415: components["responses"]["UnsupportedMediaType"];
|
|
9255
|
+
422: components["responses"]["Unprocessable"];
|
|
9256
|
+
500: components["responses"]["ServerError"];
|
|
9257
|
+
503: components["responses"]["TasksUnavailable"];
|
|
9258
|
+
};
|
|
9259
|
+
};
|
|
9101
9260
|
reportMachineHeartbeat: {
|
|
9102
9261
|
parameters: {
|
|
9103
9262
|
query?: never;
|
package/generated/identity.d.ts
CHANGED
|
@@ -95,6 +95,45 @@ export interface paths {
|
|
|
95
95
|
patch?: never;
|
|
96
96
|
trace?: never;
|
|
97
97
|
};
|
|
98
|
+
"/token": {
|
|
99
|
+
parameters: {
|
|
100
|
+
query?: never;
|
|
101
|
+
header?: never;
|
|
102
|
+
path?: never;
|
|
103
|
+
cookie?: never;
|
|
104
|
+
};
|
|
105
|
+
get?: never;
|
|
106
|
+
put?: never;
|
|
107
|
+
/**
|
|
108
|
+
* Trade an app's one-time code for the person's session
|
|
109
|
+
* @description THE TOKEN ENDPOINT (RFC 6749 §4.1.3, OpenID Connect Core §3.1.3; architecture decision record
|
|
110
|
+
* 037). An app that `grantAuthorizationCode` sent back with a code trades it here, once, for:
|
|
111
|
+
*
|
|
112
|
+
* - THE ACCESS TOKEN, which is the person's session, opaque, read by every Onplo service as every
|
|
113
|
+
* session is. It records the app it was issued to.
|
|
114
|
+
* - THE ID TOKEN, a JWT signed with a key of `readProviderKeySet`, which says who signed in: `iss`,
|
|
115
|
+
* `sub` (the person), `aud` (the app), `exp`, `iat`, `auth_time`, `amr` and the `nonce` the app
|
|
116
|
+
* sent. It is for the app alone and NO ONPLO SERVICE TAKES IT AS A BEARER.
|
|
117
|
+
*
|
|
118
|
+
* THE CODE IS TRADED ONLY BY THE APP IT WAS HANDED TO: the same `client_id`, the same
|
|
119
|
+
* `redirect_uri`, and a `code_verifier` whose SHA-256 is the challenge it was asked with (RFC 7636).
|
|
120
|
+
* A CODE SHOWN A SECOND TIME IS REFUSED, AND THE SESSION ITS FIRST TRADE OPENED IS ENDED, because a
|
|
121
|
+
* code shown twice is a code somebody else holds.
|
|
122
|
+
*
|
|
123
|
+
* REFUSED AS OAUTH REFUSES (RFC 6749 §5.2), with a 400 and an `error`, so any OAuth client reads
|
|
124
|
+
* it: a field missing is `invalid_request`, a grant other than `authorization_code` is
|
|
125
|
+
* `unsupported_grant_type`, and a code unknown, expired, spent or shown by another app is
|
|
126
|
+
* `invalid_grant`, told apart from nothing.
|
|
127
|
+
*
|
|
128
|
+
* SIGNED OUT, because the code is the proof, and LIMITED by how often it is called (decision 0732).
|
|
129
|
+
*/
|
|
130
|
+
post: operations["requestTokens"];
|
|
131
|
+
delete?: never;
|
|
132
|
+
options?: never;
|
|
133
|
+
head?: never;
|
|
134
|
+
patch?: never;
|
|
135
|
+
trace?: never;
|
|
136
|
+
};
|
|
98
137
|
"/passkey-proofs": {
|
|
99
138
|
parameters: {
|
|
100
139
|
query?: never;
|
|
@@ -1316,6 +1355,58 @@ export interface components {
|
|
|
1316
1355
|
detail: string;
|
|
1317
1356
|
}[];
|
|
1318
1357
|
};
|
|
1358
|
+
/**
|
|
1359
|
+
* @description The trade, as RFC 6749 §4.1.3 names its fields. NONE IS REQUIRED HERE, so a field missing is
|
|
1360
|
+
* answered as OAuth answers it, `invalid_request`, and never as a 422.
|
|
1361
|
+
*/
|
|
1362
|
+
TokenRequest: {
|
|
1363
|
+
/** @description Always `authorization_code`. */
|
|
1364
|
+
grant_type?: string;
|
|
1365
|
+
/** @description The code `grantAuthorizationCode` sent the app back with. */
|
|
1366
|
+
code?: string;
|
|
1367
|
+
/** @description The return address the code was sent to, exactly as the app asked with it. */
|
|
1368
|
+
redirect_uri?: string;
|
|
1369
|
+
/** @description The app, by the id Onplo lists it under. */
|
|
1370
|
+
client_id?: string;
|
|
1371
|
+
/** @description The PKCE verifier whose SHA-256 the app sent as its challenge. */
|
|
1372
|
+
code_verifier?: string;
|
|
1373
|
+
};
|
|
1374
|
+
/** @description The answer, under the names RFC 6749 §5.1 and OpenID Connect Core §3.1.3.3 give it. */
|
|
1375
|
+
Tokens: {
|
|
1376
|
+
/** @description The person's session. Sent as a bearer to every Onplo service. */
|
|
1377
|
+
access_token: string;
|
|
1378
|
+
/**
|
|
1379
|
+
* @description Always `Bearer`.
|
|
1380
|
+
* @enum {string}
|
|
1381
|
+
*/
|
|
1382
|
+
token_type: "Bearer";
|
|
1383
|
+
/** @description The seconds until the session ends, twelve hours from the touch at most. */
|
|
1384
|
+
expires_in: number;
|
|
1385
|
+
/** @description Who signed in, signed ES256, for the app alone. Never a bearer. */
|
|
1386
|
+
id_token: string;
|
|
1387
|
+
/** @description The scopes granted, space-separated, as the app asked them. */
|
|
1388
|
+
scope: string;
|
|
1389
|
+
};
|
|
1390
|
+
/** @description OAuth's refusal (RFC 6749 §5.2), so any OAuth client reads it. */
|
|
1391
|
+
TokenRefusal: {
|
|
1392
|
+
/**
|
|
1393
|
+
* @description `invalid_request`: a field is missing. `unsupported_grant_type`: the grant is not
|
|
1394
|
+
* `authorization_code`. `invalid_grant`: the code is unknown, expired, spent or shown by
|
|
1395
|
+
* another app.
|
|
1396
|
+
* @enum {string}
|
|
1397
|
+
*/
|
|
1398
|
+
error: "invalid_request" | "unsupported_grant_type" | "invalid_grant";
|
|
1399
|
+
};
|
|
1400
|
+
/**
|
|
1401
|
+
* @description A 400 at the token endpoint: OAuth's refusal, or the server's `malformed_request` for a form it
|
|
1402
|
+
* could not read (a key sent twice). The two never overlap: a refusal carries `error` alone.
|
|
1403
|
+
*/
|
|
1404
|
+
TokenRefusedOrUnread: components["schemas"]["TokenRefusal"] | components["schemas"]["TokenFormUnread"];
|
|
1405
|
+
/** @description The server's Problem for a token form it could not read, such as a key sent twice. */
|
|
1406
|
+
TokenFormUnread: components["schemas"]["Problem"] & {
|
|
1407
|
+
/** @enum {unknown} */
|
|
1408
|
+
code?: "malformed_request";
|
|
1409
|
+
};
|
|
1319
1410
|
/**
|
|
1320
1411
|
* @description The provider's metadata, under the names OpenID Connect Discovery 1.0 gives them, so any
|
|
1321
1412
|
* standard client reads it unchanged. Every list holds only what identity supports.
|
|
@@ -1749,6 +1840,51 @@ export interface operations {
|
|
|
1749
1840
|
500: components["responses"]["ServerError"];
|
|
1750
1841
|
};
|
|
1751
1842
|
};
|
|
1843
|
+
requestTokens: {
|
|
1844
|
+
parameters: {
|
|
1845
|
+
query?: never;
|
|
1846
|
+
header?: never;
|
|
1847
|
+
path?: never;
|
|
1848
|
+
cookie?: never;
|
|
1849
|
+
};
|
|
1850
|
+
requestBody: {
|
|
1851
|
+
content: {
|
|
1852
|
+
"application/x-www-form-urlencoded": components["schemas"]["TokenRequest"];
|
|
1853
|
+
};
|
|
1854
|
+
};
|
|
1855
|
+
responses: {
|
|
1856
|
+
/** @description The session and the ID token. */
|
|
1857
|
+
200: {
|
|
1858
|
+
headers: {
|
|
1859
|
+
"Onplo-Request-Id": components["headers"]["OnploRequestId"];
|
|
1860
|
+
[name: string]: unknown;
|
|
1861
|
+
};
|
|
1862
|
+
content: {
|
|
1863
|
+
"application/json": components["schemas"]["Tokens"];
|
|
1864
|
+
};
|
|
1865
|
+
};
|
|
1866
|
+
/**
|
|
1867
|
+
* @description OAuth's refusal, its `error` saying which. Or a body the server could not read, before the
|
|
1868
|
+
* endpoint saw it: the `malformed_request` problem every operation declares on 400, sent as
|
|
1869
|
+
* `application/problem+json`. One media type is declared because a status carries one.
|
|
1870
|
+
*/
|
|
1871
|
+
400: {
|
|
1872
|
+
headers: {
|
|
1873
|
+
"Onplo-Request-Id": components["headers"]["OnploRequestId"];
|
|
1874
|
+
[name: string]: unknown;
|
|
1875
|
+
};
|
|
1876
|
+
content: {
|
|
1877
|
+
"application/json": components["schemas"]["TokenRefusedOrUnread"];
|
|
1878
|
+
};
|
|
1879
|
+
};
|
|
1880
|
+
413: components["responses"]["ContentTooLarge"];
|
|
1881
|
+
415: components["responses"]["UnsupportedMediaType"];
|
|
1882
|
+
422: components["responses"]["Unprocessable"];
|
|
1883
|
+
429: components["responses"]["TooManyCalls"];
|
|
1884
|
+
500: components["responses"]["ServerError"];
|
|
1885
|
+
501: components["responses"]["NotImplemented"];
|
|
1886
|
+
};
|
|
1887
|
+
};
|
|
1752
1888
|
startPasskeyProof: {
|
|
1753
1889
|
parameters: {
|
|
1754
1890
|
query?: never;
|
|
@@ -166,8 +166,8 @@ export interface paths {
|
|
|
166
166
|
get: operations["listConnections"];
|
|
167
167
|
put?: never;
|
|
168
168
|
/**
|
|
169
|
-
* Connect a system with an API key, connect a database, a Custom API or an MCP server
|
|
170
|
-
* @description The
|
|
169
|
+
* Connect a system with an API key or as an app, connect a database, a Custom API or an MCP server
|
|
170
|
+
* @description The five connect flows in which you TYPE the credential. `kind` says which, and each takes
|
|
171
171
|
* the fields of its own configuration block. An OAuth connection is not made here: you grant
|
|
172
172
|
* access at the provider, so it starts with `POST /connection-authorizations`.
|
|
173
173
|
*
|
|
@@ -180,6 +180,10 @@ export interface paths {
|
|
|
180
180
|
* signing in with none, a key in a header or a Bearer token (ONPLO-3478). OAuth on the
|
|
181
181
|
* server's own screen is not made here yet (ONPLO-4032).
|
|
182
182
|
*
|
|
183
|
+
* GITHUB IS CONNECTED AS AN APP (`kind: app`, ONPLO-4887): the app's id, its installation's
|
|
184
|
+
* id and its private key, which is the credential, and optionally the repositories and the
|
|
185
|
+
* permissions the connection is narrowed to. Making it calls nobody, as every connect here.
|
|
186
|
+
*
|
|
183
187
|
* THE CREDENTIAL IS WRITE-ONLY. It is visible while you type it and masked for ever after:
|
|
184
188
|
* it goes to the central vault as an entry in the Keys app, in this same account environment,
|
|
185
189
|
* and the connection that comes back carries that entry's id and never the value. Changing
|
|
@@ -481,14 +485,18 @@ export interface paths {
|
|
|
481
485
|
* one in the same Keys entry, so `credential_key_id` does not move, and nothing that uses the
|
|
482
486
|
* connection has to be redeployed.
|
|
483
487
|
*
|
|
484
|
-
* FOR A CONNECTION WHOSE CREDENTIAL YOU TYPED — an API key, a database, a Custom API
|
|
485
|
-
* outside MCP server. An OAuth connection holds a grant rather than something you typed, and
|
|
488
|
+
* FOR A CONNECTION WHOSE CREDENTIAL YOU TYPED — an API key, a database, a Custom API, an
|
|
489
|
+
* outside MCP server or an app. An OAuth connection holds a grant rather than something you typed, and
|
|
486
490
|
* is renewed by reconnecting; this operation refuses it, and refuses a body of another kind,
|
|
487
491
|
* with `connection_kind_mismatch`.
|
|
488
492
|
*
|
|
489
493
|
* THE BODY NAMES ITS KIND in `kind`, with the value creating a connection of that kind uses:
|
|
490
|
-
* `api_key`, `database`, `custom_api` or `
|
|
491
|
-
* its fields are not, matches none of the
|
|
494
|
+
* `api_key`, `database`, `custom_api`, `mcp_server` or `app`. A body that names no kind, or a
|
|
495
|
+
* kind its fields are not, matches none of the five shapes and is refused with the 422.
|
|
496
|
+
*
|
|
497
|
+
* AN APP'S IS ITS PRIVATE KEY, AND ROTATING IT NEEDS NO RECONNECT (ONPLO-4887). GitHub lets an
|
|
498
|
+
* app hold more than one key at once: make a new key at GitHub, enter it here, and delete the
|
|
499
|
+
* old one at GitHub once the connection says the new one works. It keeps the same Keys entry.
|
|
492
500
|
*
|
|
493
501
|
* AN MCP SERVER'S IS ITS KEY OR ITS TOKEN, FOR THE SAME ADDRESS, as a Custom API's is: nothing
|
|
494
502
|
* else is sent, and it keeps the same Keys entry (ONPLO-4031). One that signs in with nothing
|
|
@@ -2622,15 +2630,19 @@ export interface components {
|
|
|
2622
2630
|
OwnerScope: "personal" | "company";
|
|
2623
2631
|
/**
|
|
2624
2632
|
* @description HOW THE CONNECTION PROVES ITSELF, and so which connect flow made it: an OAuth account, an
|
|
2625
|
-
* API key, a database, a custom API, a sign-up, an outside MCP server, or
|
|
2626
|
-
* of the row, never a separate list.
|
|
2633
|
+
* API key, a database, a custom API, a sign-up, an outside MCP server, an app, or a role. A
|
|
2634
|
+
* property of the row, never a separate list.
|
|
2635
|
+
*
|
|
2636
|
+
* `role` is a cloud account reached by a role Onplo assumes through OIDC federation, so it holds
|
|
2637
|
+
* no long-lived access key: AWS, given the role's address (its ARN), as a deploy target (ONPLO-4906). The
|
|
2638
|
+
* catalogue offers it; nothing makes one yet, so no connection carries it.
|
|
2627
2639
|
*
|
|
2628
2640
|
* `app` is a system connected as an app the person made there, signing in as the app and never
|
|
2629
2641
|
* as a person: GitHub, given the app's id, the installation's id and the app's private key,
|
|
2630
2642
|
* which becomes the connection's Machine secret. Every call signs a token of at most 10 minutes
|
|
2631
2643
|
* with that key and trades it for an installation token of one hour, held only in memory
|
|
2632
|
-
* (ONPLO-4839).
|
|
2633
|
-
*
|
|
2644
|
+
* (ONPLO-4839). `createConnection` makes one (ONPLO-4887); the trade itself is the vault's and
|
|
2645
|
+
* is not built yet (ONPLO-5233), so nothing calls through one yet.
|
|
2634
2646
|
*
|
|
2635
2647
|
* `mcp_server` is an outside MCP server: its HTTPS address and a name, signing in with none,
|
|
2636
2648
|
* an API key in a header, a Bearer token, or OAuth on the server's own screen. What uses it is
|
|
@@ -2649,7 +2661,7 @@ export interface components {
|
|
|
2649
2661
|
* are read with `getCustomApiAddress` (decision 0811); and `POST /connections` makes one.
|
|
2650
2662
|
* @enum {string}
|
|
2651
2663
|
*/
|
|
2652
|
-
ConnectionKind: "oauth" | "api_key" | "database" | "custom_api" | "sign_up" | "mcp_server" | "app";
|
|
2664
|
+
ConnectionKind: "oauth" | "api_key" | "database" | "custom_api" | "sign_up" | "mcp_server" | "app" | "role";
|
|
2653
2665
|
/**
|
|
2654
2666
|
* @description ONE VOCABULARY, used by every app that points at a connection: WORKING · EXPIRING · NOT
|
|
2655
2667
|
* WORKING · DISCONNECTED. Those four words are the whole set. `expiring` carries the date it
|
|
@@ -3116,6 +3128,63 @@ export interface components {
|
|
|
3116
3128
|
/** @description Left out, it is off. */
|
|
3117
3129
|
sub_processor?: components["schemas"]["SubProcessorTag"];
|
|
3118
3130
|
};
|
|
3131
|
+
/**
|
|
3132
|
+
* @description A SYSTEM CONNECTED AS AN APP YOU MADE THERE: GitHub (ONPLO-4887). You make a GitHub App in
|
|
3133
|
+
* your organisation, install it on the repositories it may touch, and hand Onplo the app's
|
|
3134
|
+
* id, the installation's id and the app's private key. Every call shows at GitHub as the
|
|
3135
|
+
* app's, never as a person's, so the connection does not leave with whoever made it.
|
|
3136
|
+
*
|
|
3137
|
+
* NARROWED PER CONNECTION. `repositories` may name fewer repositories than the app is
|
|
3138
|
+
* installed on, and `permissions` may leave out any the connection does not need. Two
|
|
3139
|
+
* connections may share one app with different reaches.
|
|
3140
|
+
*
|
|
3141
|
+
* WHAT IS NOT DONE HERE YET: the call through it. Onplo signs a token of at most 10 minutes
|
|
3142
|
+
* with the key and trades it at GitHub for a one-hour installation token, held in memory
|
|
3143
|
+
* only. That trade is the vault's, and is not built yet (ONPLO-5233).
|
|
3144
|
+
*/
|
|
3145
|
+
AppConnectionCreate: {
|
|
3146
|
+
/** @enum {string} */
|
|
3147
|
+
kind: "app";
|
|
3148
|
+
/** @description Picked from the catalog. A system that offers no app connection is refused. */
|
|
3149
|
+
system_id: components["schemas"]["Id"];
|
|
3150
|
+
/** @description Left out, it is the system's own name. */
|
|
3151
|
+
name?: components["schemas"]["ConnectionName"];
|
|
3152
|
+
owner_scope: components["schemas"]["OwnerScope"];
|
|
3153
|
+
/** @description Who manages it. Left out, it is you. */
|
|
3154
|
+
owner_person_id?: components["schemas"]["Id"];
|
|
3155
|
+
/**
|
|
3156
|
+
* @description The number GitHub shows on the app's settings page.
|
|
3157
|
+
* @example 123456
|
|
3158
|
+
*/
|
|
3159
|
+
app_id: string;
|
|
3160
|
+
/**
|
|
3161
|
+
* @description The number in the address of the app's installation page, for the organisation or
|
|
3162
|
+
* account it is installed on.
|
|
3163
|
+
* @example 98765432
|
|
3164
|
+
*/
|
|
3165
|
+
installation_id: string;
|
|
3166
|
+
/**
|
|
3167
|
+
* @description WRITE-ONLY: the text of the private key file GitHub hands over, a PEM block. It becomes
|
|
3168
|
+
* the connection's Machine secret in the Keys app and is returned by no operation, to
|
|
3169
|
+
* anyone.
|
|
3170
|
+
*/
|
|
3171
|
+
private_key: string;
|
|
3172
|
+
/**
|
|
3173
|
+
* @description The repositories this connection may touch, as `owner/name`, narrowed from those the
|
|
3174
|
+
* app is installed on. Left out or empty, all of them. A repository named twice is
|
|
3175
|
+
* refused (422 naming the field).
|
|
3176
|
+
*/
|
|
3177
|
+
repositories?: string[];
|
|
3178
|
+
/**
|
|
3179
|
+
* @description The permissions this connection keeps on, each one of the catalog entry's scopes,
|
|
3180
|
+
* spelled as the entry spells it. Left out, all of them. One the entry does not list is
|
|
3181
|
+
* refused (422 naming the field): a permission the app was not made with cannot be
|
|
3182
|
+
* switched on here. They are answered as the connection's `provider_scopes`.
|
|
3183
|
+
*/
|
|
3184
|
+
permissions?: string[];
|
|
3185
|
+
/** @description Left out, it is off. */
|
|
3186
|
+
sub_processor?: components["schemas"]["SubProcessorTag"];
|
|
3187
|
+
};
|
|
3119
3188
|
/**
|
|
3120
3189
|
* @description THE KEY, THE TOKEN OR THE PASSWORD — "write-only, vaulted": visible while typing, masked
|
|
3121
3190
|
* for ever after. It is stored in the central vault and returned by no operation, to anyone.
|
|
@@ -3201,6 +3270,12 @@ export interface components {
|
|
|
3201
3270
|
kind: "mcp_server";
|
|
3202
3271
|
secret: components["schemas"]["CustomApiSecret"];
|
|
3203
3272
|
};
|
|
3273
|
+
AppCredential: {
|
|
3274
|
+
/** @enum {string} */
|
|
3275
|
+
kind: "app";
|
|
3276
|
+
/** @description The new private key file's text, a PEM block. Write-only, as when it was connected. */
|
|
3277
|
+
private_key: string;
|
|
3278
|
+
};
|
|
3204
3279
|
/**
|
|
3205
3280
|
* @description WHERE AN MCP SERVER IS REACHED AND HOW IT SIGNS IN, WHOLE, WITH THE CREDENTIAL TYPED AGAIN.
|
|
3206
3281
|
*
|
|
@@ -5084,7 +5159,7 @@ export interface operations {
|
|
|
5084
5159
|
};
|
|
5085
5160
|
requestBody: {
|
|
5086
5161
|
content: {
|
|
5087
|
-
"application/json": components["schemas"]["ApiKeyConnectionCreate"] | components["schemas"]["DatabaseConnectionCreate"] | components["schemas"]["CustomApiConnectionCreate"] | components["schemas"]["McpServerConnectionCreate"];
|
|
5162
|
+
"application/json": components["schemas"]["ApiKeyConnectionCreate"] | components["schemas"]["DatabaseConnectionCreate"] | components["schemas"]["CustomApiConnectionCreate"] | components["schemas"]["McpServerConnectionCreate"] | components["schemas"]["AppConnectionCreate"];
|
|
5088
5163
|
};
|
|
5089
5164
|
};
|
|
5090
5165
|
responses: {
|
|
@@ -5398,7 +5473,7 @@ export interface operations {
|
|
|
5398
5473
|
};
|
|
5399
5474
|
requestBody: {
|
|
5400
5475
|
content: {
|
|
5401
|
-
"application/json": components["schemas"]["ApiKeyCredential"] | components["schemas"]["DatabaseCredential"] | components["schemas"]["CustomApiCredential"] | components["schemas"]["McpServerCredential"];
|
|
5476
|
+
"application/json": components["schemas"]["ApiKeyCredential"] | components["schemas"]["DatabaseCredential"] | components["schemas"]["CustomApiCredential"] | components["schemas"]["McpServerCredential"] | components["schemas"]["AppCredential"];
|
|
5402
5477
|
};
|
|
5403
5478
|
};
|
|
5404
5479
|
responses: {
|
package/generated/keys.d.ts
CHANGED
|
@@ -20,6 +20,13 @@ export interface paths {
|
|
|
20
20
|
*
|
|
21
21
|
* A KEY IN THE TRASH IS LEFT OUT unless `in_trash` asks for the Trash instead.
|
|
22
22
|
*
|
|
23
|
+
* THE TRASH ENDS IN ITS GHOSTS (decision 0672). A key deleted for good while a legal hold
|
|
24
|
+
* covers it leaves use at once and stays under the Trash filter, after the keys in the Trash,
|
|
25
|
+
* carrying `kept_by_legal_hold`. Which are drawn, and for whom, is the deletion service's to
|
|
26
|
+
* say (decision 0686): the person a hidden hold names sees no ghost, and is answered exactly
|
|
27
|
+
* what a key simply gone would answer. When the deletion service cannot be asked, no ghost is
|
|
28
|
+
* drawn and the rest of the Trash is listed.
|
|
29
|
+
*
|
|
23
30
|
* A LIST IS REFUSED RATHER THAN CUT SHORT — `reach_too_wide`. The list is drawn from where
|
|
24
31
|
* your grants sit, and one list covers grants on at most 500 rings and at most 500 single
|
|
25
32
|
* keys. Somebody granted more than either is answered a 409 and no keys, because a list drawn
|
|
@@ -1990,7 +1997,7 @@ export interface paths {
|
|
|
1990
1997
|
put?: never;
|
|
1991
1998
|
/**
|
|
1992
1999
|
* Attach a key to a flow project or a deploy environment
|
|
1993
|
-
* @description EXPLICIT, PER TARGET, EVERY TIME (decision 0512). A
|
|
2000
|
+
* @description EXPLICIT, PER TARGET, EVERY TIME (decision 0512). A key is never attached to a target by the
|
|
1994
2001
|
* scope it happens to sit in: somebody with the right to grant it picks the entry and attaches
|
|
1995
2002
|
* it to THAT target, and again for the next one. It is a grant the one authorization service
|
|
1996
2003
|
* resolves, never a copy of the secret.
|
|
@@ -3118,6 +3125,31 @@ export interface components {
|
|
|
3118
3125
|
* leaves it suspended.
|
|
3119
3126
|
*/
|
|
3120
3127
|
suspended_at: components["schemas"]["Timestamp"] | null;
|
|
3128
|
+
/**
|
|
3129
|
+
* @description "KEPT BY A LEGAL HOLD", AND SINCE WHEN — the line of a ghost row under the Trash filter
|
|
3130
|
+
* (decision 0672). What is kept is what the glossary calls a Ghost: the key was deleted for
|
|
3131
|
+
* good while a Compliance legal hold covered it, so it is out of use and erased when the
|
|
3132
|
+
* hold is released. A ROW CARRYING IT CANNOT BE OPENED, CHANGED, ROTATED, MOVED, REVEALED,
|
|
3133
|
+
* USED OR RESTORED: every operation on one key answers its id as a key that is not there.
|
|
3134
|
+
*
|
|
3135
|
+
* THE ONE FIELD OF A KEY THAT MAY BE LEFT OUT, AND IT IS NEVER `null`. It is the deletion
|
|
3136
|
+
* service's to answer, for whoever is looking, and "a ghost is never shown unasked"
|
|
3137
|
+
* (decision 0686): so it is present exactly on a ghost this caller may see, which only the
|
|
3138
|
+
* Trash filter of the list draws. LEFT OUT MEANS ONLY THAT THIS ROW IS NO GHOST.
|
|
3139
|
+
*/
|
|
3140
|
+
kept_by_legal_hold?: components["schemas"]["KeptByLegalHold"];
|
|
3141
|
+
};
|
|
3142
|
+
/**
|
|
3143
|
+
* @description A KEY A LEGAL HOLD KEEPS: out of use, unreadable, and erased when the hold is released. It
|
|
3144
|
+
* names no hold and gives no reason — those are the Compliance app's, for the people allowed
|
|
3145
|
+
* to see them — and it carries no end date, because a hold has none.
|
|
3146
|
+
*/
|
|
3147
|
+
KeptByLegalHold: {
|
|
3148
|
+
/**
|
|
3149
|
+
* @description SINCE WHEN IT IS KEPT: the moment it was deleted for good, never the moment the hold was
|
|
3150
|
+
* placed (the glossary's Ghost). Every app that points at one key shows this one moment.
|
|
3151
|
+
*/
|
|
3152
|
+
since: components["schemas"]["Timestamp"];
|
|
3121
3153
|
};
|
|
3122
3154
|
/**
|
|
3123
3155
|
* @description WHAT PUT A KEY IN THE TRASH, AND ITS NAME AS IT WAS THEN. The name is kept, never looked up:
|
|
@@ -4872,7 +4904,10 @@ export interface operations {
|
|
|
4872
4904
|
key_ring_id?: components["schemas"]["Id"];
|
|
4873
4905
|
/** @description Only keys of this kind. */
|
|
4874
4906
|
kind?: components["schemas"]["KeyKind"];
|
|
4875
|
-
/**
|
|
4907
|
+
/**
|
|
4908
|
+
* @description The Trash instead of the list — the keys waiting out their keep-time, and after them the
|
|
4909
|
+
* keys a legal hold keeps, each carrying `kept_by_legal_hold`.
|
|
4910
|
+
*/
|
|
4876
4911
|
in_trash?: boolean;
|
|
4877
4912
|
/**
|
|
4878
4913
|
* @description Only the suspended keys — the Suspended chip. Left out, suspended and unsuspended keys are
|
|
@@ -5752,7 +5787,10 @@ export interface operations {
|
|
|
5752
5787
|
* than the freshness window, or there has never been one, and for a credential that is not
|
|
5753
5788
|
* a person's signed-in session this is final. Or `device_wiped`. Or
|
|
5754
5789
|
* `fill_device_not_managed`: your company fills keys only on its managed devices, and
|
|
5755
|
-
* Devices did not say this one is managed and compliant.
|
|
5790
|
+
* Devices did not say this one is managed and compliant. Its `detail` names Devices'
|
|
5791
|
+
* reason in Devices' own words — `not_enrolled`, `not_compliant`, `unknown`, `stale`,
|
|
5792
|
+
* `exempt`, `check_in_too_old` or `device_not_there` — or `no_device_named` when this
|
|
5793
|
+
* session was signed in on no device.
|
|
5756
5794
|
*/
|
|
5757
5795
|
403: {
|
|
5758
5796
|
headers: {
|
package/generated/storage.d.ts
CHANGED
|
@@ -4390,6 +4390,9 @@ export interface components {
|
|
|
4390
4390
|
* credential lacks the permission when all that is known is that we could not ask (decision
|
|
4391
4391
|
* 0553). Every operation can raise it, the ungated ones included: a revoked credential dies on
|
|
4392
4392
|
* the next check and that check is the same hop.
|
|
4393
|
+
*
|
|
4394
|
+
* Or Storage's own database could not be reached — `database_unavailable` (ONPLO-5128). Nothing
|
|
4395
|
+
* ran, and the same request can be sent again.
|
|
4393
4396
|
*/
|
|
4394
4397
|
ServiceUnavailable: {
|
|
4395
4398
|
headers: {
|
|
@@ -4399,7 +4402,7 @@ export interface components {
|
|
|
4399
4402
|
content: {
|
|
4400
4403
|
"application/problem+json": components["schemas"]["Problem"] & {
|
|
4401
4404
|
/** @enum {unknown} */
|
|
4402
|
-
code?: "authorization_unavailable";
|
|
4405
|
+
code?: "authorization_unavailable" | "database_unavailable";
|
|
4403
4406
|
};
|
|
4404
4407
|
};
|
|
4405
4408
|
};
|
|
@@ -4417,6 +4420,9 @@ export interface components {
|
|
|
4417
4420
|
* item, changing a share and ending one are written by the identity service itself. When it
|
|
4418
4421
|
* could not be reached, whether the share changed is not known — and sending the same request
|
|
4419
4422
|
* again is the same act, never a second share.
|
|
4423
|
+
*
|
|
4424
|
+
* Or Storage's own database could not be reached — `database_unavailable` (ONPLO-5128). Nothing
|
|
4425
|
+
* ran, and the same request can be sent again.
|
|
4420
4426
|
*/
|
|
4421
4427
|
IdentityUnavailable: {
|
|
4422
4428
|
headers: {
|
|
@@ -4426,7 +4432,7 @@ export interface components {
|
|
|
4426
4432
|
content: {
|
|
4427
4433
|
"application/problem+json": components["schemas"]["Problem"] & {
|
|
4428
4434
|
/** @enum {unknown} */
|
|
4429
|
-
code?: "authorization_unavailable" | "identity_unavailable";
|
|
4435
|
+
code?: "authorization_unavailable" | "identity_unavailable" | "database_unavailable";
|
|
4430
4436
|
};
|
|
4431
4437
|
};
|
|
4432
4438
|
};
|
|
@@ -4455,6 +4461,9 @@ export interface components {
|
|
|
4455
4461
|
* upload's parts and cuts them (ONPLO-2344), hands out the address a file is read from
|
|
4456
4462
|
* (ONPLO-2720), and keeps and restores a file's work sessions (ONPLO-2758, ONPLO-2761). The same
|
|
4457
4463
|
* request can be sent again; a part already sent stays sent.
|
|
4464
|
+
*
|
|
4465
|
+
* Or Storage's own database could not be reached — `database_unavailable` (ONPLO-5128). Nothing
|
|
4466
|
+
* ran, and the same request can be sent again.
|
|
4458
4467
|
*/
|
|
4459
4468
|
ObjectStoreUnavailable: {
|
|
4460
4469
|
headers: {
|
|
@@ -4464,7 +4473,7 @@ export interface components {
|
|
|
4464
4473
|
content: {
|
|
4465
4474
|
"application/problem+json": components["schemas"]["Problem"] & {
|
|
4466
4475
|
/** @enum {unknown} */
|
|
4467
|
-
code?: "authorization_unavailable" | "object_store_unavailable";
|
|
4476
|
+
code?: "authorization_unavailable" | "object_store_unavailable" | "database_unavailable";
|
|
4468
4477
|
};
|
|
4469
4478
|
};
|
|
4470
4479
|
};
|
|
@@ -4474,6 +4483,9 @@ export interface components {
|
|
|
4474
4483
|
* (`object_store_unavailable`), or the identity service, which is told a file exists before
|
|
4475
4484
|
* anyone can see it (`identity_unavailable`, decision 0635). The upload stays as it was, and
|
|
4476
4485
|
* finishing it again is safe.
|
|
4486
|
+
*
|
|
4487
|
+
* Or Storage's own database could not be reached — `database_unavailable` (ONPLO-5128). Nothing
|
|
4488
|
+
* ran, and the same request can be sent again.
|
|
4477
4489
|
*/
|
|
4478
4490
|
UploadCompletionUnavailable: {
|
|
4479
4491
|
headers: {
|
|
@@ -4483,7 +4495,7 @@ export interface components {
|
|
|
4483
4495
|
content: {
|
|
4484
4496
|
"application/problem+json": components["schemas"]["Problem"] & {
|
|
4485
4497
|
/** @enum {unknown} */
|
|
4486
|
-
code?: "authorization_unavailable" | "object_store_unavailable" | "identity_unavailable";
|
|
4498
|
+
code?: "authorization_unavailable" | "object_store_unavailable" | "identity_unavailable" | "database_unavailable";
|
|
4487
4499
|
};
|
|
4488
4500
|
};
|
|
4489
4501
|
};
|
|
@@ -4494,6 +4506,9 @@ export interface components {
|
|
|
4494
4506
|
* event choices, so there was nothing to answer from and nothing was stored. The same request
|
|
4495
4507
|
* can be sent again. The two operations on Storage's own events answer this in place of the
|
|
4496
4508
|
* shared `503`.
|
|
4509
|
+
*
|
|
4510
|
+
* Or Storage's own database could not be reached — `database_unavailable` (ONPLO-5128). Nothing
|
|
4511
|
+
* ran, and the same request can be sent again.
|
|
4497
4512
|
*/
|
|
4498
4513
|
NotificationsUnavailable: {
|
|
4499
4514
|
headers: {
|
|
@@ -4503,7 +4518,7 @@ export interface components {
|
|
|
4503
4518
|
content: {
|
|
4504
4519
|
"application/problem+json": components["schemas"]["Problem"] & {
|
|
4505
4520
|
/** @enum {unknown} */
|
|
4506
|
-
code?: "authorization_unavailable" | "notifications_unavailable";
|
|
4521
|
+
code?: "authorization_unavailable" | "notifications_unavailable" | "database_unavailable";
|
|
4507
4522
|
};
|
|
4508
4523
|
};
|
|
4509
4524
|
};
|
|
@@ -4515,6 +4530,9 @@ export interface components {
|
|
|
4515
4530
|
* is not "not held": no list is answered and no switch is refused in its place. The same
|
|
4516
4531
|
* request can be sent again. The two operations on your own Storage features, and the two
|
|
4517
4532
|
* on retention, answer this in place of the shared `503`.
|
|
4533
|
+
*
|
|
4534
|
+
* Or Storage's own database could not be reached — `database_unavailable` (ONPLO-5128). Nothing
|
|
4535
|
+
* ran, and the same request can be sent again.
|
|
4518
4536
|
*/
|
|
4519
4537
|
AccountUnavailable: {
|
|
4520
4538
|
headers: {
|
|
@@ -4524,7 +4542,7 @@ export interface components {
|
|
|
4524
4542
|
content: {
|
|
4525
4543
|
"application/problem+json": components["schemas"]["Problem"] & {
|
|
4526
4544
|
/** @enum {unknown} */
|
|
4527
|
-
code?: "authorization_unavailable" | "account_unavailable";
|
|
4545
|
+
code?: "authorization_unavailable" | "account_unavailable" | "database_unavailable";
|
|
4528
4546
|
};
|
|
4529
4547
|
};
|
|
4530
4548
|
};
|
|
@@ -8622,6 +8640,9 @@ export interface operations {
|
|
|
8622
8640
|
/**
|
|
8623
8641
|
* @description The file store could not be asked for the address (`object_store_unavailable`). Nothing
|
|
8624
8642
|
* was counted or spent; the same request can be sent again.
|
|
8643
|
+
*
|
|
8644
|
+
* Or Storage's own database could not be reached — `database_unavailable` (ONPLO-5128). Nothing
|
|
8645
|
+
* ran, and the same request can be sent again.
|
|
8625
8646
|
*/
|
|
8626
8647
|
503: {
|
|
8627
8648
|
headers: {
|
|
@@ -8631,7 +8652,7 @@ export interface operations {
|
|
|
8631
8652
|
content: {
|
|
8632
8653
|
"application/problem+json": components["schemas"]["Problem"] & {
|
|
8633
8654
|
/** @enum {unknown} */
|
|
8634
|
-
code?: "object_store_unavailable";
|
|
8655
|
+
code?: "object_store_unavailable" | "database_unavailable";
|
|
8635
8656
|
};
|
|
8636
8657
|
};
|
|
8637
8658
|
};
|
|
@@ -8802,6 +8823,9 @@ export interface operations {
|
|
|
8802
8823
|
/**
|
|
8803
8824
|
* @description The file store could not be asked for the address (`object_store_unavailable`). Nothing
|
|
8804
8825
|
* was recorded; the same request can be sent again.
|
|
8826
|
+
*
|
|
8827
|
+
* Or Storage's own database could not be reached — `database_unavailable` (ONPLO-5128). Nothing
|
|
8828
|
+
* ran, and the same request can be sent again.
|
|
8805
8829
|
*/
|
|
8806
8830
|
503: {
|
|
8807
8831
|
headers: {
|
|
@@ -8811,7 +8835,7 @@ export interface operations {
|
|
|
8811
8835
|
content: {
|
|
8812
8836
|
"application/problem+json": components["schemas"]["Problem"] & {
|
|
8813
8837
|
/** @enum {unknown} */
|
|
8814
|
-
code?: "object_store_unavailable";
|
|
8838
|
+
code?: "object_store_unavailable" | "database_unavailable";
|
|
8815
8839
|
};
|
|
8816
8840
|
};
|
|
8817
8841
|
};
|
|
@@ -8882,6 +8906,9 @@ export interface operations {
|
|
|
8882
8906
|
/**
|
|
8883
8907
|
* @description The file store could not be asked for the zip (`object_store_unavailable`). Nothing was
|
|
8884
8908
|
* recorded; the same request can be sent again.
|
|
8909
|
+
*
|
|
8910
|
+
* Or Storage's own database could not be reached — `database_unavailable` (ONPLO-5128). Nothing
|
|
8911
|
+
* ran, and the same request can be sent again.
|
|
8885
8912
|
*/
|
|
8886
8913
|
503: {
|
|
8887
8914
|
headers: {
|
|
@@ -8891,7 +8918,7 @@ export interface operations {
|
|
|
8891
8918
|
content: {
|
|
8892
8919
|
"application/problem+json": components["schemas"]["Problem"] & {
|
|
8893
8920
|
/** @enum {unknown} */
|
|
8894
|
-
code?: "object_store_unavailable";
|
|
8921
|
+
code?: "object_store_unavailable" | "database_unavailable";
|
|
8895
8922
|
};
|
|
8896
8923
|
};
|
|
8897
8924
|
};
|