@neon/sdk 1.5.0 → 2.0.0

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 (47) hide show
  1. package/README.md +194 -28
  2. package/dist/client/client/client.gen.js +1 -3
  3. package/dist/client/client/client.gen.js.map +1 -1
  4. package/dist/client/client/utils.gen.js +1 -3
  5. package/dist/client/client/utils.gen.js.map +1 -1
  6. package/dist/client/index.d.ts +3 -3
  7. package/dist/client/index.js +2 -2
  8. package/dist/client/raw.gen.d.ts +146 -16
  9. package/dist/client/raw.gen.d.ts.map +1 -1
  10. package/dist/client/raw.gen.js +8 -3
  11. package/dist/client/raw.gen.js.map +1 -1
  12. package/dist/client/sdk.gen.d.ts +137 -78
  13. package/dist/client/sdk.gen.d.ts.map +1 -1
  14. package/dist/client/sdk.gen.js +258 -96
  15. package/dist/client/sdk.gen.js.map +1 -1
  16. package/dist/client/types.gen.d.ts +1397 -315
  17. package/dist/client/types.gen.d.ts.map +1 -1
  18. package/dist/index.d.ts +5 -4
  19. package/dist/neon/client.d.ts +2 -0
  20. package/dist/neon/client.d.ts.map +1 -1
  21. package/dist/neon/client.js +2 -0
  22. package/dist/neon/client.js.map +1 -1
  23. package/dist/neon/context.js +2 -1
  24. package/dist/neon/context.js.map +1 -1
  25. package/dist/neon/coverage.d.ts.map +1 -1
  26. package/dist/neon/coverage.js +12 -2
  27. package/dist/neon/coverage.js.map +1 -1
  28. package/dist/neon/paginate.d.ts.map +1 -1
  29. package/dist/neon/paginate.js +5 -2
  30. package/dist/neon/paginate.js.map +1 -1
  31. package/dist/neon/resources/branches.d.ts +0 -7
  32. package/dist/neon/resources/branches.d.ts.map +1 -1
  33. package/dist/neon/resources/branches.js +6 -15
  34. package/dist/neon/resources/branches.js.map +1 -1
  35. package/dist/neon/resources/logs.d.ts +76 -0
  36. package/dist/neon/resources/logs.d.ts.map +1 -0
  37. package/dist/neon/resources/logs.js +90 -0
  38. package/dist/neon/resources/logs.js.map +1 -0
  39. package/dist/neon/resources/postgres.js +2 -1
  40. package/dist/neon/resources/postgres.js.map +1 -1
  41. package/dist/neon/resources/projects.d.ts +61 -4
  42. package/dist/neon/resources/projects.d.ts.map +1 -1
  43. package/dist/neon/resources/projects.js +71 -5
  44. package/dist/neon/resources/projects.js.map +1 -1
  45. package/dist/raw.d.ts +3 -3
  46. package/dist/raw.js +8 -3
  47. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { ListProjectsData, Project, ProjectCreateRequest, ProjectListItem, ProjectPermission, ProjectUpdateRequest } from "../../client/types.gen.js";
1
+ import { ListProjectMembersData, ListProjectsData, Project, ProjectCreateRequest, ProjectListItem, ProjectMember, ProjectMemberRoleResponse, ProjectPermission, ProjectRole, ProjectUpdateRequest } from "../../client/types.gen.js";
2
2
  import { Outcome } from "../result.js";
3
3
  import { CallOptions, RequestContext } from "../context.js";
4
4
  import { Paginated } from "../paginate.js";
