primcli 3.0.0-preview.1 → 3.0.0-preview.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -2
- package/dist/{api-command-ctHBqTL5.js → api-command-DWjtyqH9.js} +52 -11
- package/dist/{json-output-BzSBR-KX.js → json-output-DWrJMakZ.js} +7 -1
- package/dist/{machine-session-Cp_eQ9t_.js → machine-session-BG4getHB.js} +4 -4
- package/dist/{notify-session-BN0JTPZ3.js → notify-session-8Jv4jJzI.js} +2 -2
- package/dist/oclif/auto-signal-worker.js +3 -3
- package/dist/oclif/auto-signals.js +1 -1
- package/dist/oclif/index.js +2960 -465
- package/dist/oclif/proxy-auto-detect.js +1 -1
- package/dist/oclif/receiver-heal.js +2 -2
- package/dist/{repeats-Dj_o6c-X-Bf9G0xds.js → repeats-Dj_o6c-X-BKHiZsYv.js} +80 -24
- package/dist/{scoped-chat-DZ42V3jq.js → scoped-chat-_AEpylPV.js} +1 -1
- package/dist/{signal-command-CRUMUCNa.js → signal-command-CBHAR7zj.js} +4 -4
- package/man/primitive.1 +13 -3
- package/package.json +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { N as agentProfileDirectory, P as agentProfileName, R as loadConnectedAgentProfile, j as AGENT_PROFILE_ENV } from "../cli-config-Ms_0vNjq.js";
|
|
2
2
|
import { a as claimBackgroundListenRestart, n as backgroundListenRestartable, r as backgroundListenStatus } from "../listen-background-C0F9gNDD.js";
|
|
3
|
-
import { d as SESSION_UUID, t as notificationScope } from "../notify-session-
|
|
4
|
-
import {
|
|
3
|
+
import { d as SESSION_UUID, t as notificationScope } from "../notify-session-8Jv4jJzI.js";
|
|
4
|
+
import { wt as detectAgentRuntime } from "../api-command-DWjtyqH9.js";
|
|
5
5
|
import { d as readMailJson } from "../shared-mail-files-BAQSGxxz.js";
|
|
6
6
|
import { join } from "node:path";
|
|
7
7
|
import { spawn } from "node:child_process";
|
|
@@ -129,6 +129,7 @@ var sdk_gen_exports = /* @__PURE__ */ __exportAll({
|
|
|
129
129
|
getEmailReadable: () => getEmailReadable,
|
|
130
130
|
getEmailRule: () => getEmailRule,
|
|
131
131
|
getEmailRuleRequest: () => getEmailRuleRequest,
|
|
132
|
+
getEmailRuleScope: () => getEmailRuleScope,
|
|
132
133
|
getEmailRuleShare: () => getEmailRuleShare,
|
|
133
134
|
getFunction: () => getFunction,
|
|
134
135
|
getFunctionDeployment: () => getFunctionDeployment,
|
|
@@ -192,8 +193,11 @@ var sdk_gen_exports = /* @__PURE__ */ __exportAll({
|
|
|
192
193
|
listEmailAttachmentArchiveMembers: () => listEmailAttachmentArchiveMembers,
|
|
193
194
|
listEmailRuleDecisions: () => listEmailRuleDecisions,
|
|
194
195
|
listEmailRuleRequests: () => listEmailRuleRequests,
|
|
196
|
+
listEmailRuleResults: () => listEmailRuleResults,
|
|
197
|
+
listEmailRuleScopeOptions: () => listEmailRuleScopeOptions,
|
|
195
198
|
listEmailRuleShareEmails: () => listEmailRuleShareEmails,
|
|
196
199
|
listEmailRuleShares: () => listEmailRuleShares,
|
|
200
|
+
listEmailRuleVersions: () => listEmailRuleVersions,
|
|
197
201
|
listEmailRules: () => listEmailRules,
|
|
198
202
|
listEmails: () => listEmails,
|
|
199
203
|
listEndpoints: () => listEndpoints,
|
|
@@ -3594,7 +3598,7 @@ const compileEmailRule = (options) => (options.client ?? client).post({
|
|
|
3594
3598
|
/**
|
|
3595
3599
|
* Test a rule against received mail
|
|
3596
3600
|
*
|
|
3597
|
-
* Runs a rule over received mail and reports what it would decide for each email: matched, near_miss, no_match, unclassified or not_found. Test an unsaved tree from a compile response, or a saved rule by rule_id (its current version, run with its author's access). Either way the rule reads only mail its author can read. Without email_ids, the newest emails it can read are tested, at most 200 and none older than 30 days. Emails not classified yet that arrived more than 2 hours ago are classified first and their classification is saved, unless classify_missing is false; newer ones are left to normal classification and reported unclassified with reason pending. The rule itself records nothing and grants nothing. Classification and the rule's own questions stop at about 90 seconds; run the test again to continue where it stopped. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3601
|
+
* Runs a rule over received mail and reports what it would decide for each email: matched, near_miss, no_match, unclassified or not_found. Test an unsaved tree from a compile response, or a saved rule by rule_id (its current version, run with its author's access). Either way the rule reads only mail its author can read, and only what its scope covers; an unsaved tree covers only your own mail unless evaluation_scope names more. Without email_ids, the newest emails it can read are tested, at most 200 and none older than 30 days. Emails not classified yet that arrived more than 2 hours ago are classified first and their classification is saved, unless classify_missing is false; newer ones are left to normal classification and reported unclassified with reason pending. The rule itself records nothing and grants nothing. Classification and the rule's own questions stop at about 90 seconds; run the test again to continue where it stopped. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3598
3602
|
*/
|
|
3599
3603
|
const testEmailRule = (options) => (options.client ?? client).post({
|
|
3600
3604
|
security: [{
|
|
@@ -3611,7 +3615,7 @@ const testEmailRule = (options) => (options.client ?? client).post({
|
|
|
3611
3615
|
/**
|
|
3612
3616
|
* Test a rule against a made-up email
|
|
3613
3617
|
*
|
|
3614
|
-
* Reports what a rule would decide for an email you describe: its sender, recipients, subject, plain text and attachment types, and optionally whether it is automated or from a mailing list and its spam score. The email is classified the way received mail is, and the rule's conditions and its own questions are decided as they would be for received mail with that content and those signals, received now. Without them it is not automated and not from a mailing list; a rule that reads a spam score you gave none for is decided on no score, and spam_score is listed in unset_columns. Nothing is stored: no email, classification or decision. Test an unsaved tree from a compile response, or a saved rule by rule_id (its current version). The answer includes what the classifier read from the email. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3618
|
+
* Reports what a rule would decide for an email you describe: its sender, recipients, subject, plain text and attachment types, and optionally whether it is automated or from a mailing list and its spam score. The email is classified the way received mail is, and the rule's conditions and its own questions are decided as they would be for received mail with that content and those signals, received now. Without them it is not automated and not from a mailing list; a rule that reads a spam score you gave none for is decided on no score, and spam_score is listed in unset_columns. Nothing is stored: no email, classification or decision. Test an unsaved tree from a compile response, or a saved rule by rule_id (its current version); an unsaved tree is run as covering only your own mail unless evaluation_scope names more, as on POST /email-rules/test. The answer includes what the classifier read from the email. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3615
3619
|
*/
|
|
3616
3620
|
const testEmailRuleOnSample = (options) => (options.client ?? client).post({
|
|
3617
3621
|
security: [{
|
|
@@ -3628,7 +3632,7 @@ const testEmailRuleOnSample = (options) => (options.client ?? client).post({
|
|
|
3628
3632
|
/**
|
|
3629
3633
|
* List rules
|
|
3630
3634
|
*
|
|
3631
|
-
* The rules the caller can see, newest first: their own, or every member's rules for a caller who reads the whole organization's mail. With matched_email_id, only the rules that matched that email. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3635
|
+
* The rules the caller can see, newest first: their own, or every member's rules for a caller who reads the whole organization's mail. Each carries its scope (evaluation_scope, and scope_selection for a selected rule). With matched_email_id, only the rules that matched that email. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3632
3636
|
*/
|
|
3633
3637
|
const listEmailRules = (options) => (options?.client ?? client).get({
|
|
3634
3638
|
security: [{
|
|
@@ -3641,7 +3645,7 @@ const listEmailRules = (options) => (options?.client ?? client).get({
|
|
|
3641
3645
|
/**
|
|
3642
3646
|
* Create a rule
|
|
3643
3647
|
*
|
|
3644
|
-
* Saves a rule as version 1, from a compile response or a tree you wrote. The tree is checked against the column contract. New rules start in observe, where what the rule matches is recorded and nothing is granted; draft is not evaluated. The caller is the rule's author, and the rule never reaches mail the author cannot read. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3648
|
+
* Saves a rule as version 1, from a compile response or a tree you wrote. The tree is checked against the column contract. New rules start in observe, where what the rule matches is recorded and nothing is granted or blocked; draft is not evaluated. The caller is the rule's author, and the rule never reaches mail the author cannot read. evaluation_scope chooses whose mail it runs over: own_mailboxes (only your own mail) when omitted, so any other scope (author for all you can read, or selected) is named; scope_selection may name only what you can read. The answer carries the scope as stored. kind do_not_share makes a rule that blocks sharing: it runs before every other rule, and while it is active no rule shares an email it matches or cannot decide. A key cannot list one (details.reason rule_blocks_sharing on the key). Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3645
3649
|
*/
|
|
3646
3650
|
const createEmailRule = (options) => (options.client ?? client).post({
|
|
3647
3651
|
security: [{
|
|
@@ -3671,7 +3675,7 @@ const deleteEmailRule = (options) => (options.client ?? client).delete({
|
|
|
3671
3675
|
/**
|
|
3672
3676
|
* Read a rule
|
|
3673
3677
|
*
|
|
3674
|
-
* A rule and its current version. The SQL the version renders to is included only when include_sql is true. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3678
|
+
* A rule, its scope (evaluation_scope, and scope_selection for a selected rule) and its current version. What the scope comes to for its author now is GET /email-rules/{id}/scope. The SQL the version renders to is included only when include_sql is true. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3675
3679
|
*/
|
|
3676
3680
|
const getEmailRule = (options) => (options.client ?? client).get({
|
|
3677
3681
|
security: [{
|
|
@@ -3684,7 +3688,7 @@ const getEmailRule = (options) => (options.client ?? client).get({
|
|
|
3684
3688
|
/**
|
|
3685
3689
|
* Change a rule
|
|
3686
3690
|
*
|
|
3687
|
-
* Renames the rule, saves a new version (english, tree and explanation together; earlier versions are kept unchanged)
|
|
3691
|
+
* Renames the rule, saves a new version (english, tree and explanation together; earlier versions are kept unchanged), changes its state (draft, disabled; observe; or active) or changes whose mail it runs over (evaluation_scope, with scope_selection when selected). Only the rule's author may rename it, add a version, change its scope or move it to observe or active; anyone else who can see it may only disable it (state draft), and while it is shared with another member only if they manage members from the dashboard. Omit evaluation_scope to keep the current scope. A scope change saves a new version with the same conditions; what was granted stays. A shared rule keeps its scope. A rule's kind never changes. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3688
3692
|
*/
|
|
3689
3693
|
const updateEmailRule = (options) => (options.client ?? client).patch({
|
|
3690
3694
|
security: [{
|
|
@@ -3712,6 +3716,58 @@ const listEmailRuleDecisions = (options) => (options.client ?? client).get({
|
|
|
3712
3716
|
...options
|
|
3713
3717
|
});
|
|
3714
3718
|
/**
|
|
3719
|
+
* List every rule's result on an email
|
|
3720
|
+
*
|
|
3721
|
+
* Every rule the caller can see and what it decided about this email: those that matched, those that did not, and those that have not run on it, with what is known about them. A result names the version of the rule that decided and carries that version's conditions and questions. A matched rule with kind do_not_share keeps rules from sharing the email while it is active; anything shared before then stays shared. Only a caller who can read the email gets an answer, and a rule the caller cannot see is left out. At most 50 rules are listed, those with a result first; hidden counts the rest. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3722
|
+
*/
|
|
3723
|
+
const listEmailRuleResults = (options) => (options.client ?? client).get({
|
|
3724
|
+
security: [{
|
|
3725
|
+
scheme: "bearer",
|
|
3726
|
+
type: "http"
|
|
3727
|
+
}],
|
|
3728
|
+
url: "/emails/{id}/rule-results",
|
|
3729
|
+
...options
|
|
3730
|
+
});
|
|
3731
|
+
/**
|
|
3732
|
+
* Read versions of a rule
|
|
3733
|
+
*
|
|
3734
|
+
* The named versions of a rule, as they were written: what each one's conditions and questions were, so a decision can be read against the version that made it. Numbers that are not versions of the rule are left out. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3735
|
+
*/
|
|
3736
|
+
const listEmailRuleVersions = (options) => (options.client ?? client).get({
|
|
3737
|
+
security: [{
|
|
3738
|
+
scheme: "bearer",
|
|
3739
|
+
type: "http"
|
|
3740
|
+
}],
|
|
3741
|
+
url: "/email-rules/{id}/versions",
|
|
3742
|
+
...options
|
|
3743
|
+
});
|
|
3744
|
+
/**
|
|
3745
|
+
* Read what a rule covers
|
|
3746
|
+
*
|
|
3747
|
+
* Whose mail the rule runs over, and what that comes to now: a rule never reaches further than what its author can read when it runs, so what a selected rule names and its author can no longer read stops matching. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3748
|
+
*/
|
|
3749
|
+
const getEmailRuleScope = (options) => (options.client ?? client).get({
|
|
3750
|
+
security: [{
|
|
3751
|
+
scheme: "bearer",
|
|
3752
|
+
type: "http"
|
|
3753
|
+
}],
|
|
3754
|
+
url: "/email-rules/{id}/scope",
|
|
3755
|
+
...options
|
|
3756
|
+
});
|
|
3757
|
+
/**
|
|
3758
|
+
* List what a rule can cover
|
|
3759
|
+
*
|
|
3760
|
+
* How much the caller can read, and the inboxes and domains the caller can read, which is what they may name when a rule runs over selected inboxes and domains. For a caller who reads the whole organization, addresses lists the inboxes known as someone's (member addresses, members' verified work emails at the organization's domains, agents' addresses and inboxes with shared access), not every address that receives mail: may_name_unlisted says when an address that is not listed, such as an inbox nobody has claimed, may be named too. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
3761
|
+
*/
|
|
3762
|
+
const listEmailRuleScopeOptions = (options) => (options?.client ?? client).get({
|
|
3763
|
+
security: [{
|
|
3764
|
+
scheme: "bearer",
|
|
3765
|
+
type: "http"
|
|
3766
|
+
}],
|
|
3767
|
+
url: "/email-rule-scope-options",
|
|
3768
|
+
...options
|
|
3769
|
+
});
|
|
3770
|
+
/**
|
|
3715
3771
|
* List rule requests
|
|
3716
3772
|
*
|
|
3717
3773
|
* Rule requests, newest first: those made to you (box incoming, the default), those you made (outgoing), or every one you can see (all). Pending ones by default; status decided lists accepted, declined and withdrawn ones, and any lists both. A request is visible to the member who made it, the member it was made to, and the organization's owners and admins. Needs mail:read, a credential acting as a member with their full access (API keys, agent keys and narrowed tokens are refused), and the email rules feature on the organization.
|
|
@@ -4670,7 +4726,7 @@ const updateGroup = (options) => (options.client ?? client).patch({
|
|
|
4670
4726
|
/**
|
|
4671
4727
|
* List every credential
|
|
4672
4728
|
*
|
|
4673
|
-
* Every credential that can act in the organization: API keys, Function keys, agent connection keys, connected apps (OAuth), agent delegates and, where enabled, CLI logins. Secrets are never returned. Filter with kind. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled.
|
|
4729
|
+
* Every credential that can act in the organization: API keys, Function keys, agent connection keys, connected apps (OAuth), agent delegates and, where enabled, CLI logins. Secrets are never returned. Filter with kind. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled, with details.feature naming the feature. Only Primitive turns these on.
|
|
4674
4730
|
*
|
|
4675
4731
|
* Person only: a dashboard session. The person's role must hold credentials:read. API keys, agent connection keys and agents are refused.
|
|
4676
4732
|
*/
|
|
@@ -4685,7 +4741,7 @@ const listCredentials = (options) => (options?.client ?? client).get({
|
|
|
4685
4741
|
/**
|
|
4686
4742
|
* Revoke a credential
|
|
4687
4743
|
*
|
|
4688
|
-
* Revoke one credential by kind and id. A Function key is rotated, never revoked (409 rotate_instead). An API key is revoked only by a person whose own access covers the key's access (an owner covers every key); otherwise 403 grant_forbidden, details.reason target_not_covered. What the credential set up keeps working and is listed in standing_objects for review. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled.
|
|
4744
|
+
* Revoke one credential by kind and id. A Function key is rotated, never revoked (409 rotate_instead). An API key is revoked only by a person whose own access covers the key's access (an owner covers every key); otherwise 403 grant_forbidden, details.reason target_not_covered. What the credential set up keeps working and is listed in standing_objects for review. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled, with details.feature naming the feature. Only Primitive turns these on.
|
|
4689
4745
|
*
|
|
4690
4746
|
* Person only: a dashboard session. The person's role must hold keys:manage. API keys, agent connection keys and agents are refused.
|
|
4691
4747
|
*/
|
|
@@ -4704,7 +4760,7 @@ const revokeCredential = (options) => (options.client ?? client).post({
|
|
|
4704
4760
|
/**
|
|
4705
4761
|
* Revoke every credential (emergency)
|
|
4706
4762
|
*
|
|
4707
|
-
* The emergency response to a leak: revokes every API key, agent connection key and connected app created since a time, rotates the organization Function key and every running Function's own key, and optionally suspends Functions. Owners only, from a dashboard session, and the body must confirm with "revoke all". Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled.
|
|
4763
|
+
* The emergency response to a leak: revokes every API key, agent connection key and connected app created since a time, rotates the organization Function key and every running Function's own key, and optionally suspends Functions. Owners only, from a dashboard session, and the body must confirm with "revoke all". Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled, with details.feature naming the feature. Only Primitive turns these on.
|
|
4708
4764
|
*
|
|
4709
4765
|
* Person only: a dashboard session. The person's role must hold credentials:revoke_all. API keys, agent connection keys and agents are refused.
|
|
4710
4766
|
*/
|
|
@@ -4723,7 +4779,7 @@ const revokeAllCredentials = (options) => (options.client ?? client).post({
|
|
|
4723
4779
|
/**
|
|
4724
4780
|
* Read the credential audit trail
|
|
4725
4781
|
*
|
|
4726
|
-
* Credential events (created, rotated, edited, revoked, used with a step-up, policy changes), newest first, with a cursor. format=csv returns the same page as CSV. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled.
|
|
4782
|
+
* Credential events (created, rotated, edited, revoked, used with a step-up, policy changes), newest first, with a cursor. format=csv returns the same page as CSV. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled, with details.feature naming the feature. Only Primitive turns these on.
|
|
4727
4783
|
*
|
|
4728
4784
|
* Person only: a dashboard session. The person's role must hold credential_events:read. API keys, agent connection keys and agents are refused.
|
|
4729
4785
|
*/
|
|
@@ -4738,7 +4794,7 @@ const listCredentialEvents = (options) => (options?.client ?? client).get({
|
|
|
4738
4794
|
/**
|
|
4739
4795
|
* Read the credential policy
|
|
4740
4796
|
*
|
|
4741
|
-
* The organization credential policy: key lifetime and expiry rules, who may create super admin keys, whether members may create keys and the other rules every new key is held to. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled.
|
|
4797
|
+
* The organization credential policy: key lifetime and expiry rules, who may create super admin keys, whether members may create keys and the other rules every new key is held to. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled, with details.feature naming the feature. Only Primitive turns these on.
|
|
4742
4798
|
*
|
|
4743
4799
|
* Person only: a dashboard session. The person's role must hold credentials:read. API keys, agent connection keys and agents are refused.
|
|
4744
4800
|
*/
|
|
@@ -4753,7 +4809,7 @@ const getCredentialPolicy = (options) => (options?.client ?? client).get({
|
|
|
4753
4809
|
/**
|
|
4754
4810
|
* Change the credential policy
|
|
4755
4811
|
*
|
|
4756
|
-
* Change one or more policy rules. Admins may only tighten the policy; loosening any rule needs an owner. Owners and admins are emailed about every change. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled.
|
|
4812
|
+
* Change one or more policy rules. Admins may only tighten the policy; loosening any rule needs an owner. Owners and admins are emailed about every change. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled, with details.feature naming the feature. Only Primitive turns these on.
|
|
4757
4813
|
*
|
|
4758
4814
|
* Person only: a dashboard session. The person's role must hold credential_policy:manage. API keys, agent connection keys and agents are refused.
|
|
4759
4815
|
*/
|
|
@@ -4772,7 +4828,7 @@ const updateCredentialPolicy = (options) => (options.client ?? client).patch({
|
|
|
4772
4828
|
/**
|
|
4773
4829
|
* Read the key builder
|
|
4774
4830
|
*
|
|
4775
|
-
* The key presets the caller may use (each with whether it is available and why not), the permission matrix for custom keys and the policy in force. An area marked org_wide_only (Members) is listed only to a person who holds its permission, and only a custom key with no addresses or domains may hold it. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled.
|
|
4831
|
+
* The key presets the caller may use (each with whether it is available and why not), the permission matrix for custom keys and the policy in force. An area marked org_wide_only (Members) is listed only to a person who holds its permission, and only a custom key with no addresses or domains may hold it. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled, with details.feature naming the feature. Only Primitive turns these on.
|
|
4776
4832
|
*
|
|
4777
4833
|
* Person only: a dashboard session. The person's role must hold keys:read. API keys, agent connection keys and agents are refused.
|
|
4778
4834
|
*/
|
|
@@ -4787,7 +4843,7 @@ const getKeyBuilder = (options) => (options?.client ?? client).get({
|
|
|
4787
4843
|
/**
|
|
4788
4844
|
* List API keys
|
|
4789
4845
|
*
|
|
4790
|
-
* Key metadata, never a secret: name, prefix, grant, creator, last use, expiry and suspension. The person needs access to the whole organization's mail. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled.
|
|
4846
|
+
* Key metadata, never a secret: name, prefix, grant, creator, last use, expiry and suspension. The person needs access to the whole organization's mail. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled, with details.feature naming the feature. Only Primitive turns these on.
|
|
4791
4847
|
*
|
|
4792
4848
|
* Person only: a dashboard session or the person's own Primitive CLI token; no other OAuth app. The person's role must hold keys:read. API keys, agent connection keys and agents are refused.
|
|
4793
4849
|
*/
|
|
@@ -4802,9 +4858,9 @@ const listKeys = (options) => (options?.client ?? client).get({
|
|
|
4802
4858
|
/**
|
|
4803
4859
|
* Create an API key
|
|
4804
4860
|
*
|
|
4805
|
-
* Create an API key, super admin or narrowed to a preset or a custom permission set, optionally with an expiry and conditions. The secret is returned once. A key never holds more than the person creating it; the credential policy decides who may create which keys. grant is required: a request without it is refused (400 validation_error, details.reason grant_required), never treated as super admin. A custom key must say which mail it reaches: the addresses and domains it lists (grant.addresses, grant.domains), or every mailbox in the organization with grant.mail_scope "org", which cannot be combined with them; one that says neither is refused (400 validation_error, details.reason mail_scope_required). Super admin, Send only and Read only reach every mailbox by definition. members:read is only for an org-wide custom key: naming it with grant.addresses or grant.domains is refused (400). Owners and admins are emailed about every super admin key. Send an Idempotency-Key to retry safely: a second create by the same person under the same key makes no second key and is refused (409 idempotency_key_reused) with the first key's id in error.details.key_id, so a caller whose first answer was lost can revoke that key. The onboarding field is for the dashboard only. The
|
|
4861
|
+
* Create an API key, super admin or narrowed to a preset or a custom permission set, optionally with an expiry and conditions. The secret is returned once. A key never holds more than the person creating it; the credential policy decides who may create which keys. grant is required: a request without it is refused (400 validation_error, details.reason grant_required), never treated as super admin. A custom key must say which mail it reaches: the addresses and domains it lists (grant.addresses, grant.domains), or every mailbox in the organization with grant.mail_scope "org", which cannot be combined with them; one that says neither is refused (400 validation_error, details.reason mail_scope_required). Super admin, Send only and Read only reach every mailbox by definition. members:read is only for an org-wide custom key: naming it with grant.addresses or grant.domains is refused (400). Owners and admins are emailed about every super admin key. Send an Idempotency-Key to retry safely: a second create by the same person under the same key makes no second key and is refused (409 idempotency_key_reused) with the first key's id in error.details.key_id, so a caller whose first answer was lost can revoke that key. The onboarding field is for the dashboard only. The person's own Primitive CLI login needs no step-up (it acts as the person, held to the same rules); the Primitive app's token is refused, even with one. While the organization's keys API is not enabled, this answers 404 feature_disabled (details.feature keys_api; only Primitive turns it on), except that a dashboard session may still create a super admin key (the dashboard's own create).
|
|
4806
4862
|
*
|
|
4807
|
-
* Person only: a dashboard session, or the person's own OAuth token with a step-up token for purpose `keys.create` in the Primitive-Step-Up header. Without one
|
|
4863
|
+
* Person only: a dashboard session, the person's own Primitive CLI login with no step-up, or the person's own OAuth token with a step-up token for purpose `keys.create` in the Primitive-Step-Up header. Without one any other OAuth token is answered 403 step_up_required, whose details carry the dashboard URL that issues it (or 403 grant_forbidden when the person's role, or the client, could not do it anyway). The person's role must hold keys:manage. API keys and agent connection keys are refused. An agent acting for the person is refused unless it carries a step-up token the person issued in the dashboard.
|
|
4808
4864
|
*/
|
|
4809
4865
|
const createKey = (options) => (options.client ?? client).post({
|
|
4810
4866
|
security: [{
|
|
@@ -4821,9 +4877,9 @@ const createKey = (options) => (options.client ?? client).post({
|
|
|
4821
4877
|
/**
|
|
4822
4878
|
* Rotate an API key
|
|
4823
4879
|
*
|
|
4824
|
-
* Mint a successor with the same grant and return its secret once. The old key keeps working for overlap_seconds, then stops. The person rotating must cover the key's access (403 grant_forbidden, details.reason target_not_covered), and a key an owner created is rotated by an owner only (403 forbidden, details.reason owner_key_rotation), since rotating hands over the new secret. The Primitive CLI's token is refused, even with
|
|
4880
|
+
* Mint a successor with the same grant and return its secret once. The old key keeps working for overlap_seconds, then stops. The person rotating must cover the key's access (403 grant_forbidden, details.reason target_not_covered), and a key an owner created is rotated by an owner only (403 forbidden, details.reason owner_key_rotation), since rotating hands over the new secret. The person's own Primitive CLI login needs no step-up (it acts as the person, held to the same rules); the Primitive app's token is refused, even with one. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled, with details.feature naming the feature. Only Primitive turns these on.
|
|
4825
4881
|
*
|
|
4826
|
-
* Person only: a dashboard session, or the person's own OAuth token with a step-up token for purpose `keys.create` in the Primitive-Step-Up header. Without one
|
|
4882
|
+
* Person only: a dashboard session, the person's own Primitive CLI login with no step-up, or the person's own OAuth token with a step-up token for purpose `keys.create` in the Primitive-Step-Up header. Without one any other OAuth token is answered 403 step_up_required, whose details carry the dashboard URL that issues it (or 403 grant_forbidden when the person's role, or the client, could not do it anyway). The person's role must hold keys:manage. API keys and agent connection keys are refused. An agent acting for the person is refused unless it carries a step-up token the person issued in the dashboard.
|
|
4827
4883
|
*/
|
|
4828
4884
|
const rotateKey = (options) => (options.client ?? client).post({
|
|
4829
4885
|
security: [{
|
|
@@ -4840,7 +4896,7 @@ const rotateKey = (options) => (options.client ?? client).post({
|
|
|
4840
4896
|
/**
|
|
4841
4897
|
* Get an API key
|
|
4842
4898
|
*
|
|
4843
|
-
* One key's metadata, never its secret. The person needs access to the whole organization's mail. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled.
|
|
4899
|
+
* One key's metadata, never its secret. The person needs access to the whole organization's mail. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled, with details.feature naming the feature. Only Primitive turns these on.
|
|
4844
4900
|
*
|
|
4845
4901
|
* Person only: a dashboard session or the person's own Primitive CLI token; no other OAuth app. The person's role must hold keys:read. API keys, agent connection keys and agents are refused.
|
|
4846
4902
|
*/
|
|
@@ -4855,9 +4911,9 @@ const getKey = (options) => (options.client ?? client).get({
|
|
|
4855
4911
|
/**
|
|
4856
4912
|
* Change an API key
|
|
4857
4913
|
*
|
|
4858
|
-
* Rename a key, change its expiry, its grant or its conditions, or suspend it. Any change needs the person's own access to cover the key's access now (an owner covers every key); otherwise 403 grant_forbidden, details.reason target_not_covered. A grant change is a new version of the key and is held to the same rules as creating one (a custom grant that does not say which mail it reaches is refused with details.reason mail_scope_required), so it takes the same step-up. The Primitive CLI's token is refused, even with
|
|
4914
|
+
* Rename a key, change its expiry, its grant or its conditions, or suspend it. Any change needs the person's own access to cover the key's access now (an owner covers every key); otherwise 403 grant_forbidden, details.reason target_not_covered. A grant change is a new version of the key and is held to the same rules as creating one (a custom grant that does not say which mail it reaches is refused with details.reason mail_scope_required), so it takes the same step-up. The person's own Primitive CLI login needs no step-up (it acts as the person, held to the same rules); the Primitive app's token is refused, even with one. Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled, with details.feature naming the feature. Only Primitive turns these on.
|
|
4859
4915
|
*
|
|
4860
|
-
* Person only: a dashboard session, or the person's own OAuth token with a step-up token for purpose `keys.create` in the Primitive-Step-Up header. Without one
|
|
4916
|
+
* Person only: a dashboard session, the person's own Primitive CLI login with no step-up, or the person's own OAuth token with a step-up token for purpose `keys.create` in the Primitive-Step-Up header. Without one any other OAuth token is answered 403 step_up_required, whose details carry the dashboard URL that issues it (or 403 grant_forbidden when the person's role, or the client, could not do it anyway). The person's role must hold keys:manage. API keys and agent connection keys are refused. An agent acting for the person is refused unless it carries a step-up token the person issued in the dashboard.
|
|
4861
4917
|
*/
|
|
4862
4918
|
const updateKey = (options) => (options.client ?? client).patch({
|
|
4863
4919
|
security: [{
|
|
@@ -4874,7 +4930,7 @@ const updateKey = (options) => (options.client ?? client).patch({
|
|
|
4874
4930
|
/**
|
|
4875
4931
|
* Suggest a least-privilege grant for a key
|
|
4876
4932
|
*
|
|
4877
|
-
* The permissions a key used over the last 30 days, as a custom grant that would have served every successful call (also as builder areas), the narrowest mail scope its calls support (depth is deprecated: raw when it downloaded raw MIME, otherwise content) (the mailboxes of the messages it named and sent, with notes on what the request log cannot account for), and whether it is unused. Calls to routes only the super admin key can use (groups and mailbox access) derive no permission, since a custom key is refused there; super_admin_only_calls counts them. usage gives the same window anonymized: successful and failed requests per UTC day, the routes called by their declared template (never the called path) with the permission each needed, and how many mailboxes the key read and sent from (counts only, and only for a person with access to the whole organization's mail). Nothing is applied: narrowing is a change to the key (PATCH /v1/keys/:id). Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled.
|
|
4933
|
+
* The permissions a key used over the last 30 days, as a custom grant that would have served every successful call (also as builder areas), the narrowest mail scope its calls support (depth is deprecated: raw when it downloaded raw MIME, otherwise content) (the mailboxes of the messages it named and sent, with notes on what the request log cannot account for), and whether it is unused. Calls to routes only the super admin key can use (groups and mailbox access) derive no permission, since a custom key is refused there; super_admin_only_calls counts them. usage gives the same window anonymized: successful and failed requests per UTC day, the routes called by their declared template (never the called path) with the permission each needed, and how many mailboxes the key read and sent from (counts only, and only for a person with access to the whole organization's mail). Nothing is applied: narrowing is a change to the key (PATCH /v1/keys/:id). Needs the organization's credential features to be enabled; while they are not, this answers 404 feature_disabled, with details.feature naming the feature. Only Primitive turns these on.
|
|
4878
4934
|
*
|
|
4879
4935
|
* Person only: a dashboard session. The person's role must hold credentials:read. API keys, agent connection keys and agents are refused.
|
|
4880
4936
|
*/
|
|
@@ -5321,7 +5377,7 @@ const listSuspensions = (options) => (options?.client ?? client).get({
|
|
|
5321
5377
|
/**
|
|
5322
5378
|
* Decide a suspension
|
|
5323
5379
|
*
|
|
5324
|
-
* Keep, narrow or revoke one suspended or flagged item. Keeping it, and revoking an API key, needs the decider to cover it (revoking an uncovered key is refused with `grant_forbidden`, `target_not_covered`). Keeping an API key rotated (`rotate: true`, other than the shared Function key) also revokes its older secrets still in a rotation overlap, and needs keys:manage on both the credential and the person: without it, or if the decider lost members:manage meanwhile, it is refused with `grant_forbidden` (`keys_manage_required` or `actor_access_changed`) and nothing is rotated. Person only: a dashboard session, or the person's own OAuth or CLI token with a session step-up of purpose `suspensions.decide` (the person confirms at the step_up_url a 403 step_up_required answer carries, which names this client, then send the token in the Primitive-Step-Up header; the token works only with the client it was confirmed for). Needs members:manage. API keys are refused.
|
|
5380
|
+
* Keep, narrow or revoke one suspended or flagged item. Keeping it, and revoking an API key, needs the decider to cover it (revoking an uncovered key is refused with `grant_forbidden`, `target_not_covered`). Keeping an API key rotated (`rotate: true`, other than the shared Function key) also revokes its older secrets still in a rotation overlap, and needs keys:manage on both the credential and the person: without it, or if the decider lost members:manage meanwhile, it is refused with `grant_forbidden` (`keys_manage_required` or `actor_access_changed`) and nothing is rotated. A rule share paused by a role change (`email_rule_share`) takes keep, which leaves it paused, or revoke, which ends the share and needs confirm: true (the person it was shared with loses the emails already shared; without it, 409 `confirmation_required`). Neither of the share's two people may keep it (`grant_forbidden`, `share_decision_forbidden`). Access a person gave on their own mailbox (`mailbox_access`) takes keep or revoke, and both need delegations:manage; revoke removes only what that person gave on that mailbox. Nobody the access reaches, nor the person who gave it, may keep it (`grant_forbidden`, `mailbox_access_decision_forbidden`). Person only: a dashboard session, or the person's own OAuth or CLI token with a session step-up of purpose `suspensions.decide` (the person confirms at the step_up_url a 403 step_up_required answer carries, which names this client, then send the token in the Primitive-Step-Up header; the token works only with the client it was confirmed for). Needs members:manage. API keys are refused.
|
|
5325
5381
|
*/
|
|
5326
5382
|
const decideSuspension = (options) => (options.client ?? client).post({
|
|
5327
5383
|
security: [{
|
|
@@ -25280,4 +25336,4 @@ function repeatStopCommand(emailId) {
|
|
|
25280
25336
|
if (!UUID.test(emailId)) throw new TypeError("emailId must be an email UUID");
|
|
25281
25337
|
return `primitive repeat stop --id ${emailId.toLowerCase()}`;
|
|
25282
25338
|
}
|
|
25283
|
-
export { AutomatedFilterUnsupportedError as $,
|
|
25339
|
+
export { AutomatedFilterUnsupportedError as $, updateRoute as $n, listAgentContacts as $t, sleep as A, resendAgentSignupVerification as An, getAccessMode as At, hasReplyState as B, setFunctionSecret as Bn, getFunctionTestRunTrace as Bt, collectNewAcceptedEmails as C, putAgentContact as Cn, deleteWakeAuthorization as Ct, filtersFromFlags as D, removeDefaultNetworkMember as Dn, downloadEmailAttachmentPart as Dt, fetchEmailSearchPage as E, redeemCreditCode as En, downloadEmailAttachmentByFilename as Et, assertAwaitingFilterRows as F, searchEmails as Fn, getCreditBalance as Ft, WEBHOOK_EVENT_TYPES as G, startCliLogin as Gn, getOwnGrant as Gt, queryUsesAwaiting as H, simulateRoute as Hn, getKey as Ht, awaitingRejectedError as I, searchMemories as In, getDefaultNetworkAgent as It, parseWebhookEvent as J, unsetFunctionRoute as Jn, getThread as Jt, isEmailReceivedEvent as K, stopRepeatFromEmail as Kn, getRepeatingSend as Kt, ensureSearchReportsReplyState as L, semanticSearch as Ln, getEmail as Lt, AWAITING_VALUES as M, rotateKey as Mn, getAgentContactPolicy as Mt, REPLY_STATE_UNSUPPORTED_CODE as N, runWakeSchedule as Nn, getContact as Nt, quoteDslValue as O, reorderRoutes as On, downloadSentAttachmentArchiveMember as Ot, ReplyStateUnsupportedError as P, sdk_gen_exports as Pn, getConversation as Pt, AUTOMATED_VALUES as Q, updateRepeatingSend as Qn, listAgentConnections as Qt, formatAwaitingCell as R, sendEmail as Rn, getFunction as Rt, transientFailure as S, pullWebhookEvent as Sn, deleteRoute as St, encodeReceivedAtSearchCursor as T, putContact as Tn, downloadEmailAttachmentArchiveMember as Tt, replyStateSurfaceForOperation as U, startAgentClaim as Un, getMemory as Ut, isAwaitingRejectedError as V, setMemory as Vn, getInboxStatus as Vt, SENT_EMAIL_EVENT_TYPES as W, startAgentSignup as Wn, getOrgRoutingTopology as Wt, AUTOMATED_FILTER_UNSUPPORTED_CODE as X, updateFunction as Xn, inviteAgentConnection as Xt, parseFromHeader as Y, updateDefaultNetworkMember as Yn, getWakeSchedule as Yt, AUTOMATED_FLAG_DESCRIPTION as Z, updateKey as Zn, leaveOrganization as Zt, describeApiFailure as _, listSentEmails as _n, createWakeAuthorization as _t, REPEAT_IDLE_MAX_MINUTES as a, listEmailAttachmentArchiveMembers as an, hasAutomatedVerdict as at, retryTransient as b, listWakeSchedules as bn, deleteContact as bt, classifySignalContent as c, listFunctionLogs as cn, cancelSentEmail as ct, parseRepeatTick as d, listKeys as dn, cliLogout as dt, listAgentNetworks as en, updateWakeAuthorization as er, assertAutomatedVerdict as et, preparePresenceAliveEmail as f, listMailboxAccess as fn, completeWebhookEvent as ft, WaitDeadlineReached as g, listSentAttachmentArchiveMembers as gn, createRoute as gt, sendPreparedSignal as h, listRoutes as hn, createKey as ht, REPEAT_EVERY_MAX_MINUTES as i, listDomains as in, __exportAll as ir, expectedAutomatedVerdicts as it, AWAITING_FLAG_DESCRIPTION as j, revokeCredential as jn, getAccount as jt, sinceFromFlags as k, replyToEmail as kn, downloadSentAttachmentByFilename as kt, parseInteractionEnvelope as l, listFunctions as ln, cancelSentEmailByIdempotencyKey as lt, repeatStopCommand as m, listRoles as mn, createFunction as mt, MAX_PRESENCE_ENVELOPE_BYTES as n, listDefaultNetworkAgents as nn, verifyAgentClaim as nr, automatedSurfaceForOperation as nt, REPEAT_MAX_SENDS_MAX as o, listEmails as on, isAutomatedRejectedError as ot, prepareSignalEmail as p, listRepeatingSends as pn, createEndpoint as pt, isTrustedSender as q, testFunction as qn, getSentEmail as qt, PRESENCE_PROBE_TEXT as r, listDefaultNetworkMembers as rn, verifyAgentSignup as rr, ensureSearchReportsAutomated as rt, buildRepeatStopBody as s, listEndpoints as sn, addDefaultNetworkMember as st, MAX_INTERACTION_BYTES as t, listContacts as tn, updateWakeSchedule as tr, automatedRejectedError as tt, parsePresenceEnvelope as u, listGroups as un, checkDefaultNetworkContactAdmission as ut, parseRetryAfter as v, listWakeAuthorizations as vn, createWakeSchedule as vt, cursorFromAcceptedRows as w, putAgentContactPolicy as wn, deleteWakeSchedule as wt, retryingOperation as x, pollCliLogin as xn, deleteMemory as xt, pauseForTransientFailure as y, listWakeDispatches as yn, deleteAgentContact as yt, formatRepliesCell as z, setFunctionRoute as zn, getFunctionRouting as zt };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { b as retryTransient, c as classifySignalContent, q as isTrustedSender } from "./repeats-Dj_o6c-X-
|
|
1
|
+
import { b as retryTransient, c as classifySignalContent, q as isTrustedSender } from "./repeats-Dj_o6c-X-BKHiZsYv.js";
|
|
2
2
|
// src/oclif/presence-provenance.ts
|
|
3
3
|
function readPresenceProjection(detail) {
|
|
4
4
|
if (!detail || typeof detail !== "object") return null;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Lt as getEmail, Rn as sendEmail, _ as describeApiFailure, _n as listSentEmails, h as sendPreparedSignal, p as prepareSignalEmail, pt as createEndpoint } from "./repeats-Dj_o6c-X-BKHiZsYv.js";
|
|
2
|
+
import { Q as classifySendError, mt as successfulSendOutcome, s as extractErrorPayload, v as bareAddress } from "./api-command-DWjtyqH9.js";
|
|
3
3
|
import { recordSentSignal } from "./oclif/auto-signals.js";
|
|
4
4
|
import { _ as acquireListenLock, c as mailTime, d as readMailJson, f as removeMailFile, h as writeMailJson, i as mailId, l as privateMailDirectory, m as withMailLock, n as invalidSharedMail, o as mailObject, p as syncMailDirectory, r as mailAddress, s as mailString, t as SharedMailStateError, v as compareListenProcessIdentity, x as listenProcessIdentity, y as listenIdentity } from "./shared-mail-files-BAQSGxxz.js";
|
|
5
|
-
import { i as readApiBeforeDeadline, n as isPlainChatReply, o as scopedChatSenderTrust } from "./scoped-chat-
|
|
5
|
+
import { i as readApiBeforeDeadline, n as isPlainChatReply, o as scopedChatSenderTrust } from "./scoped-chat-_AEpylPV.js";
|
|
6
6
|
import { n as tryOwnSharedMail, r as waitForSharedMailChange, t as readSharedMailOwner } from "./shared-mail-watch-BAPMsFNv.js";
|
|
7
7
|
import { Errors } from "@oclif/core";
|
|
8
8
|
import { opendirSync } from "node:fs";
|
|
9
9
|
import { createHash, randomUUID, scryptSync } from "node:crypto";
|
|
10
10
|
import { dirname, join } from "node:path";
|
|
11
11
|
import { setTimeout as setTimeout$1 } from "node:timers/promises";
|
|
12
|
-
// ../sdk-node/dist/api-
|
|
12
|
+
// ../sdk-node/dist/api-DZNlDCNG.js
|
|
13
13
|
const jsonBodySerializer = { bodySerializer: (body) => JSON.stringify(body, (_key, value) => typeof value === "bigint" ? value.toString() : value) };
|
|
14
14
|
function createSseClient({ onRequest, onSseError, onSseEvent, responseTransformer, responseValidator, sseDefaultRetryDelay, sseMaxRetryAttempts, sseMaxRetryDelay, sseSleepFn, url, ...options }) {
|
|
15
15
|
let lastEventId;
|
package/man/primitive.1
CHANGED
|
@@ -207,9 +207,19 @@ profile are bound to one organization and refuse a different one.
|
|
|
207
207
|
.PP
|
|
208
208
|
Run
|
|
209
209
|
.B primitive keys list
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
210
|
+
or
|
|
211
|
+
.B primitive keys get ID
|
|
212
|
+
to see API keys and their permissions; neither shows a secret.
|
|
213
|
+
.BR "primitive keys create" ,
|
|
214
|
+
.B rotate
|
|
215
|
+
and
|
|
216
|
+
.B update
|
|
217
|
+
run directly. If your organization requires approval, the command prints the
|
|
218
|
+
approval link and waits for the one-time token the page shows, or takes it with
|
|
219
|
+
.BR --step-up-token .
|
|
220
|
+
A new secret is printed once and never saved.
|
|
221
|
+
.B primitive keys revoke ID
|
|
222
|
+
revokes a key.
|
|
213
223
|
.B primitive whoami --check PERMISSION
|
|
214
224
|
reports whether the current credential may use a permission.
|
|
215
225
|
.PP
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "primcli",
|
|
3
|
-
"version": "3.0.0-preview.
|
|
3
|
+
"version": "3.0.0-preview.3",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"tag": "preview"
|
|
6
6
|
},
|
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
"description": "Global secrets shared across every function. Use `primitive org secrets list|set|remove`. Changes land in a function on its next redeploy; a function secret of the same name overrides the global."
|
|
145
145
|
},
|
|
146
146
|
"keys": {
|
|
147
|
-
"description": "
|
|
147
|
+
"description": "Organization API keys: list and show them (metadata only, never secrets), create, rotate and change them (with browser approval where your organization requires it), and revoke them."
|
|
148
148
|
},
|
|
149
149
|
"roles": {
|
|
150
150
|
"description": "Read roles, groups, mailbox access and the access mode. Use `primitive roles list|groups|mailbox-access|access-mode`; generated API names remain available."
|