@naturali/cli 0.192.0 → 0.193.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.mjs +153 -7
  2. package/package.json +2 -2
package/dist/index.mjs CHANGED
@@ -17,7 +17,7 @@ var __exportAll = (all, no_symbols) => {
17
17
  };
18
18
  //#endregion
19
19
  //#region package.json
20
- var version = "0.192.0";
20
+ var version = "0.193.1";
21
21
  //#endregion
22
22
  //#region ../sdk/src/generated/core/bodySerializer.gen.ts
23
23
  const serializeFormDataPair = (data, key, value) => {
@@ -4646,7 +4646,7 @@ var Projects = class {
4646
4646
  *
4647
4647
  * **The address does not need an account.** Inviting one that has none creates it unverified and records the membership beside it, so the invitee is already a member with status `pending`. Their first sign-in code — which they request themselves, from the link in the invitation — is what makes them `active`. There is no separate acceptance step and no invitation to expire: the address is the credential, and the invitation reached it.
4648
4648
  *
4649
- * An `owner` may grant `admin` or `member`; an `admin` may grant `member` only, so administration cannot hand out its own authority. `role: owner` is refused — that is the billing owner, and transferring it is a different act.
4649
+ * An `owner` may grant `admin` or `member`; an `admin` may grant `member` only, so administration cannot hand out its own authority. `role: owner` is refused — that is the billing owner, and ownership moves only through a transfer the new owner accepts (`PUT /v1/projects/{project_id}/transfer`).
4650
4650
  *
4651
4651
  * The invitation email is a courtesy, not the grant: if it cannot be sent the membership still stands, and the response still says `pending`. Requires an account-wide credential — a project-scoped key cannot grant access that would outlive its own revocation.
4652
4652
  *
@@ -4668,7 +4668,7 @@ var Projects = class {
4668
4668
  *
4669
4669
  * **Anyone may remove themselves**, whatever their role: a colleague who no longer wants access should not have to ask for it, and leaving takes nothing from anybody else. Removing *somebody else* needs authority — an `owner` may remove anyone, an `admin` may remove a `member` and not another `admin`.
4670
4670
  *
4671
- * The owner's own row is refused: a project with no owner is unreachable, and the row names who pays.
4671
+ * The owner's own row is refused: a project with no owner is unreachable, and the row names who pays. Removing the member a transfer is pending to withdraws the transfer.
4672
4672
  *
4673
4673
  */
4674
4674
  static removeProjectMember(options) {
@@ -4682,7 +4682,7 @@ var Projects = class {
4682
4682
  *
4683
4683
  * Moves a member between `admin` and `member`. The project `owner` only: promoting somebody to `admin` hands them every write in the project, and an `admin` who could do that could erase the difference between the two roles for themselves.
4684
4684
  *
4685
- * The owner's own row is refused in either direction — it names who pays, so changing it is a transfer rather than a role change.
4685
+ * The owner's own row is refused in either direction — it names who pays, so changing it is a transfer (`PUT /v1/projects/{project_id}/transfer`) rather than a role change.
4686
4686
  *
4687
4687
  */
4688
4688
  static updateProjectMember(options) {
@@ -4696,6 +4696,74 @@ var Projects = class {
4696
4696
  });
4697
4697
  }
4698
4698
  /**
4699
+ * Withdraw or decline a project transfer
4700
+ *
4701
+ * The owner withdraws the pending transfer, or its recipient declines it. Requires an account-wide credential.
4702
+ *
4703
+ */
4704
+ static cancelProjectTransfer(options) {
4705
+ return (options.client ?? client).delete({
4706
+ url: "/v1/projects/{project_id}/transfer",
4707
+ ...options
4708
+ });
4709
+ }
4710
+ /**
4711
+ * Get the pending project transfer
4712
+ *
4713
+ * The transfer the owner has proposed and its recipient has not yet accepted or declined. Readable by every member.
4714
+ *
4715
+ */
4716
+ static getProjectTransfer(options) {
4717
+ return (options.client ?? client).get({
4718
+ url: "/v1/projects/{project_id}/transfer",
4719
+ ...options
4720
+ });
4721
+ }
4722
+ /**
4723
+ * Propose a project transfer
4724
+ *
4725
+ * Proposes an existing member as the project's next owner — the account it is billed to. Nothing changes until that member accepts with `POST /v1/projects/{project_id}/transfer/accept`; a proposal already pending is replaced. The recipient is emailed.
4726
+ *
4727
+ * Requires the `owner` role and an account-wide credential; refused to a connected app.
4728
+ *
4729
+ */
4730
+ static proposeProjectTransfer(options) {
4731
+ return (options.client ?? client).put({
4732
+ security: [{
4733
+ key: "bearerAuth",
4734
+ scheme: "bearer",
4735
+ type: "http"
4736
+ }],
4737
+ url: "/v1/projects/{project_id}/transfer",
4738
+ ...options,
4739
+ headers: {
4740
+ "Content-Type": "application/json",
4741
+ ...options.headers
4742
+ }
4743
+ });
4744
+ }
4745
+ /**
4746
+ * Accept a project transfer
4747
+ *
4748
+ * Makes the caller — the member the transfer names — the project's owner.
4749
+ *
4750
+ * Usage up to this moment is settled on the previous owner's credit; from here on the project's usage is billed to the caller, and its runs count against the caller's allowance. The project counts toward the caller's plan limits at once: its active channels and triggers, and on Free the project itself. A transfer the caller's plan cannot hold is refused with `403 plan_limit_reached`, and the project's retention window is brought within the caller's plan.
4751
+ *
4752
+ * The previous owner stays in the project as an `admin`. Stops recorded against the project's spend move to the caller. Refused to a connected app.
4753
+ *
4754
+ */
4755
+ static acceptProjectTransfer(options) {
4756
+ return (options.client ?? client).post({
4757
+ security: [{
4758
+ key: "bearerAuth",
4759
+ scheme: "bearer",
4760
+ type: "http"
4761
+ }],
4762
+ url: "/v1/projects/{project_id}/transfer/accept",
4763
+ ...options
4764
+ });
4765
+ }
4766
+ /**
4699
4767
  * Get per-project usage
4700
4768
  *
4701
4769
  * The per-project meter — the re-billing view (A11/C12/P3). Aggregates the project's usage over an optional [from, to] window, bucketed by a single dimension. Costs are the billing-grade cost_usd the runtime freezes at write time; null means nothing in the bucket was priced (never that it was free). Only managed providers are priced (on the runtime), so cost reflects managed usage; BYOK usage carries no LLM cost.
@@ -18761,7 +18829,7 @@ const routes = {
18761
18829
  "add-project-member": {
18762
18830
  serviceClass: "Projects",
18763
18831
  operationId: "addProjectMember",
18764
- description: "Adds a colleague to the project by email address. Free and uncapped on every plan: a member adds no run, no channel, no trigger and no byte, so every cost they cause is already billed through the project's owner. Members are counted nowhere. **The address does not need an account.** Inviting one that has none creates it unverified and records the membership beside it, so the invitee is already a member with status `pending`. Their first sign-in code — which they request themselves, from the link in the invitation — is what makes them `active`. There is no separate acceptance step and no invitation to expire: the address is the credential, and the invitation reached it. An `owner` may grant `admin` or `member`; an `admin` may grant `member` only, so administration cannot hand out its own authority. `role: owner` is refused — that is the billing owner, and transferring it is a different act. The invitation email is a courtesy, not the grant: if it cannot be sent the membership still stands, and the response still says `pending`. Requires an account-wide credential — a project-scoped key cannot grant access that would outlive its own revocation.",
18832
+ description: "Adds a colleague to the project by email address. Free and uncapped on every plan: a member adds no run, no channel, no trigger and no byte, so every cost they cause is already billed through the project's owner. Members are counted nowhere. **The address does not need an account.** Inviting one that has none creates it unverified and records the membership beside it, so the invitee is already a member with status `pending`. Their first sign-in code — which they request themselves, from the link in the invitation — is what makes them `active`. There is no separate acceptance step and no invitation to expire: the address is the credential, and the invitation reached it. An `owner` may grant `admin` or `member`; an `admin` may grant `member` only, so administration cannot hand out its own authority. `role: owner` is refused — that is the billing owner, and ownership moves only through a transfer the new owner accepts (`PUT /v1/projects/{project_id}/transfer`). The invitation email is a courtesy, not the grant: if it cannot be sent the membership still stands, and the response still says `pending`. Requires an account-wide credential — a project-scoped key cannot grant access that would outlive its own revocation.",
18765
18833
  moduleDocsUrl: "https://naturali.ai/docs/modules/projects",
18766
18834
  httpMethod: "post",
18767
18835
  pathParams: ["project_id"],
@@ -18795,7 +18863,7 @@ const routes = {
18795
18863
  "update-project-member": {
18796
18864
  serviceClass: "Projects",
18797
18865
  operationId: "updateProjectMember",
18798
- description: "Moves a member between `admin` and `member`. The project `owner` only: promoting somebody to `admin` hands them every write in the project, and an `admin` who could do that could erase the difference between the two roles for themselves. The owner's own row is refused in either direction — it names who pays, so changing it is a transfer rather than a role change.",
18866
+ description: "Moves a member between `admin` and `member`. The project `owner` only: promoting somebody to `admin` hands them every write in the project, and an `admin` who could do that could erase the difference between the two roles for themselves. The owner's own row is refused in either direction — it names who pays, so changing it is a transfer (`PUT /v1/projects/{project_id}/transfer`) rather than a role change.",
18799
18867
  moduleDocsUrl: "https://naturali.ai/docs/modules/projects",
18800
18868
  httpMethod: "patch",
18801
18869
  pathParams: ["project_id", "member_id"],
@@ -18829,7 +18897,7 @@ const routes = {
18829
18897
  "remove-project-member": {
18830
18898
  serviceClass: "Projects",
18831
18899
  operationId: "removeProjectMember",
18832
- description: "Removes a member, or leaves the project yourself. **Anyone may remove themselves**, whatever their role: a colleague who no longer wants access should not have to ask for it, and leaving takes nothing from anybody else. Removing *somebody else* needs authority — an `owner` may remove anyone, an `admin` may remove a `member` and not another `admin`. The owner's own row is refused: a project with no owner is unreachable, and the row names who pays.",
18900
+ description: "Removes a member, or leaves the project yourself. **Anyone may remove themselves**, whatever their role: a colleague who no longer wants access should not have to ask for it, and leaving takes nothing from anybody else. Removing *somebody else* needs authority — an `owner` may remove anyone, an `admin` may remove a `member` and not another `admin`. The owner's own row is refused: a project with no owner is unreachable, and the row names who pays. Removing the member a transfer is pending to withdraws the transfer.",
18833
18901
  moduleDocsUrl: "https://naturali.ai/docs/modules/projects",
18834
18902
  httpMethod: "delete",
18835
18903
  pathParams: ["project_id", "member_id"],
@@ -18850,6 +18918,84 @@ const routes = {
18850
18918
  "in": "path"
18851
18919
  }]
18852
18920
  },
18921
+ "get-project-transfer": {
18922
+ serviceClass: "Projects",
18923
+ operationId: "getProjectTransfer",
18924
+ description: "The transfer the owner has proposed and its recipient has not yet accepted or declined. Readable by every member.",
18925
+ moduleDocsUrl: "https://naturali.ai/docs/modules/projects",
18926
+ httpMethod: "get",
18927
+ pathParams: ["project_id"],
18928
+ queryParams: [],
18929
+ headerParams: [],
18930
+ cookieParams: [],
18931
+ flags: [{
18932
+ "name": "project_id",
18933
+ "description": "Project public ID (proj_ prefix).",
18934
+ "required": true,
18935
+ "type": "string",
18936
+ "in": "path"
18937
+ }]
18938
+ },
18939
+ "propose-project-transfer": {
18940
+ serviceClass: "Projects",
18941
+ operationId: "proposeProjectTransfer",
18942
+ description: "Proposes an existing member as the project's next owner — the account it is billed to. Nothing changes until that member accepts with `POST /v1/projects/{project_id}/transfer/accept`; a proposal already pending is replaced. The recipient is emailed. Requires the `owner` role and an account-wide credential; refused to a connected app.",
18943
+ moduleDocsUrl: "https://naturali.ai/docs/modules/projects",
18944
+ httpMethod: "put",
18945
+ pathParams: ["project_id"],
18946
+ queryParams: [],
18947
+ headerParams: [],
18948
+ cookieParams: [],
18949
+ flags: [{
18950
+ "name": "project_id",
18951
+ "description": "Project public ID (proj_ prefix).",
18952
+ "required": true,
18953
+ "type": "string",
18954
+ "in": "path"
18955
+ }, {
18956
+ "name": "member_id",
18957
+ "description": "The membership ID (`pmem_` prefix) of the proposed owner.",
18958
+ "required": true,
18959
+ "type": "string",
18960
+ "in": "body"
18961
+ }]
18962
+ },
18963
+ "cancel-project-transfer": {
18964
+ serviceClass: "Projects",
18965
+ operationId: "cancelProjectTransfer",
18966
+ description: "The owner withdraws the pending transfer, or its recipient declines it. Requires an account-wide credential.",
18967
+ moduleDocsUrl: "https://naturali.ai/docs/modules/projects",
18968
+ httpMethod: "delete",
18969
+ pathParams: ["project_id"],
18970
+ queryParams: [],
18971
+ headerParams: [],
18972
+ cookieParams: [],
18973
+ flags: [{
18974
+ "name": "project_id",
18975
+ "description": "Project public ID (proj_ prefix).",
18976
+ "required": true,
18977
+ "type": "string",
18978
+ "in": "path"
18979
+ }]
18980
+ },
18981
+ "accept-project-transfer": {
18982
+ serviceClass: "Projects",
18983
+ operationId: "acceptProjectTransfer",
18984
+ description: "Makes the caller — the member the transfer names — the project's owner. Usage up to this moment is settled on the previous owner's credit; from here on the project's usage is billed to the caller, and its runs count against the caller's allowance. The project counts toward the caller's plan limits at once: its active channels and triggers, and on Free the project itself. A transfer the caller's plan cannot hold is refused with `403 plan_limit_reached`, and the project's retention window is brought within the caller's plan. The previous owner stays in the project as an `admin`. Stops recorded against the project's spend move to the caller. Refused to a connected app.",
18985
+ moduleDocsUrl: "https://naturali.ai/docs/modules/projects",
18986
+ httpMethod: "post",
18987
+ pathParams: ["project_id"],
18988
+ queryParams: [],
18989
+ headerParams: [],
18990
+ cookieParams: [],
18991
+ flags: [{
18992
+ "name": "project_id",
18993
+ "description": "Project public ID (proj_ prefix).",
18994
+ "required": true,
18995
+ "type": "string",
18996
+ "in": "path"
18997
+ }]
18998
+ },
18853
18999
  "get-project-usage": {
18854
19000
  serviceClass: "Projects",
18855
19001
  operationId: "getProjectUsage",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturali/cli",
3
- "version": "0.192.0",
3
+ "version": "0.193.1",
4
4
  "description": "Command-line interface for the naturali.ai API, generated from its OpenAPI specs",
5
5
  "keywords": [
6
6
  "naturali",
@@ -31,7 +31,7 @@
31
31
  "yaml": "^2.9.1"
32
32
  },
33
33
  "devDependencies": {
34
- "@naturali/sdk": "0.192.0",
34
+ "@naturali/sdk": "0.193.1",
35
35
  "@ttoss/openapi-codegen": "^0.5.0",
36
36
  "@types/node": "^26.5.1",
37
37
  "tsdown": "^0.23.0",