@@ -15,6 +15,23 @@ interface TransferProjectsInput {
15
15
  type ListQuery = Omit<NonNullable<ListProjectsData["query"]>, "cursor">;
16
16
  type CreateInput = ProjectCreateRequest["project"];
17
17
  type UpdateInput = ProjectUpdateRequest["project"];
18
+ type MemberListQuery = Omit<NonNullable<ListProjectMembersData["query"]>, "cursor">;
19
+ /** Per-call options for {@link Members.setRole}. */
20
+ interface SetRoleOptions<Throw extends boolean = boolean> extends CallOptions<Throw> {
21
+ /**
22
+ * Acknowledge that the call lowers the caller's own role. The API rejects a
23
+ * self-demotion without it, so it is left off by default.
24
+ */
25
+ confirmSelfDemotion?: boolean;
26
+ }
27
+ /** Per-call options for {@link Members.removeRole}. */
28
+ interface RemoveRoleOptions<Throw extends boolean = boolean> extends CallOptions<Throw> {
29
+ /**
30
+ * Acknowledge that the call can cost the caller management access. The API
31
+ * rejects such a self-removal without it, so it is left off by default.
32
+ */
33
+ confirmSelfLockout?: boolean;
34
+ }
18
35
  /** Per-call options for the connect workflow. */
19
36
  interface WorkflowOptions<Throw extends boolean> extends CallOptions<Throw> {
20
37
  /** Return a pooled connection string (default `true`). */
@@ -39,11 +56,52 @@ declare class Permissions<DThrow extends boolean> {
39
56
  revoke(projectId: string, permissionId: string): Promise<Outcome<ProjectPermission, DThrow>>;
40
57
  revoke<Throw extends boolean = DThrow>(projectId: string, permissionId: string, opts: CallOptions<Throw>): Promise<Outcome<ProjectPermission, Throw>>;
41
58
  }
59
+ /**
60
+ * Per-project roles for members of the owning organization.
61
+ *
62
+ * Distinct from {@link Permissions}, which shares a project with an individual by
63
+ * email address: these act on existing org members by member id, and clearing a
64
+ * grant leaves the member's organization-role default in force rather than
65
+ * removing their access.
66
+ */
67
+ declare class Members<DThrow extends boolean> {
68
+ #private;
69
+ constructor(ctx: RequestContext);
70
+ /**
71
+ * List org members and their project roles (cursor-paginated). Org-owned
72
+ * projects only — a personal project answers `404`, as does an org with
73
+ * per-project role management disabled.
74
+ *
75
+ * @apiCall GET /projects/{project_id}/members (cursor-paginated)
76
+ */
77
+ list(projectId: string, query?: MemberListQuery, opts?: CallOptions): Paginated<ProjectMember>;
78
+ /**
79
+ * Set a member's explicit project role, replacing any existing grant.
80
+ * Idempotent. Check `credential_rotation_recommended` and
81
+ * `org_api_key_rotation_recommended` on the result — a downgrade can leave
82
+ * credentials the member still holds.
83
+ *
84
+ * @apiCall PUT /projects/{project_id}/members/{member_id}/role
85
+ */
86
+ setRole(projectId: string, memberId: string, role: ProjectRole): Promise<Outcome<ProjectMemberRoleResponse, DThrow>>;
87
+ setRole<Throw extends boolean = DThrow>(projectId: string, memberId: string, role: ProjectRole, opts: SetRoleOptions<Throw>): Promise<Outcome<ProjectMemberRoleResponse, Throw>>;
88
+ /**
89
+ * Clear a member's explicit project grant. Idempotent, and a no-op when no
90
+ * explicit grant exists. The member keeps whatever their organization role
91
+ * grants by default, so this narrows access rather than removing it.
92
+ *
93
+ * @apiCall DELETE /projects/{project_id}/members/{member_id}/role
94
+ */
95
+ removeRole(projectId: string, memberId: string): Promise<Outcome<ProjectMemberRoleResponse, DThrow>>;
96
+ removeRole<Throw extends boolean = DThrow>(projectId: string, memberId: string, opts: RemoveRoleOptions<Throw>): Promise<Outcome<ProjectMemberRoleResponse, Throw>>;
97
+ }
42
98
  /** Project resource — one API call per method (`list` is cursor-paginated). */
43
99
  declare class Projects<DThrow extends boolean> {
44
100
  #private;
45
101
  /** Project access grants (share by email). */
46
102
  readonly permissions: Permissions<DThrow>;
103
+ /** Per-project roles for members of the owning organization. */
104
+ readonly members: Members<DThrow>;
47
105
  constructor(ctx: RequestContext);
48
106
  /**
49
107
  * List projects (cursor-paginated). Returns a lazy list — `await .all()`, `.page()`,
@@ -74,8 +132,7 @@ declare class Projects<DThrow extends boolean> {
74
132
  delete(id: string): Promise<Outcome<Project, DThrow>>;
75
133
  delete<Throw extends boolean = DThrow>(id: string, opts: CallOptions<Throw>): Promise<Outcome<Project, Throw>>;
76
134
  /**
77
- * Recover a soft-deleted project within its retention window (beta). Mirrors
78
- * `branches.recover` at the project level.
135
+ * Recover a soft-deleted project within its retention window (beta).
79
136
  *
80
137
  * @apiCall POST /projects/{project_id}/recover
81
138
  */
@@ -104,5 +161,5 @@ declare class Projects<DThrow extends boolean> {
104
161
  }, opts: CallOptions<Throw>): Promise<Outcome<void, Throw>>;
105
162
  }
106
163
  //#endregion
107
- export { Permissions, ProjectConnection, Projects, TransferProjectsInput };
164
+ export { Members, Permissions, ProjectConnection, Projects, RemoveRoleOptions, SetRoleOptions, TransferProjectsInput };
108
165
  //# sourceMappingURL=projects.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.d.ts","names":[],"sources":["../../../src/neon/resources/projects.ts"],"mappings":"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"}
1
+ {"version":3,"file":"projects.d.ts","names":[],"sources":["../../../src/neon/resources/projects.ts"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { NeonError } from "../errors.js";
2
2
  import { err, finalize } from "../result.js";
3
- import { createProject, deleteProject, getProject, grantPermissionToProject, listProjectPermissions, listProjects, recoverProject, revokePermissionFromProject, transferProjectsFromOrgToOrg, transferProjectsFromUserToOrg, updateProject } from "../../client/sdk.gen.js";
3
+ import { createProject, deleteProject, getProject, grantPermissionToProject, listProjectMembers, listProjectPermissions, listProjects, recoverProject, removeProjectMemberRole, revokePermissionFromProject, setProjectMemberRole, transferProjectsFromOrgToOrg, transferProjectsFromUserToOrg, updateProject } from "../../client/sdk.gen.js";
4
4
  import { withConnectionString } from "../connection.js";
5
5
  import { paginate } from "../paginate.js";
6
6
  //#region src/neon/resources/projects.ts
@@ -39,14 +39,78 @@ var Permissions = class {
39
39
  }), (data) => data);
40
40
  }
41
41
  };
42
+ /**
43
+ * Per-project roles for members of the owning organization.
44
+ *
45
+ * Distinct from {@link Permissions}, which shares a project with an individual by
46
+ * email address: these act on existing org members by member id, and clearing a
47
+ * grant leaves the member's organization-role default in force rather than
48
+ * removing their access.
49
+ */
50
+ var Members = class {
51
+ #ctx;
52
+ constructor(ctx) {
53
+ this.#ctx = ctx;
54
+ }
55
+ /**
56
+ * List org members and their project roles (cursor-paginated). Org-owned
57
+ * projects only — a personal project answers `404`, as does an org with
58
+ * per-project role management disabled.
59
+ *
60
+ * @apiCall GET /projects/{project_id}/members (cursor-paginated)
61
+ */
62
+ list(projectId, query, opts) {
63
+ return paginate((cursor, signal) => listProjectMembers({
64
+ client: this.#ctx.client,
65
+ path: { project_id: projectId },
66
+ query: {
67
+ ...query,
68
+ cursor
69
+ },
70
+ throwOnError: false,
71
+ signal
72
+ }), (data) => ({
73
+ items: data?.project_members ?? [],
74
+ cursor: data?.pagination?.next
75
+ }), () => this.#ctx.deadlineFor(opts));
76
+ }
77
+ setRole(projectId, memberId, role, opts) {
78
+ return this.#ctx.run(opts, (client, signal) => setProjectMemberRole({
79
+ client,
80
+ path: {
81
+ project_id: projectId,
82
+ member_id: memberId
83
+ },
84
+ query: opts?.confirmSelfDemotion ? { confirm_self_demotion: true } : void 0,
85
+ body: { role },
86
+ throwOnError: false,
87
+ signal
88
+ }), (data) => data);
89
+ }
90
+ removeRole(projectId, memberId, opts) {
91
+ return this.#ctx.run(opts, (client, signal) => removeProjectMemberRole({
92
+ client,
93
+ path: {
94
+ project_id: projectId,
95
+ member_id: memberId
96
+ },
97
+ query: opts?.confirmSelfLockout ? { confirm_self_lockout: true } : void 0,
98
+ throwOnError: false,
99
+ signal
100
+ }), (data) => data);
101
+ }
102
+ };
42
103
  /** Project resource — one API call per method (`list` is cursor-paginated). */
43
104
  var Projects = class {
44
105
  #ctx;
45
106
  /** Project access grants (share by email). */
46
107
  permissions;
108
+ /** Per-project roles for members of the owning organization. */
109
+ members;
47
110
  constructor(ctx) {
48
111
  this.#ctx = ctx;
49
112
  this.permissions = new Permissions(ctx);
113
+ this.members = new Members(ctx);
50
114
  }
51
115
  /**
52
116
  * List projects (cursor-paginated). Returns a lazy list — `await .all()`, `.page()`,
@@ -90,7 +154,7 @@ var Projects = class {
90
154
  }
91
155
  async createAndConnect(input, opts) {
92
156
  const shouldThrow = opts?.throwOnError ?? this.#ctx.defaults.throwOnError;
93
- return finalize(withConnectionString(await this.#ctx.execute({
157
+ const result = await this.#ctx.execute({
94
158
  ...opts,
95
159
  waitForReadiness: opts?.waitForReadiness ?? true
96
160
  }, (client, signal) => createProject({
@@ -101,10 +165,12 @@ var Projects = class {
101
165
  } },
102
166
  throwOnError: false,
103
167
  signal
104
- }), (data) => data), (data) => data.connection_uris, (data, connectionString) => ({
168
+ }), (data) => data);
169
+ const out = withConnectionString(result, (data) => data.connection_uris, (data, connectionString) => ({
105
170
  project: data.project,
106
171
  connectionString
107
- }), opts?.pooled ?? true), shouldThrow);
172
+ }), opts?.pooled ?? true);
173
+ return finalize(out, shouldThrow);
108
174
  }
109
175
  update(id, input, opts) {
110
176
  return this.#ctx.run(opts, (client, signal) => updateProject({
@@ -159,6 +225,6 @@ var Projects = class {
159
225
  }
160
226
  };
161
227
  //#endregion
162
- export { Permissions, Projects };
228
+ export { Members, Permissions, Projects };
163
229
 
164
230
  //# sourceMappingURL=projects.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","names":["#ctx"],"sources":["../../../src/neon/resources/projects.ts"],"sourcesContent":["import {\n\tcreateProject,\n\tdeleteProject,\n\tgetProject,\n\tgrantPermissionToProject,\n\tlistProjectPermissions,\n\tlistProjects,\n\trecoverProject,\n\trevokePermissionFromProject,\n\ttransferProjectsFromOrgToOrg,\n\ttransferProjectsFromUserToOrg,\n\tupdateProject,\n} from \"../../client/sdk.gen.js\";\nimport type {\n\tListProjectsData,\n\tProject,\n\tProjectCreateRequest,\n\tProjectListItem,\n\tProjectPermission,\n\tProjectUpdateRequest,\n} from \"../../client/types.gen.js\";\nimport { withConnectionString } from \"../connection.js\";\nimport type { CallOptions, RequestContext } from \"../context.js\";\nimport { NeonError } from \"../errors.js\";\nimport { type Paginated, paginate } from \"../paginate.js\";\nimport { err, finalize, type NeonResult, type Outcome } from \"../result.js\";\n\n/** Input for {@link Projects.transfer} (org → org). */\nexport interface TransferProjectsInput {\n\t/** Source org. Defaults to the client's `orgId`. */\n\tfromOrgId?: string;\n\t/** Destination org. */\n\ttoOrgId: string;\n\tprojectIds: string[];\n}\n\ntype ListQuery = Omit<NonNullable<ListProjectsData[\"query\"]>, \"cursor\">;\ntype CreateInput = ProjectCreateRequest[\"project\"];\ntype UpdateInput = ProjectUpdateRequest[\"project\"];\n\n/** Per-call options for the connect workflow. */\ninterface WorkflowOptions<Throw extends boolean> extends CallOptions<Throw> {\n\t/** Return a pooled connection string (default `true`). */\n\tpooled?: boolean;\n}\n\n/** A project with a ready-to-use connection string to its default branch. */\nexport interface ProjectConnection {\n\tproject: Project;\n\tconnectionString: string;\n}\n\n/** Project access grants (share a project with additional users by email). */\nexport class Permissions<DThrow extends boolean> {\n\treadonly #ctx: RequestContext;\n\n\tconstructor(ctx: RequestContext) {\n\t\tthis.#ctx = ctx;\n\t}\n\n\t/** @apiCall GET /projects/{project_id}/permissions */\n\tlist(projectId: string): Promise<Outcome<ProjectPermission[], DThrow>>;\n\tlist<Throw extends boolean = DThrow>(\n\t\tprojectId: string,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<ProjectPermission[], Throw>>;\n\tlist(\n\t\tprojectId: string,\n\t\topts?: CallOptions,\n\t): Promise<ProjectPermission[] | NeonResult<ProjectPermission[]>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\tlistProjectPermissions({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { project_id: projectId },\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data.project_permissions,\n\t\t);\n\t}\n\n\t/** @apiCall POST /projects/{project_id}/permissions */\n\tgrant(\n\t\tprojectId: string,\n\t\temail: string,\n\t): Promise<Outcome<ProjectPermission, DThrow>>;\n\tgrant<Throw extends boolean = DThrow>(\n\t\tprojectId: string,\n\t\temail: string,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<ProjectPermission, Throw>>;\n\tgrant(\n\t\tprojectId: string,\n\t\temail: string,\n\t\topts?: CallOptions,\n\t): Promise<ProjectPermission | NeonResult<ProjectPermission>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\tgrantPermissionToProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { project_id: projectId },\n\t\t\t\t\tbody: { email },\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data,\n\t\t);\n\t}\n\n\t/** @apiCall DELETE /projects/{project_id}/permissions/{permission_id} */\n\trevoke(\n\t\tprojectId: string,\n\t\tpermissionId: string,\n\t): Promise<Outcome<ProjectPermission, DThrow>>;\n\trevoke<Throw extends boolean = DThrow>(\n\t\tprojectId: string,\n\t\tpermissionId: string,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<ProjectPermission, Throw>>;\n\trevoke(\n\t\tprojectId: string,\n\t\tpermissionId: string,\n\t\topts?: CallOptions,\n\t): Promise<ProjectPermission | NeonResult<ProjectPermission>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\trevokePermissionFromProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: {\n\t\t\t\t\t\tproject_id: projectId,\n\t\t\t\t\t\tpermission_id: permissionId,\n\t\t\t\t\t},\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data,\n\t\t);\n\t}\n}\n\n/** Project resource — one API call per method (`list` is cursor-paginated). */\nexport class Projects<DThrow extends boolean> {\n\treadonly #ctx: RequestContext;\n\t/** Project access grants (share by email). */\n\treadonly permissions: Permissions<DThrow>;\n\n\tconstructor(ctx: RequestContext) {\n\t\tthis.#ctx = ctx;\n\t\tthis.permissions = new Permissions<DThrow>(ctx);\n\t}\n\n\t/**\n\t * List projects (cursor-paginated). Returns a lazy list — `await .all()`, `.page()`,\n\t * or `for await (… of …)`.\n\t *\n\t * @apiCall GET /projects\n\t */\n\tlist(query?: ListQuery, opts?: CallOptions): Paginated<ProjectListItem> {\n\t\treturn paginate(\n\t\t\t(cursor, signal) =>\n\t\t\t\tlistProjects({\n\t\t\t\t\tclient: this.#ctx.client,\n\t\t\t\t\tquery: {\n\t\t\t\t\t\torg_id: this.#ctx.defaults.orgId,\n\t\t\t\t\t\t...query,\n\t\t\t\t\t\tcursor,\n\t\t\t\t\t},\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => ({\n\t\t\t\titems: data?.projects ?? [],\n\t\t\t\tcursor: data?.pagination?.cursor,\n\t\t\t}),\n\t\t\t() => this.#ctx.deadlineFor(opts),\n\t\t);\n\t}\n\n\t/** @apiCall GET /projects/{project_id} */\n\tget(id: string): Promise<Outcome<Project, DThrow>>;\n\tget<Throw extends boolean = DThrow>(\n\t\tid: string,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<Project, Throw>>;\n\tget(\n\t\tid: string,\n\t\topts?: CallOptions,\n\t): Promise<Project | NeonResult<Project>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\tgetProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { project_id: id },\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data.project,\n\t\t);\n\t}\n\n\t/** @apiCall POST /projects */\n\tcreate(input?: CreateInput): Promise<Outcome<Project, DThrow>>;\n\tcreate<Throw extends boolean = DThrow>(\n\t\tinput: CreateInput | undefined,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<Project, Throw>>;\n\tcreate(\n\t\tinput?: CreateInput,\n\t\topts?: CallOptions,\n\t): Promise<Project | NeonResult<Project>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\tcreateProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tproject: {\n\t\t\t\t\t\t\t...(this.#ctx.defaults.orgId\n\t\t\t\t\t\t\t\t? { org_id: this.#ctx.defaults.orgId }\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t...input,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data.project,\n\t\t);\n\t}\n\n\t/**\n\t * Create a project and return a ready-to-use connection string to its default branch.\n\t * One API call plus readiness polling (the create response already carries the\n\t * connection URI).\n\t *\n\t * @workflow createProject + waitForReadiness\n\t */\n\tcreateAndConnect(\n\t\tinput?: CreateInput,\n\t): Promise<Outcome<ProjectConnection, DThrow>>;\n\tcreateAndConnect<Throw extends boolean = DThrow>(\n\t\tinput: CreateInput | undefined,\n\t\topts: WorkflowOptions<Throw>,\n\t): Promise<Outcome<ProjectConnection, Throw>>;\n\tasync createAndConnect(\n\t\tinput?: CreateInput,\n\t\topts?: WorkflowOptions<boolean>,\n\t): Promise<ProjectConnection | NeonResult<ProjectConnection>> {\n\t\tconst shouldThrow =\n\t\t\topts?.throwOnError ?? this.#ctx.defaults.throwOnError;\n\t\tconst result = await this.#ctx.execute(\n\t\t\t{ ...opts, waitForReadiness: opts?.waitForReadiness ?? true },\n\t\t\t(client, signal) =>\n\t\t\t\tcreateProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tproject: {\n\t\t\t\t\t\t\t...(this.#ctx.defaults.orgId\n\t\t\t\t\t\t\t\t? { org_id: this.#ctx.defaults.orgId }\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t...input,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data,\n\t\t);\n\t\tconst out = withConnectionString(\n\t\t\tresult,\n\t\t\t(data) => data.connection_uris,\n\t\t\t(data, connectionString) => ({\n\t\t\t\tproject: data.project,\n\t\t\t\tconnectionString,\n\t\t\t}),\n\t\t\topts?.pooled ?? true,\n\t\t);\n\t\treturn finalize(out, shouldThrow);\n\t}\n\n\t/** @apiCall PATCH /projects/{project_id} */\n\tupdate(id: string, input: UpdateInput): Promise<Outcome<Project, DThrow>>;\n\tupdate<Throw extends boolean = DThrow>(\n\t\tid: string,\n\t\tinput: UpdateInput,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<Project, Throw>>;\n\tupdate(\n\t\tid: string,\n\t\tinput: UpdateInput,\n\t\topts?: CallOptions,\n\t): Promise<Project | NeonResult<Project>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\tupdateProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { project_id: id },\n\t\t\t\t\tbody: { project: input },\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data.project,\n\t\t);\n\t}\n\n\t/** @apiCall DELETE /projects/{project_id} */\n\tdelete(id: string): Promise<Outcome<Project, DThrow>>;\n\tdelete<Throw extends boolean = DThrow>(\n\t\tid: string,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<Project, Throw>>;\n\tdelete(\n\t\tid: string,\n\t\topts?: CallOptions,\n\t): Promise<Project | NeonResult<Project>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\tdeleteProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { project_id: id },\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data.project,\n\t\t);\n\t}\n\n\t/**\n\t * Recover a soft-deleted project within its retention window (beta). Mirrors\n\t * `branches.recover` at the project level.\n\t *\n\t * @apiCall POST /projects/{project_id}/recover\n\t */\n\trecover(id: string): Promise<Outcome<Project, DThrow>>;\n\trecover<Throw extends boolean = DThrow>(\n\t\tid: string,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<Project, Throw>>;\n\trecover(\n\t\tid: string,\n\t\topts?: CallOptions,\n\t): Promise<Project | NeonResult<Project>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\trecoverProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { project_id: id },\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data.project,\n\t\t);\n\t}\n\n\t/**\n\t * Transfer projects from one organization to another (e.g. sponsored → paid). The\n\t * source org defaults to the client's `orgId`. Requires a key with access to both orgs.\n\t *\n\t * @apiCall POST /organizations/{source_org_id}/projects/transfer\n\t */\n\ttransfer(input: TransferProjectsInput): Promise<Outcome<void, DThrow>>;\n\ttransfer<Throw extends boolean = DThrow>(\n\t\tinput: TransferProjectsInput,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<void, Throw>>;\n\tasync transfer(\n\t\tinput: TransferProjectsInput,\n\t\topts?: CallOptions,\n\t): Promise<void | NeonResult<void>> {\n\t\tconst shouldThrow =\n\t\t\topts?.throwOnError ?? this.#ctx.defaults.throwOnError;\n\t\tconst fromOrgId = input.fromOrgId ?? this.#ctx.defaults.orgId;\n\t\tif (!fromOrgId) {\n\t\t\treturn finalize(\n\t\t\t\terr<void>(\n\t\t\t\t\tnew NeonError(\n\t\t\t\t\t\t\"Pass fromOrgId or set orgId on the client.\",\n\t\t\t\t\t\t\"client\",\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\tshouldThrow,\n\t\t\t);\n\t\t}\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\ttransferProjectsFromOrgToOrg({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { source_org_id: fromOrgId },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tdestination_org_id: input.toOrgId,\n\t\t\t\t\t\tproject_ids: input.projectIds,\n\t\t\t\t\t},\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t() => undefined,\n\t\t);\n\t}\n\n\t/**\n\t * Transfer projects from the personal account to an organization.\n\t *\n\t * @apiCall POST /users/me/projects/transfer\n\t */\n\ttransferFromUser(input: {\n\t\ttoOrgId: string;\n\t\tprojectIds: string[];\n\t}): Promise<Outcome<void, DThrow>>;\n\ttransferFromUser<Throw extends boolean = DThrow>(\n\t\tinput: { toOrgId: string; projectIds: string[] },\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<void, Throw>>;\n\ttransferFromUser(\n\t\tinput: { toOrgId: string; projectIds: string[] },\n\t\topts?: CallOptions,\n\t): Promise<void | NeonResult<void>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\ttransferProjectsFromUserToOrg({\n\t\t\t\t\tclient,\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tdestination_org_id: input.toOrgId,\n\t\t\t\t\t\tproject_ids: input.projectIds,\n\t\t\t\t\t},\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t() => undefined,\n\t\t);\n\t}\n}\n"],"mappings":";;;;;;;AAqDA,IAAa,cAAb,MAAiD;CAChD;CAEA,YAAY,KAAqB;EAChC,KAAKA,OAAO;CACb;CAQA,KACC,WACA,MACiE;EACjE,OAAO,KAAKA,KAAK,IAChB,OACC,QAAQ,WACR,uBAAuB;GACtB;GACA,MAAM,EAAE,YAAY,UAAU;GAC9B,cAAc;GACd;EACD,CAAC,IACD,SAAS,KAAK,mBAChB;CACD;CAYA,MACC,WACA,OACA,MAC6D;EAC7D,OAAO,KAAKA,KAAK,IAChB,OACC,QAAQ,WACR,yBAAyB;GACxB;GACA,MAAM,EAAE,YAAY,UAAU;GAC9B,MAAM,EAAE,MAAM;GACd,cAAc;GACd;EACD,CAAC,IACD,SAAS,IACX;CACD;CAYA,OACC,WACA,cACA,MAC6D;EAC7D,OAAO,KAAKA,KAAK,IAChB,OACC,QAAQ,WACR,4BAA4B;GAC3B;GACA,MAAM;IACL,YAAY;IACZ,eAAe;GAChB;GACA,cAAc;GACd;EACD,CAAC,IACD,SAAS,IACX;CACD;AACD;;AAGA,IAAa,WAAb,MAA8C;CAC7C;;CAEA;CAEA,YAAY,KAAqB;EAChC,KAAKA,OAAO;EACZ,KAAK,cAAc,IAAI,YAAoB,GAAG;CAC/C;;;;;;;CAQA,KAAK,OAAmB,MAAgD;EACvE,OAAO,UACL,QAAQ,WACR,aAAa;GACZ,QAAQ,KAAKA,KAAK;GAClB,OAAO;IACN,QAAQ,KAAKA,KAAK,SAAS;IAC3B,GAAG;IACH;GACD;GACA,cAAc;GACd;EACD,CAAC,IACD,UAAU;GACV,OAAO,MAAM,YAAY,CAAC;GAC1B,QAAQ,MAAM,YAAY;EAC3B,UACM,KAAKA,KAAK,YAAY,IAAI,CACjC;CACD;CAQA,IACC,IACA,MACyC;EACzC,OAAO,KAAKA,KAAK,IAChB,OACC,QAAQ,WACR,WAAW;GACV;GACA,MAAM,EAAE,YAAY,GAAG;GACvB,cAAc;GACd;EACD,CAAC,IACD,SAAS,KAAK,OAChB;CACD;CAQA,OACC,OACA,MACyC;EACzC,OAAO,KAAKA,KAAK,IAChB,OACC,QAAQ,WACR,cAAc;GACb;GACA,MAAM,EACL,SAAS;IACR,GAAI,KAAKA,KAAK,SAAS,QACpB,EAAE,QAAQ,KAAKA,KAAK,SAAS,MAAM,IACnC,CAAC;IACJ,GAAG;GACJ,EACD;GACA,cAAc;GACd;EACD,CAAC,IACD,SAAS,KAAK,OAChB;CACD;CAgBA,MAAM,iBACL,OACA,MAC6D;EAC7D,MAAM,cACL,MAAM,gBAAgB,KAAKA,KAAK,SAAS;EA4B1C,OAAO,SATK,qBACX,MAnBoB,KAAKA,KAAK,QAC9B;GAAE,GAAG;GAAM,kBAAkB,MAAM,oBAAoB;EAAK,IAC3D,QAAQ,WACR,cAAc;GACb;GACA,MAAM,EACL,SAAS;IACR,GAAI,KAAKA,KAAK,SAAS,QACpB,EAAE,QAAQ,KAAKA,KAAK,SAAS,MAAM,IACnC,CAAC;IACJ,GAAG;GACJ,EACD;GACA,cAAc;GACd;EACD,CAAC,IACD,SAAS,IACX,IAGE,SAAS,KAAK,kBACd,MAAM,sBAAsB;GAC5B,SAAS,KAAK;GACd;EACD,IACA,MAAM,UAAU,IAEC,GAAG,WAAW;CACjC;CASA,OACC,IACA,OACA,MACyC;EACzC,OAAO,KAAKA,KAAK,IAChB,OACC,QAAQ,WACR,cAAc;GACb;GACA,MAAM,EAAE,YAAY,GAAG;GACvB,MAAM,EAAE,SAAS,MAAM;GACvB,cAAc;GACd;EACD,CAAC,IACD,SAAS,KAAK,OAChB;CACD;CAQA,OACC,IACA,MACyC;EACzC,OAAO,KAAKA,KAAK,IAChB,OACC,QAAQ,WACR,cAAc;GACb;GACA,MAAM,EAAE,YAAY,GAAG;GACvB,cAAc;GACd;EACD,CAAC,IACD,SAAS,KAAK,OAChB;CACD;CAaA,QACC,IACA,MACyC;EACzC,OAAO,KAAKA,KAAK,IAChB,OACC,QAAQ,WACR,eAAe;GACd;GACA,MAAM,EAAE,YAAY,GAAG;GACvB,cAAc;GACd;EACD,CAAC,IACD,SAAS,KAAK,OAChB;CACD;CAaA,MAAM,SACL,OACA,MACmC;EACnC,MAAM,cACL,MAAM,gBAAgB,KAAKA,KAAK,SAAS;EAC1C,MAAM,YAAY,MAAM,aAAa,KAAKA,KAAK,SAAS;EACxD,IAAI,CAAC,WACJ,OAAO,SACN,IACC,IAAI,UACH,8CACA,QACD,CACD,GACA,WACD;EAED,OAAO,KAAKA,KAAK,IAChB,OACC,QAAQ,WACR,6BAA6B;GAC5B;GACA,MAAM,EAAE,eAAe,UAAU;GACjC,MAAM;IACL,oBAAoB,MAAM;IAC1B,aAAa,MAAM;GACpB;GACA,cAAc;GACd;EACD,CAAC,SACI,KAAA,CACP;CACD;CAeA,iBACC,OACA,MACmC;EACnC,OAAO,KAAKA,KAAK,IAChB,OACC,QAAQ,WACR,8BAA8B;GAC7B;GACA,MAAM;IACL,oBAAoB,MAAM;IAC1B,aAAa,MAAM;GACpB;GACA,cAAc;GACd;EACD,CAAC,SACI,KAAA,CACP;CACD;AACD"}
1
+ {"version":3,"file":"projects.js","names":["#ctx"],"sources":["../../../src/neon/resources/projects.ts"],"sourcesContent":["import {\n\tcreateProject,\n\tdeleteProject,\n\tgetProject,\n\tgrantPermissionToProject,\n\tlistProjectMembers,\n\tlistProjectPermissions,\n\tlistProjects,\n\trecoverProject,\n\tremoveProjectMemberRole,\n\trevokePermissionFromProject,\n\tsetProjectMemberRole,\n\ttransferProjectsFromOrgToOrg,\n\ttransferProjectsFromUserToOrg,\n\tupdateProject,\n} from \"../../client/sdk.gen.js\";\nimport type {\n\tListProjectMembersData,\n\tListProjectsData,\n\tProject,\n\tProjectCreateRequest,\n\tProjectListItem,\n\tProjectMember,\n\tProjectMemberRoleResponse,\n\tProjectPermission,\n\tProjectRole,\n\tProjectUpdateRequest,\n} from \"../../client/types.gen.js\";\nimport { withConnectionString } from \"../connection.js\";\nimport type { CallOptions, RequestContext } from \"../context.js\";\nimport { NeonError } from \"../errors.js\";\nimport { type Paginated, paginate } from \"../paginate.js\";\nimport { err, finalize, type NeonResult, type Outcome } from \"../result.js\";\n\n/** Input for {@link Projects.transfer} (org → org). */\nexport interface TransferProjectsInput {\n\t/** Source org. Defaults to the client's `orgId`. */\n\tfromOrgId?: string;\n\t/** Destination org. */\n\ttoOrgId: string;\n\tprojectIds: string[];\n}\n\ntype ListQuery = Omit<NonNullable<ListProjectsData[\"query\"]>, \"cursor\">;\ntype CreateInput = ProjectCreateRequest[\"project\"];\ntype UpdateInput = ProjectUpdateRequest[\"project\"];\ntype MemberListQuery = Omit<\n\tNonNullable<ListProjectMembersData[\"query\"]>,\n\t\"cursor\"\n>;\n\n/** Per-call options for {@link Members.setRole}. */\nexport interface SetRoleOptions<Throw extends boolean = boolean>\n\textends CallOptions<Throw> {\n\t/**\n\t * Acknowledge that the call lowers the caller's own role. The API rejects a\n\t * self-demotion without it, so it is left off by default.\n\t */\n\tconfirmSelfDemotion?: boolean;\n}\n\n/** Per-call options for {@link Members.removeRole}. */\nexport interface RemoveRoleOptions<Throw extends boolean = boolean>\n\textends CallOptions<Throw> {\n\t/**\n\t * Acknowledge that the call can cost the caller management access. The API\n\t * rejects such a self-removal without it, so it is left off by default.\n\t */\n\tconfirmSelfLockout?: boolean;\n}\n\n/** Per-call options for the connect workflow. */\ninterface WorkflowOptions<Throw extends boolean> extends CallOptions<Throw> {\n\t/** Return a pooled connection string (default `true`). */\n\tpooled?: boolean;\n}\n\n/** A project with a ready-to-use connection string to its default branch. */\nexport interface ProjectConnection {\n\tproject: Project;\n\tconnectionString: string;\n}\n\n/** Project access grants (share a project with additional users by email). */\nexport class Permissions<DThrow extends boolean> {\n\treadonly #ctx: RequestContext;\n\n\tconstructor(ctx: RequestContext) {\n\t\tthis.#ctx = ctx;\n\t}\n\n\t/** @apiCall GET /projects/{project_id}/permissions */\n\tlist(projectId: string): Promise<Outcome<ProjectPermission[], DThrow>>;\n\tlist<Throw extends boolean = DThrow>(\n\t\tprojectId: string,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<ProjectPermission[], Throw>>;\n\tlist(\n\t\tprojectId: string,\n\t\topts?: CallOptions,\n\t): Promise<ProjectPermission[] | NeonResult<ProjectPermission[]>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\tlistProjectPermissions({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { project_id: projectId },\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data.project_permissions,\n\t\t);\n\t}\n\n\t/** @apiCall POST /projects/{project_id}/permissions */\n\tgrant(\n\t\tprojectId: string,\n\t\temail: string,\n\t): Promise<Outcome<ProjectPermission, DThrow>>;\n\tgrant<Throw extends boolean = DThrow>(\n\t\tprojectId: string,\n\t\temail: string,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<ProjectPermission, Throw>>;\n\tgrant(\n\t\tprojectId: string,\n\t\temail: string,\n\t\topts?: CallOptions,\n\t): Promise<ProjectPermission | NeonResult<ProjectPermission>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\tgrantPermissionToProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { project_id: projectId },\n\t\t\t\t\tbody: { email },\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data,\n\t\t);\n\t}\n\n\t/** @apiCall DELETE /projects/{project_id}/permissions/{permission_id} */\n\trevoke(\n\t\tprojectId: string,\n\t\tpermissionId: string,\n\t): Promise<Outcome<ProjectPermission, DThrow>>;\n\trevoke<Throw extends boolean = DThrow>(\n\t\tprojectId: string,\n\t\tpermissionId: string,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<ProjectPermission, Throw>>;\n\trevoke(\n\t\tprojectId: string,\n\t\tpermissionId: string,\n\t\topts?: CallOptions,\n\t): Promise<ProjectPermission | NeonResult<ProjectPermission>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\trevokePermissionFromProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: {\n\t\t\t\t\t\tproject_id: projectId,\n\t\t\t\t\t\tpermission_id: permissionId,\n\t\t\t\t\t},\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data,\n\t\t);\n\t}\n}\n\n/**\n * Per-project roles for members of the owning organization.\n *\n * Distinct from {@link Permissions}, which shares a project with an individual by\n * email address: these act on existing org members by member id, and clearing a\n * grant leaves the member's organization-role default in force rather than\n * removing their access.\n */\nexport class Members<DThrow extends boolean> {\n\treadonly #ctx: RequestContext;\n\n\tconstructor(ctx: RequestContext) {\n\t\tthis.#ctx = ctx;\n\t}\n\n\t/**\n\t * List org members and their project roles (cursor-paginated). Org-owned\n\t * projects only — a personal project answers `404`, as does an org with\n\t * per-project role management disabled.\n\t *\n\t * @apiCall GET /projects/{project_id}/members (cursor-paginated)\n\t */\n\tlist(\n\t\tprojectId: string,\n\t\tquery?: MemberListQuery,\n\t\topts?: CallOptions,\n\t): Paginated<ProjectMember> {\n\t\treturn paginate(\n\t\t\t(cursor, signal) =>\n\t\t\t\tlistProjectMembers({\n\t\t\t\t\tclient: this.#ctx.client,\n\t\t\t\t\tpath: { project_id: projectId },\n\t\t\t\t\tquery: { ...query, cursor },\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => ({\n\t\t\t\titems: data?.project_members ?? [],\n\t\t\t\tcursor: data?.pagination?.next,\n\t\t\t}),\n\t\t\t() => this.#ctx.deadlineFor(opts),\n\t\t);\n\t}\n\n\t/**\n\t * Set a member's explicit project role, replacing any existing grant.\n\t * Idempotent. Check `credential_rotation_recommended` and\n\t * `org_api_key_rotation_recommended` on the result — a downgrade can leave\n\t * credentials the member still holds.\n\t *\n\t * @apiCall PUT /projects/{project_id}/members/{member_id}/role\n\t */\n\tsetRole(\n\t\tprojectId: string,\n\t\tmemberId: string,\n\t\trole: ProjectRole,\n\t): Promise<Outcome<ProjectMemberRoleResponse, DThrow>>;\n\tsetRole<Throw extends boolean = DThrow>(\n\t\tprojectId: string,\n\t\tmemberId: string,\n\t\trole: ProjectRole,\n\t\topts: SetRoleOptions<Throw>,\n\t): Promise<Outcome<ProjectMemberRoleResponse, Throw>>;\n\tsetRole(\n\t\tprojectId: string,\n\t\tmemberId: string,\n\t\trole: ProjectRole,\n\t\topts?: SetRoleOptions<boolean>,\n\t): Promise<\n\t\tProjectMemberRoleResponse | NeonResult<ProjectMemberRoleResponse>\n\t> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\tsetProjectMemberRole({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { project_id: projectId, member_id: memberId },\n\t\t\t\t\tquery: opts?.confirmSelfDemotion\n\t\t\t\t\t\t? { confirm_self_demotion: true }\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tbody: { role },\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data,\n\t\t);\n\t}\n\n\t/**\n\t * Clear a member's explicit project grant. Idempotent, and a no-op when no\n\t * explicit grant exists. The member keeps whatever their organization role\n\t * grants by default, so this narrows access rather than removing it.\n\t *\n\t * @apiCall DELETE /projects/{project_id}/members/{member_id}/role\n\t */\n\tremoveRole(\n\t\tprojectId: string,\n\t\tmemberId: string,\n\t): Promise<Outcome<ProjectMemberRoleResponse, DThrow>>;\n\tremoveRole<Throw extends boolean = DThrow>(\n\t\tprojectId: string,\n\t\tmemberId: string,\n\t\topts: RemoveRoleOptions<Throw>,\n\t): Promise<Outcome<ProjectMemberRoleResponse, Throw>>;\n\tremoveRole(\n\t\tprojectId: string,\n\t\tmemberId: string,\n\t\topts?: RemoveRoleOptions<boolean>,\n\t): Promise<\n\t\tProjectMemberRoleResponse | NeonResult<ProjectMemberRoleResponse>\n\t> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\tremoveProjectMemberRole({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { project_id: projectId, member_id: memberId },\n\t\t\t\t\tquery: opts?.confirmSelfLockout\n\t\t\t\t\t\t? { confirm_self_lockout: true }\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data,\n\t\t);\n\t}\n}\n\n/** Project resource — one API call per method (`list` is cursor-paginated). */\nexport class Projects<DThrow extends boolean> {\n\treadonly #ctx: RequestContext;\n\t/** Project access grants (share by email). */\n\treadonly permissions: Permissions<DThrow>;\n\t/** Per-project roles for members of the owning organization. */\n\treadonly members: Members<DThrow>;\n\n\tconstructor(ctx: RequestContext) {\n\t\tthis.#ctx = ctx;\n\t\tthis.permissions = new Permissions<DThrow>(ctx);\n\t\tthis.members = new Members<DThrow>(ctx);\n\t}\n\n\t/**\n\t * List projects (cursor-paginated). Returns a lazy list — `await .all()`, `.page()`,\n\t * or `for await (… of …)`.\n\t *\n\t * @apiCall GET /projects\n\t */\n\tlist(query?: ListQuery, opts?: CallOptions): Paginated<ProjectListItem> {\n\t\treturn paginate(\n\t\t\t(cursor, signal) =>\n\t\t\t\tlistProjects({\n\t\t\t\t\tclient: this.#ctx.client,\n\t\t\t\t\tquery: {\n\t\t\t\t\t\torg_id: this.#ctx.defaults.orgId,\n\t\t\t\t\t\t...query,\n\t\t\t\t\t\tcursor,\n\t\t\t\t\t},\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => ({\n\t\t\t\titems: data?.projects ?? [],\n\t\t\t\tcursor: data?.pagination?.cursor,\n\t\t\t}),\n\t\t\t() => this.#ctx.deadlineFor(opts),\n\t\t);\n\t}\n\n\t/** @apiCall GET /projects/{project_id} */\n\tget(id: string): Promise<Outcome<Project, DThrow>>;\n\tget<Throw extends boolean = DThrow>(\n\t\tid: string,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<Project, Throw>>;\n\tget(\n\t\tid: string,\n\t\topts?: CallOptions,\n\t): Promise<Project | NeonResult<Project>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\tgetProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { project_id: id },\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data.project,\n\t\t);\n\t}\n\n\t/** @apiCall POST /projects */\n\tcreate(input?: CreateInput): Promise<Outcome<Project, DThrow>>;\n\tcreate<Throw extends boolean = DThrow>(\n\t\tinput: CreateInput | undefined,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<Project, Throw>>;\n\tcreate(\n\t\tinput?: CreateInput,\n\t\topts?: CallOptions,\n\t): Promise<Project | NeonResult<Project>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\tcreateProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tproject: {\n\t\t\t\t\t\t\t...(this.#ctx.defaults.orgId\n\t\t\t\t\t\t\t\t? { org_id: this.#ctx.defaults.orgId }\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t...input,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data.project,\n\t\t);\n\t}\n\n\t/**\n\t * Create a project and return a ready-to-use connection string to its default branch.\n\t * One API call plus readiness polling (the create response already carries the\n\t * connection URI).\n\t *\n\t * @workflow createProject + waitForReadiness\n\t */\n\tcreateAndConnect(\n\t\tinput?: CreateInput,\n\t): Promise<Outcome<ProjectConnection, DThrow>>;\n\tcreateAndConnect<Throw extends boolean = DThrow>(\n\t\tinput: CreateInput | undefined,\n\t\topts: WorkflowOptions<Throw>,\n\t): Promise<Outcome<ProjectConnection, Throw>>;\n\tasync createAndConnect(\n\t\tinput?: CreateInput,\n\t\topts?: WorkflowOptions<boolean>,\n\t): Promise<ProjectConnection | NeonResult<ProjectConnection>> {\n\t\tconst shouldThrow =\n\t\t\topts?.throwOnError ?? this.#ctx.defaults.throwOnError;\n\t\tconst result = await this.#ctx.execute(\n\t\t\t{ ...opts, waitForReadiness: opts?.waitForReadiness ?? true },\n\t\t\t(client, signal) =>\n\t\t\t\tcreateProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tproject: {\n\t\t\t\t\t\t\t...(this.#ctx.defaults.orgId\n\t\t\t\t\t\t\t\t? { org_id: this.#ctx.defaults.orgId }\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t...input,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data,\n\t\t);\n\t\tconst out = withConnectionString(\n\t\t\tresult,\n\t\t\t(data) => data.connection_uris,\n\t\t\t(data, connectionString) => ({\n\t\t\t\tproject: data.project,\n\t\t\t\tconnectionString,\n\t\t\t}),\n\t\t\topts?.pooled ?? true,\n\t\t);\n\t\treturn finalize(out, shouldThrow);\n\t}\n\n\t/** @apiCall PATCH /projects/{project_id} */\n\tupdate(id: string, input: UpdateInput): Promise<Outcome<Project, DThrow>>;\n\tupdate<Throw extends boolean = DThrow>(\n\t\tid: string,\n\t\tinput: UpdateInput,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<Project, Throw>>;\n\tupdate(\n\t\tid: string,\n\t\tinput: UpdateInput,\n\t\topts?: CallOptions,\n\t): Promise<Project | NeonResult<Project>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\tupdateProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { project_id: id },\n\t\t\t\t\tbody: { project: input },\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data.project,\n\t\t);\n\t}\n\n\t/** @apiCall DELETE /projects/{project_id} */\n\tdelete(id: string): Promise<Outcome<Project, DThrow>>;\n\tdelete<Throw extends boolean = DThrow>(\n\t\tid: string,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<Project, Throw>>;\n\tdelete(\n\t\tid: string,\n\t\topts?: CallOptions,\n\t): Promise<Project | NeonResult<Project>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\tdeleteProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { project_id: id },\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data.project,\n\t\t);\n\t}\n\n\t/**\n\t * Recover a soft-deleted project within its retention window (beta).\n\t *\n\t * @apiCall POST /projects/{project_id}/recover\n\t */\n\trecover(id: string): Promise<Outcome<Project, DThrow>>;\n\trecover<Throw extends boolean = DThrow>(\n\t\tid: string,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<Project, Throw>>;\n\trecover(\n\t\tid: string,\n\t\topts?: CallOptions,\n\t): Promise<Project | NeonResult<Project>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\trecoverProject({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { project_id: id },\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t(data) => data.project,\n\t\t);\n\t}\n\n\t/**\n\t * Transfer projects from one organization to another (e.g. sponsored → paid). The\n\t * source org defaults to the client's `orgId`. Requires a key with access to both orgs.\n\t *\n\t * @apiCall POST /organizations/{source_org_id}/projects/transfer\n\t */\n\ttransfer(input: TransferProjectsInput): Promise<Outcome<void, DThrow>>;\n\ttransfer<Throw extends boolean = DThrow>(\n\t\tinput: TransferProjectsInput,\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<void, Throw>>;\n\tasync transfer(\n\t\tinput: TransferProjectsInput,\n\t\topts?: CallOptions,\n\t): Promise<void | NeonResult<void>> {\n\t\tconst shouldThrow =\n\t\t\topts?.throwOnError ?? this.#ctx.defaults.throwOnError;\n\t\tconst fromOrgId = input.fromOrgId ?? this.#ctx.defaults.orgId;\n\t\tif (!fromOrgId) {\n\t\t\treturn finalize(\n\t\t\t\terr<void>(\n\t\t\t\t\tnew NeonError(\n\t\t\t\t\t\t\"Pass fromOrgId or set orgId on the client.\",\n\t\t\t\t\t\t\"client\",\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\tshouldThrow,\n\t\t\t);\n\t\t}\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\ttransferProjectsFromOrgToOrg({\n\t\t\t\t\tclient,\n\t\t\t\t\tpath: { source_org_id: fromOrgId },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tdestination_org_id: input.toOrgId,\n\t\t\t\t\t\tproject_ids: input.projectIds,\n\t\t\t\t\t},\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t() => undefined,\n\t\t);\n\t}\n\n\t/**\n\t * Transfer projects from the personal account to an organization.\n\t *\n\t * @apiCall POST /users/me/projects/transfer\n\t */\n\ttransferFromUser(input: {\n\t\ttoOrgId: string;\n\t\tprojectIds: string[];\n\t}): Promise<Outcome<void, DThrow>>;\n\ttransferFromUser<Throw extends boolean = DThrow>(\n\t\tinput: { toOrgId: string; projectIds: string[] },\n\t\topts: CallOptions<Throw>,\n\t): Promise<Outcome<void, Throw>>;\n\ttransferFromUser(\n\t\tinput: { toOrgId: string; projectIds: string[] },\n\t\topts?: CallOptions,\n\t): Promise<void | NeonResult<void>> {\n\t\treturn this.#ctx.run(\n\t\t\topts,\n\t\t\t(client, signal) =>\n\t\t\t\ttransferProjectsFromUserToOrg({\n\t\t\t\t\tclient,\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tdestination_org_id: input.toOrgId,\n\t\t\t\t\t\tproject_ids: input.projectIds,\n\t\t\t\t\t},\n\t\t\t\t\tthrowOnError: false,\n\t\t\t\t\tsignal,\n\t\t\t\t}),\n\t\t\t() => undefined,\n\t\t);\n\t}\n}\n"],"mappings":"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"}