@crowdedkingdoms/crowdyjs 1.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 (124) hide show
  1. package/LICENSE +21 -0
  2. package/MIGRATION.md +247 -0
  3. package/README.md +303 -0
  4. package/dist/auth-state.d.ts +11 -0
  5. package/dist/auth-state.d.ts.map +1 -0
  6. package/dist/auth-state.js +13 -0
  7. package/dist/client.d.ts +135 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +150 -0
  10. package/dist/crowdy-client.d.ts +182 -0
  11. package/dist/crowdy-client.d.ts.map +1 -0
  12. package/dist/crowdy-client.js +146 -0
  13. package/dist/domains/actors.d.ts +117 -0
  14. package/dist/domains/actors.d.ts.map +1 -0
  15. package/dist/domains/actors.js +140 -0
  16. package/dist/domains/admin.d.ts +61 -0
  17. package/dist/domains/admin.d.ts.map +1 -0
  18. package/dist/domains/admin.js +33 -0
  19. package/dist/domains/appAccess.d.ts +141 -0
  20. package/dist/domains/appAccess.d.ts.map +1 -0
  21. package/dist/domains/appAccess.js +198 -0
  22. package/dist/domains/apps.d.ts +192 -0
  23. package/dist/domains/apps.d.ts.map +1 -0
  24. package/dist/domains/apps.js +217 -0
  25. package/dist/domains/auth.d.ts +163 -0
  26. package/dist/domains/auth.d.ts.map +1 -0
  27. package/dist/domains/auth.js +208 -0
  28. package/dist/domains/avatars.d.ts +94 -0
  29. package/dist/domains/avatars.d.ts.map +1 -0
  30. package/dist/domains/avatars.js +137 -0
  31. package/dist/domains/billing.d.ts +97 -0
  32. package/dist/domains/billing.d.ts.map +1 -0
  33. package/dist/domains/billing.js +131 -0
  34. package/dist/domains/channels.d.ts +293 -0
  35. package/dist/domains/channels.d.ts.map +1 -0
  36. package/dist/domains/channels.js +353 -0
  37. package/dist/domains/chunks.d.ts +133 -0
  38. package/dist/domains/chunks.d.ts.map +1 -0
  39. package/dist/domains/chunks.js +153 -0
  40. package/dist/domains/controlPlane.d.ts +174 -0
  41. package/dist/domains/controlPlane.d.ts.map +1 -0
  42. package/dist/domains/controlPlane.js +252 -0
  43. package/dist/domains/environments.d.ts +155 -0
  44. package/dist/domains/environments.d.ts.map +1 -0
  45. package/dist/domains/environments.js +223 -0
  46. package/dist/domains/gameApps.d.ts +114 -0
  47. package/dist/domains/gameApps.d.ts.map +1 -0
  48. package/dist/domains/gameApps.js +169 -0
  49. package/dist/domains/gameModel.d.ts +668 -0
  50. package/dist/domains/gameModel.d.ts.map +1 -0
  51. package/dist/domains/gameModel.js +816 -0
  52. package/dist/domains/host.d.ts +35 -0
  53. package/dist/domains/host.d.ts.map +1 -0
  54. package/dist/domains/host.js +40 -0
  55. package/dist/domains/organizations.d.ts +179 -0
  56. package/dist/domains/organizations.d.ts.map +1 -0
  57. package/dist/domains/organizations.js +269 -0
  58. package/dist/domains/payments.d.ts +104 -0
  59. package/dist/domains/payments.d.ts.map +1 -0
  60. package/dist/domains/payments.js +129 -0
  61. package/dist/domains/platform.d.ts +49 -0
  62. package/dist/domains/platform.d.ts.map +1 -0
  63. package/dist/domains/platform.js +50 -0
  64. package/dist/domains/quotas.d.ts +62 -0
  65. package/dist/domains/quotas.d.ts.map +1 -0
  66. package/dist/domains/quotas.js +79 -0
  67. package/dist/domains/serverStatus.d.ts +90 -0
  68. package/dist/domains/serverStatus.d.ts.map +1 -0
  69. package/dist/domains/serverStatus.js +104 -0
  70. package/dist/domains/sharedEnvironment.d.ts +133 -0
  71. package/dist/domains/sharedEnvironment.d.ts.map +1 -0
  72. package/dist/domains/sharedEnvironment.js +179 -0
  73. package/dist/domains/state.d.ts +64 -0
  74. package/dist/domains/state.d.ts.map +1 -0
  75. package/dist/domains/state.js +75 -0
  76. package/dist/domains/teams.d.ts +292 -0
  77. package/dist/domains/teams.d.ts.map +1 -0
  78. package/dist/domains/teams.js +352 -0
  79. package/dist/domains/teleport.d.ts +41 -0
  80. package/dist/domains/teleport.d.ts.map +1 -0
  81. package/dist/domains/teleport.js +43 -0
  82. package/dist/domains/udp.d.ts +405 -0
  83. package/dist/domains/udp.d.ts.map +1 -0
  84. package/dist/domains/udp.js +457 -0
  85. package/dist/domains/usage.d.ts +76 -0
  86. package/dist/domains/usage.d.ts.map +1 -0
  87. package/dist/domains/usage.js +110 -0
  88. package/dist/domains/users.d.ts +147 -0
  89. package/dist/domains/users.d.ts.map +1 -0
  90. package/dist/domains/users.js +195 -0
  91. package/dist/domains/voxels.d.ts +136 -0
  92. package/dist/domains/voxels.d.ts.map +1 -0
  93. package/dist/domains/voxels.js +153 -0
  94. package/dist/errors.d.ts +158 -0
  95. package/dist/errors.d.ts.map +1 -0
  96. package/dist/errors.js +142 -0
  97. package/dist/generated/graphql.d.ts +12206 -0
  98. package/dist/generated/graphql.d.ts.map +1 -0
  99. package/dist/generated/graphql.js +474 -0
  100. package/dist/index.d.ts +84 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +85 -0
  103. package/dist/logger.d.ts +8 -0
  104. package/dist/logger.d.ts.map +1 -0
  105. package/dist/logger.js +1 -0
  106. package/dist/realtime.d.ts +319 -0
  107. package/dist/realtime.d.ts.map +1 -0
  108. package/dist/realtime.js +390 -0
  109. package/dist/session.d.ts +73 -0
  110. package/dist/session.d.ts.map +1 -0
  111. package/dist/session.js +96 -0
  112. package/dist/subscriptions.d.ts +2 -0
  113. package/dist/subscriptions.d.ts.map +1 -0
  114. package/dist/subscriptions.js +1 -0
  115. package/dist/types.d.ts +658 -0
  116. package/dist/types.d.ts.map +1 -0
  117. package/dist/types.js +61 -0
  118. package/dist/utils.d.ts +98 -0
  119. package/dist/utils.d.ts.map +1 -0
  120. package/dist/utils.js +136 -0
  121. package/dist/world.d.ts +236 -0
  122. package/dist/world.d.ts.map +1 -0
  123. package/dist/world.js +275 -0
  124. package/package.json +73 -0
@@ -0,0 +1,35 @@
1
+ import type { GraphQLClient } from '../client.js';
2
+ import { type GameHostQuery, type ActorHeartbeatMutation } from '../generated/graphql.js';
3
+ /**
4
+ * Game-host election + actor liveness heartbeat — exposed as `client.host`.
5
+ *
6
+ * Targets the **game-api**. The elected host is deterministic across all
7
+ * game-api replicas (the user whose earliest still-connected actor was created
8
+ * first wins). {@link heartbeat} refreshes the caller's actor freshness (keeping
9
+ * them host-eligible) and returns the freshly-elected host in one round-trip —
10
+ * call it on an interval shorter than the server's freshness window. Both
11
+ * require a valid session; `appId` is a `BigInt` decimal string.
12
+ *
13
+ * @throws {CrowdyGraphQLError} `UNAUTHENTICATED` without a session.
14
+ */
15
+ export declare class HostAPI {
16
+ private readonly graphql;
17
+ constructor(graphql: GraphQLClient);
18
+ /**
19
+ * Return the single elected host user for an app, or `null` when no actors
20
+ * exist.
21
+ *
22
+ * @param appId - The app to elect the host for.
23
+ * @returns The elected {@link GameHost}, or `null`.
24
+ */
25
+ get(appId: string): Promise<GameHostQuery['gameHost']>;
26
+ /**
27
+ * Refresh the caller's actor freshness in an app and return the freshly
28
+ * elected host. Returns `null` when no fresh actors exist for the app.
29
+ *
30
+ * @param appId - The app whose actors to keep fresh (and elect the host for).
31
+ * @returns The freshly elected {@link GameHost}, or `null`.
32
+ */
33
+ heartbeat(appId: string): Promise<ActorHeartbeatMutation['actorHeartbeat']>;
34
+ }
35
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/domains/host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC5B,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;;;;GAWG;AACH,qBAAa,OAAO;IACN,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,aAAa;IAEnD;;;;;;OAMG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAK5D;;;;;;OAMG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;CAIlF"}
@@ -0,0 +1,40 @@
1
+ import { GameHostDocument, ActorHeartbeatDocument, } from '../generated/graphql.js';
2
+ /**
3
+ * Game-host election + actor liveness heartbeat — exposed as `client.host`.
4
+ *
5
+ * Targets the **game-api**. The elected host is deterministic across all
6
+ * game-api replicas (the user whose earliest still-connected actor was created
7
+ * first wins). {@link heartbeat} refreshes the caller's actor freshness (keeping
8
+ * them host-eligible) and returns the freshly-elected host in one round-trip —
9
+ * call it on an interval shorter than the server's freshness window. Both
10
+ * require a valid session; `appId` is a `BigInt` decimal string.
11
+ *
12
+ * @throws {CrowdyGraphQLError} `UNAUTHENTICATED` without a session.
13
+ */
14
+ export class HostAPI {
15
+ constructor(graphql) {
16
+ this.graphql = graphql;
17
+ }
18
+ /**
19
+ * Return the single elected host user for an app, or `null` when no actors
20
+ * exist.
21
+ *
22
+ * @param appId - The app to elect the host for.
23
+ * @returns The elected {@link GameHost}, or `null`.
24
+ */
25
+ async get(appId) {
26
+ const data = await this.graphql.request(GameHostDocument, { appId });
27
+ return data.gameHost;
28
+ }
29
+ /**
30
+ * Refresh the caller's actor freshness in an app and return the freshly
31
+ * elected host. Returns `null` when no fresh actors exist for the app.
32
+ *
33
+ * @param appId - The app whose actors to keep fresh (and elect the host for).
34
+ * @returns The freshly elected {@link GameHost}, or `null`.
35
+ */
36
+ async heartbeat(appId) {
37
+ const data = await this.graphql.request(ActorHeartbeatDocument, { appId });
38
+ return data.actorHeartbeat;
39
+ }
40
+ }
@@ -0,0 +1,179 @@
1
+ import type { GraphQLClient } from '../client.js';
2
+ import { type OrganizationQuery, type OrganizationBySlugQuery, type MyOrganizationsQuery, type OrgMembersQuery, type OrgRolesQuery, type MemberRolesQuery, type OrgPermissionsQuery, type OrgTokensQuery, type CreateOrganizationMutation, type SetOrgStatusMutation, type CreateOrgTokenMutation, type UpdateOrgTokenMutation, type RevokeOrgTokenMutation, type InviteOrgMemberMutation, type RemoveOrgMemberMutation, type UpdateOrgMemberRolesMutation, type CreateOrgRoleMutation, type UpdateOrgRoleMutation, type DeleteOrgRoleMutation, type CreateOrganizationInput, type CreateOrgTokenInput, type UpdateOrgTokenInput, type InviteOrgMemberInput, type CreateOrgRoleInput, type UpdateOrgRoleInput } from '../generated/graphql.js';
3
+ /**
4
+ * Organizations, members, roles (RBAC), and org API tokens — exposed as
5
+ * `client.organizations` (and grouped under `client.admin`).
6
+ *
7
+ * Targets the **management-api**. This is the studio-admin surface: an
8
+ * organization owns apps, billing, quotas, and environments, and its RBAC
9
+ * grants (`manage_members`, `manage_tokens`, ...) gate the rest of the admin
10
+ * APIs. Most operations require an authenticated caller who is an active member
11
+ * of the org with the relevant permission; reads such as {@link permissions}
12
+ * and {@link bySlug} are public.
13
+ *
14
+ * `BigInt` ids (`orgId`, `userId`, `orgRoleId`, `orgTokenId`) are decimal
15
+ * strings.
16
+ *
17
+ * @throws {CrowdyGraphQLError} `UNAUTHENTICATED` without a session, `FORBIDDEN`
18
+ * / `SCOPE_MISSING` when the caller lacks the required org permission.
19
+ */
20
+ export declare class OrganizationsAPI {
21
+ private readonly management;
22
+ constructor(management: GraphQLClient);
23
+ /**
24
+ * Fetch a single organization by numeric id. Requires authentication.
25
+ *
26
+ * @param orgId - Numeric org id (`BigInt` as a decimal string).
27
+ * @returns The {@link Organization}, or `null` if it does not exist.
28
+ */
29
+ get(orgId: string): Promise<OrganizationQuery['organization']>;
30
+ /**
31
+ * Resolve an organization by its URL slug. **Public** — no session required.
32
+ *
33
+ * @param slug - The org's URL slug (e.g. `"acme"`).
34
+ * @returns The {@link Organization}, or `null` if no match.
35
+ */
36
+ bySlug(slug: string): Promise<OrganizationBySlugQuery['organizationBySlug']>;
37
+ /**
38
+ * List the organizations the authenticated caller is an active member of,
39
+ * with their per-org permissions and roles.
40
+ *
41
+ * @returns An array of {@link OrgMembership} (empty if the caller belongs to
42
+ * no orgs).
43
+ */
44
+ mine(): Promise<MyOrganizationsQuery['myOrganizations']>;
45
+ /**
46
+ * List members of an organization. Requires the `manage_members` org
47
+ * permission.
48
+ *
49
+ * @param orgId - Numeric org id.
50
+ * @returns The org's members with their roles.
51
+ */
52
+ members(orgId: string): Promise<OrgMembersQuery['orgMembers']>;
53
+ /**
54
+ * List the custom + system roles defined for an organization. Requires the
55
+ * `manage_members` org permission.
56
+ *
57
+ * @param orgId - Numeric org id.
58
+ * @returns The org's roles.
59
+ */
60
+ roles(orgId: string): Promise<OrgRolesQuery['orgRoles']>;
61
+ /**
62
+ * List the roles currently assigned to one organization member. Requires the
63
+ * `manage_members` org permission.
64
+ *
65
+ * @param orgMemberId - Numeric org-member id (`BigInt` as a decimal string).
66
+ * @returns The member's roles.
67
+ */
68
+ memberRoles(orgMemberId: string): Promise<MemberRolesQuery['memberRoles']>;
69
+ /**
70
+ * List every assignable org permission key with its description. **Public** —
71
+ * useful for building a role editor UI.
72
+ *
73
+ * @returns The catalog of org permissions.
74
+ */
75
+ permissions(): Promise<OrgPermissionsQuery['orgPermissions']>;
76
+ /**
77
+ * List the API tokens issued for an organization (metadata only; the secret
78
+ * is shown once at creation). Requires the `manage_tokens` org permission.
79
+ *
80
+ * @param orgId - Numeric org id.
81
+ * @returns The org's API tokens.
82
+ */
83
+ tokens(orgId: string): Promise<OrgTokensQuery['orgTokens']>;
84
+ /**
85
+ * Create a new organization owned by the authenticated caller. The caller
86
+ * becomes the owner with full permissions.
87
+ *
88
+ * @param input - {@link CreateOrganizationInput}: `name` and a unique `slug`.
89
+ * @returns The created {@link Organization}.
90
+ */
91
+ create(input: CreateOrganizationInput): Promise<CreateOrganizationMutation['createOrganization']>;
92
+ /**
93
+ * Set an organization's lifecycle status. **Super-admin only.**
94
+ *
95
+ * @param orgId - Numeric org id.
96
+ * @param status - The new status (e.g. `"active"`, `"suspended"`).
97
+ * @returns The updated {@link Organization}.
98
+ */
99
+ setStatus(orgId: string, status: string): Promise<SetOrgStatusMutation['setOrgStatus']>;
100
+ /**
101
+ * Mint a new org API token (for server-side studio backends). Requires the
102
+ * `manage_tokens` org permission. The plaintext secret is returned **once**.
103
+ *
104
+ * @param input - {@link CreateOrgTokenInput}: `orgId`, `name`, optional
105
+ * `permissions` and `expiresAt`.
106
+ * @returns The created token including its one-time plaintext secret.
107
+ */
108
+ createToken(input: CreateOrgTokenInput): Promise<CreateOrgTokenMutation['createOrgToken']>;
109
+ /**
110
+ * Update an org token's metadata (name / permissions / expiry). Requires the
111
+ * `manage_tokens` org permission.
112
+ *
113
+ * @param orgTokenId - Numeric token id.
114
+ * @param input - {@link UpdateOrgTokenInput} fields to change.
115
+ * @returns The updated token metadata.
116
+ */
117
+ updateToken(orgTokenId: string, input: UpdateOrgTokenInput): Promise<UpdateOrgTokenMutation['updateOrgToken']>;
118
+ /**
119
+ * Revoke (disable) an org token. Requires the `manage_tokens` org permission.
120
+ *
121
+ * @param orgTokenId - Numeric token id.
122
+ * @returns `true` on success.
123
+ */
124
+ revokeToken(orgTokenId: string): Promise<RevokeOrgTokenMutation['revokeOrgToken']>;
125
+ /**
126
+ * Invite a user to an organization (by email or user id), optionally with
127
+ * initial roles. Requires the `manage_members` org permission.
128
+ *
129
+ * @param input - {@link InviteOrgMemberInput}.
130
+ * @returns The created membership.
131
+ */
132
+ inviteMember(input: InviteOrgMemberInput): Promise<InviteOrgMemberMutation['inviteOrgMember']>;
133
+ /**
134
+ * Remove a member from an organization. Requires the `manage_members` org
135
+ * permission.
136
+ *
137
+ * @param orgId - Numeric org id.
138
+ * @param userId - Numeric id of the member to remove.
139
+ * @returns `true` on success.
140
+ */
141
+ removeMember(orgId: string, userId: string): Promise<RemoveOrgMemberMutation['removeOrgMember']>;
142
+ /**
143
+ * Replace a member's role assignments. Requires the `manage_members` org
144
+ * permission.
145
+ *
146
+ * @param orgId - Numeric org id.
147
+ * @param userId - Numeric id of the member.
148
+ * @param roleIds - The full set of role ids the member should hold.
149
+ * @returns The updated membership.
150
+ */
151
+ setMemberRoles(orgId: string, userId: string, roleIds: string[]): Promise<UpdateOrgMemberRolesMutation['updateOrgMemberRoles']>;
152
+ /**
153
+ * Create a custom org role with a set of permissions. Requires the
154
+ * `manage_members` org permission.
155
+ *
156
+ * @param input - {@link CreateOrgRoleInput}: `orgId`, `roleName`,
157
+ * `permissions`.
158
+ * @returns The created {@link OrgRole}.
159
+ */
160
+ createRole(input: CreateOrgRoleInput): Promise<CreateOrgRoleMutation['createOrgRole']>;
161
+ /**
162
+ * Update a custom org role's name/permissions. Requires the `manage_members`
163
+ * org permission. System roles cannot be edited.
164
+ *
165
+ * @param orgRoleId - Numeric role id.
166
+ * @param input - {@link UpdateOrgRoleInput} fields to change.
167
+ * @returns The updated {@link OrgRole}.
168
+ */
169
+ updateRole(orgRoleId: string, input: UpdateOrgRoleInput): Promise<UpdateOrgRoleMutation['updateOrgRole']>;
170
+ /**
171
+ * Delete a custom org role. Requires the `manage_members` org permission.
172
+ * System roles cannot be deleted.
173
+ *
174
+ * @param orgRoleId - Numeric role id.
175
+ * @returns `true` on success.
176
+ */
177
+ deleteRole(orgRoleId: string): Promise<DeleteOrgRoleMutation['deleteOrgRole']>;
178
+ }
179
+ //# sourceMappingURL=organizations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../../src/domains/organizations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,269 @@
1
+ import { OrganizationDocument, OrganizationBySlugDocument, MyOrganizationsDocument, OrgMembersDocument, OrgRolesDocument, MemberRolesDocument, OrgPermissionsDocument, OrgTokensDocument, CreateOrganizationDocument, SetOrgStatusDocument, CreateOrgTokenDocument, UpdateOrgTokenDocument, RevokeOrgTokenDocument, InviteOrgMemberDocument, RemoveOrgMemberDocument, UpdateOrgMemberRolesDocument, CreateOrgRoleDocument, UpdateOrgRoleDocument, DeleteOrgRoleDocument, } from '../generated/graphql.js';
2
+ /**
3
+ * Organizations, members, roles (RBAC), and org API tokens — exposed as
4
+ * `client.organizations` (and grouped under `client.admin`).
5
+ *
6
+ * Targets the **management-api**. This is the studio-admin surface: an
7
+ * organization owns apps, billing, quotas, and environments, and its RBAC
8
+ * grants (`manage_members`, `manage_tokens`, ...) gate the rest of the admin
9
+ * APIs. Most operations require an authenticated caller who is an active member
10
+ * of the org with the relevant permission; reads such as {@link permissions}
11
+ * and {@link bySlug} are public.
12
+ *
13
+ * `BigInt` ids (`orgId`, `userId`, `orgRoleId`, `orgTokenId`) are decimal
14
+ * strings.
15
+ *
16
+ * @throws {CrowdyGraphQLError} `UNAUTHENTICATED` without a session, `FORBIDDEN`
17
+ * / `SCOPE_MISSING` when the caller lacks the required org permission.
18
+ */
19
+ export class OrganizationsAPI {
20
+ constructor(management) {
21
+ this.management = management;
22
+ }
23
+ /**
24
+ * Fetch a single organization by numeric id. Requires authentication.
25
+ *
26
+ * @param orgId - Numeric org id (`BigInt` as a decimal string).
27
+ * @returns The {@link Organization}, or `null` if it does not exist.
28
+ */
29
+ async get(orgId) {
30
+ const data = await this.management.request(OrganizationDocument, {
31
+ id: orgId,
32
+ });
33
+ return data.organization;
34
+ }
35
+ /**
36
+ * Resolve an organization by its URL slug. **Public** — no session required.
37
+ *
38
+ * @param slug - The org's URL slug (e.g. `"acme"`).
39
+ * @returns The {@link Organization}, or `null` if no match.
40
+ */
41
+ async bySlug(slug) {
42
+ const data = await this.management.request(OrganizationBySlugDocument, {
43
+ slug,
44
+ });
45
+ return data.organizationBySlug;
46
+ }
47
+ /**
48
+ * List the organizations the authenticated caller is an active member of,
49
+ * with their per-org permissions and roles.
50
+ *
51
+ * @returns An array of {@link OrgMembership} (empty if the caller belongs to
52
+ * no orgs).
53
+ */
54
+ async mine() {
55
+ const data = await this.management.request(MyOrganizationsDocument, {});
56
+ return data.myOrganizations;
57
+ }
58
+ /**
59
+ * List members of an organization. Requires the `manage_members` org
60
+ * permission.
61
+ *
62
+ * @param orgId - Numeric org id.
63
+ * @returns The org's members with their roles.
64
+ */
65
+ async members(orgId) {
66
+ const data = await this.management.request(OrgMembersDocument, { orgId });
67
+ return data.orgMembers;
68
+ }
69
+ /**
70
+ * List the custom + system roles defined for an organization. Requires the
71
+ * `manage_members` org permission.
72
+ *
73
+ * @param orgId - Numeric org id.
74
+ * @returns The org's roles.
75
+ */
76
+ async roles(orgId) {
77
+ const data = await this.management.request(OrgRolesDocument, { orgId });
78
+ return data.orgRoles;
79
+ }
80
+ /**
81
+ * List the roles currently assigned to one organization member. Requires the
82
+ * `manage_members` org permission.
83
+ *
84
+ * @param orgMemberId - Numeric org-member id (`BigInt` as a decimal string).
85
+ * @returns The member's roles.
86
+ */
87
+ async memberRoles(orgMemberId) {
88
+ const data = await this.management.request(MemberRolesDocument, {
89
+ orgMemberId,
90
+ });
91
+ return data.memberRoles;
92
+ }
93
+ /**
94
+ * List every assignable org permission key with its description. **Public** —
95
+ * useful for building a role editor UI.
96
+ *
97
+ * @returns The catalog of org permissions.
98
+ */
99
+ async permissions() {
100
+ const data = await this.management.request(OrgPermissionsDocument, {});
101
+ return data.orgPermissions;
102
+ }
103
+ /**
104
+ * List the API tokens issued for an organization (metadata only; the secret
105
+ * is shown once at creation). Requires the `manage_tokens` org permission.
106
+ *
107
+ * @param orgId - Numeric org id.
108
+ * @returns The org's API tokens.
109
+ */
110
+ async tokens(orgId) {
111
+ const data = await this.management.request(OrgTokensDocument, { orgId });
112
+ return data.orgTokens;
113
+ }
114
+ /**
115
+ * Create a new organization owned by the authenticated caller. The caller
116
+ * becomes the owner with full permissions.
117
+ *
118
+ * @param input - {@link CreateOrganizationInput}: `name` and a unique `slug`.
119
+ * @returns The created {@link Organization}.
120
+ */
121
+ async create(input) {
122
+ const data = await this.management.request(CreateOrganizationDocument, {
123
+ input,
124
+ });
125
+ return data.createOrganization;
126
+ }
127
+ /**
128
+ * Set an organization's lifecycle status. **Super-admin only.**
129
+ *
130
+ * @param orgId - Numeric org id.
131
+ * @param status - The new status (e.g. `"active"`, `"suspended"`).
132
+ * @returns The updated {@link Organization}.
133
+ */
134
+ async setStatus(orgId, status) {
135
+ const data = await this.management.request(SetOrgStatusDocument, {
136
+ orgId,
137
+ status,
138
+ });
139
+ return data.setOrgStatus;
140
+ }
141
+ /**
142
+ * Mint a new org API token (for server-side studio backends). Requires the
143
+ * `manage_tokens` org permission. The plaintext secret is returned **once**.
144
+ *
145
+ * @param input - {@link CreateOrgTokenInput}: `orgId`, `name`, optional
146
+ * `permissions` and `expiresAt`.
147
+ * @returns The created token including its one-time plaintext secret.
148
+ */
149
+ async createToken(input) {
150
+ const data = await this.management.request(CreateOrgTokenDocument, {
151
+ input,
152
+ });
153
+ return data.createOrgToken;
154
+ }
155
+ /**
156
+ * Update an org token's metadata (name / permissions / expiry). Requires the
157
+ * `manage_tokens` org permission.
158
+ *
159
+ * @param orgTokenId - Numeric token id.
160
+ * @param input - {@link UpdateOrgTokenInput} fields to change.
161
+ * @returns The updated token metadata.
162
+ */
163
+ async updateToken(orgTokenId, input) {
164
+ const data = await this.management.request(UpdateOrgTokenDocument, {
165
+ orgTokenId,
166
+ input,
167
+ });
168
+ return data.updateOrgToken;
169
+ }
170
+ /**
171
+ * Revoke (disable) an org token. Requires the `manage_tokens` org permission.
172
+ *
173
+ * @param orgTokenId - Numeric token id.
174
+ * @returns `true` on success.
175
+ */
176
+ async revokeToken(orgTokenId) {
177
+ const data = await this.management.request(RevokeOrgTokenDocument, {
178
+ orgTokenId,
179
+ });
180
+ return data.revokeOrgToken;
181
+ }
182
+ /**
183
+ * Invite a user to an organization (by email or user id), optionally with
184
+ * initial roles. Requires the `manage_members` org permission.
185
+ *
186
+ * @param input - {@link InviteOrgMemberInput}.
187
+ * @returns The created membership.
188
+ */
189
+ async inviteMember(input) {
190
+ const data = await this.management.request(InviteOrgMemberDocument, {
191
+ input,
192
+ });
193
+ return data.inviteOrgMember;
194
+ }
195
+ /**
196
+ * Remove a member from an organization. Requires the `manage_members` org
197
+ * permission.
198
+ *
199
+ * @param orgId - Numeric org id.
200
+ * @param userId - Numeric id of the member to remove.
201
+ * @returns `true` on success.
202
+ */
203
+ async removeMember(orgId, userId) {
204
+ const data = await this.management.request(RemoveOrgMemberDocument, {
205
+ orgId,
206
+ userId,
207
+ });
208
+ return data.removeOrgMember;
209
+ }
210
+ /**
211
+ * Replace a member's role assignments. Requires the `manage_members` org
212
+ * permission.
213
+ *
214
+ * @param orgId - Numeric org id.
215
+ * @param userId - Numeric id of the member.
216
+ * @param roleIds - The full set of role ids the member should hold.
217
+ * @returns The updated membership.
218
+ */
219
+ async setMemberRoles(orgId, userId, roleIds) {
220
+ const data = await this.management.request(UpdateOrgMemberRolesDocument, {
221
+ orgId,
222
+ userId,
223
+ roleIds,
224
+ });
225
+ return data.updateOrgMemberRoles;
226
+ }
227
+ /**
228
+ * Create a custom org role with a set of permissions. Requires the
229
+ * `manage_members` org permission.
230
+ *
231
+ * @param input - {@link CreateOrgRoleInput}: `orgId`, `roleName`,
232
+ * `permissions`.
233
+ * @returns The created {@link OrgRole}.
234
+ */
235
+ async createRole(input) {
236
+ const data = await this.management.request(CreateOrgRoleDocument, {
237
+ input,
238
+ });
239
+ return data.createOrgRole;
240
+ }
241
+ /**
242
+ * Update a custom org role's name/permissions. Requires the `manage_members`
243
+ * org permission. System roles cannot be edited.
244
+ *
245
+ * @param orgRoleId - Numeric role id.
246
+ * @param input - {@link UpdateOrgRoleInput} fields to change.
247
+ * @returns The updated {@link OrgRole}.
248
+ */
249
+ async updateRole(orgRoleId, input) {
250
+ const data = await this.management.request(UpdateOrgRoleDocument, {
251
+ orgRoleId,
252
+ input,
253
+ });
254
+ return data.updateOrgRole;
255
+ }
256
+ /**
257
+ * Delete a custom org role. Requires the `manage_members` org permission.
258
+ * System roles cannot be deleted.
259
+ *
260
+ * @param orgRoleId - Numeric role id.
261
+ * @returns `true` on success.
262
+ */
263
+ async deleteRole(orgRoleId) {
264
+ const data = await this.management.request(DeleteOrgRoleDocument, {
265
+ orgRoleId,
266
+ });
267
+ return data.deleteOrgRole;
268
+ }
269
+ }
@@ -0,0 +1,104 @@
1
+ import type { GraphQLClient } from '../client.js';
2
+ import { type MyCheckoutsQuery, type MyCheckoutsConnectionQuery, type MyCheckoutsConnectionQueryVariables, type CheckoutsQuery, type CheckoutsConnectionQuery, type CheckoutsConnectionQueryVariables, type CreateCheckoutMutation, type CreateCheckoutInput, type CheckoutFilterInput, type CapturePaypalCheckoutMutation, type PaymentEventsQuery, type PaymentEventsQueryVariables, type PaymentEventsConnectionQuery, type PaymentEventsConnectionQueryVariables } from '../generated/graphql.js';
3
+ /**
4
+ * Payment checkouts (wallet top-ups, plan purchases) — exposed as
5
+ * `client.payments` (and grouped under `client.admin`).
6
+ *
7
+ * Targets the **management-api**. {@link create} and {@link mine} require an
8
+ * authenticated caller and act on their own checkouts; {@link all} is
9
+ * super-admin only. Amounts are minor currency units (`*Cents`).
10
+ *
11
+ * Note: {@link create} starts a real payment-provider checkout (Stripe /
12
+ * PayPal). In tests use sandbox provider keys only — never trigger real
13
+ * charges.
14
+ *
15
+ * @throws {CrowdyGraphQLError} `UNAUTHENTICATED` / `FORBIDDEN` per the notes
16
+ * above.
17
+ */
18
+ export declare class PaymentsAPI {
19
+ private readonly management;
20
+ constructor(management: GraphQLClient);
21
+ /**
22
+ * Start a checkout (e.g. an `ORG_WALLET_TOPUP`). Requires authentication.
23
+ *
24
+ * @param input - {@link CreateCheckoutInput}: purpose, amount, provider, and
25
+ * return URLs.
26
+ * @returns The created checkout including the provider redirect/approval URL.
27
+ */
28
+ create(input: CreateCheckoutInput): Promise<CreateCheckoutMutation['createCheckout']>;
29
+ /**
30
+ * List the authenticated caller's own checkouts (newest first).
31
+ *
32
+ * @param opts - Optional `limit` / `offset` (default limit 50).
33
+ * @returns The caller's checkouts.
34
+ */
35
+ mine(opts?: {
36
+ limit?: number;
37
+ offset?: number;
38
+ }): Promise<MyCheckoutsQuery['myCheckouts']>;
39
+ /**
40
+ * List checkouts across all users with an optional filter. **Super-admin
41
+ * only.**
42
+ *
43
+ * @param opts - Optional {@link CheckoutFilterInput} `filter` and `limit` /
44
+ * `offset`.
45
+ * @returns The matching checkouts.
46
+ */
47
+ all(opts?: {
48
+ filter?: CheckoutFilterInput;
49
+ limit?: number;
50
+ offset?: number;
51
+ }): Promise<CheckoutsQuery['checkouts']>;
52
+ /**
53
+ * Capture an approved PayPal order, finalizing the checkout it belongs to.
54
+ * Call this after the buyer approves the PayPal order returned by
55
+ * {@link create}. Requires authentication.
56
+ *
57
+ * Pass `idempotencyKey` to make retries safe: replaying with the same key
58
+ * returns the first result instead of re-capturing.
59
+ *
60
+ * @param orderId - The PayPal order id to capture.
61
+ * @param idempotencyKey - Optional key for safe retries.
62
+ * @returns The finalized {@link Checkout}.
63
+ */
64
+ capturePaypal(orderId: string, idempotencyKey?: string): Promise<CapturePaypalCheckoutMutation['capturePaypalCheckout']>;
65
+ /**
66
+ * Relay-style cursor pagination over the caller's own checkouts — the
67
+ * preferred alternative to {@link mine}. See
68
+ * https://docs.crowdedkingdoms.com/overview/pagination.
69
+ *
70
+ * @param args - Optional `first` and `after`.
71
+ * @returns A checkouts connection.
72
+ */
73
+ mineConnection(args?: MyCheckoutsConnectionQueryVariables): Promise<MyCheckoutsConnectionQuery['myCheckoutsConnection']>;
74
+ /**
75
+ * Relay-style cursor pagination over all checkouts (with optional filter) —
76
+ * the preferred alternative to {@link all}. **Super-admin only.**
77
+ *
78
+ * @param args - Optional `first`, `after`, and {@link CheckoutFilterInput}.
79
+ * @returns A checkouts connection.
80
+ */
81
+ allConnection(args?: CheckoutsConnectionQueryVariables): Promise<CheckoutsConnectionQuery['checkoutsConnection']>;
82
+ /**
83
+ * List provider webhook events (offset pagination). **Super-admin only** — an
84
+ * audit view of received Stripe/PayPal/SES events.
85
+ *
86
+ * @param opts - Optional `limit` / `offset`.
87
+ * @returns A page of {@link PaymentEventRecord}s.
88
+ * @remarks Prefer {@link eventsConnection} (Relay cursor pagination); the
89
+ * offset args here are deprecated server-side.
90
+ */
91
+ events(opts?: {
92
+ limit?: PaymentEventsQueryVariables['limit'];
93
+ offset?: PaymentEventsQueryVariables['offset'];
94
+ }): Promise<PaymentEventsQuery['paymentEvents']>;
95
+ /**
96
+ * Relay-style cursor pagination over provider webhook events. **Super-admin
97
+ * only.** See https://docs.crowdedkingdoms.com/overview/pagination.
98
+ *
99
+ * @param args - Optional `first` and `after`.
100
+ * @returns A payment-events connection.
101
+ */
102
+ eventsConnection(args?: PaymentEventsConnectionQueryVariables): Promise<PaymentEventsConnectionQuery['paymentEventsConnection']>;
103
+ }
104
+ //# sourceMappingURL=payments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../../src/domains/payments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EASL,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,mCAAmC,EACxC,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,iCAAiC,EACtC,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EAClC,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,qCAAqC,EAC3C,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,aAAa;IAEtD;;;;;;OAMG;IACG,MAAM,CACV,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IAOpD;;;;;OAKG;IACG,IAAI,CACR,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAC7C,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAQ3C;;;;;;;OAOG;IACG,GAAG,CACP,IAAI,GAAE;QACJ,MAAM,CAAC,EAAE,mBAAmB,CAAC;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACZ,GACL,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IASvC;;;;;;;;;;;OAWG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,6BAA6B,CAAC,uBAAuB,CAAC,CAAC;IAQlE;;;;;;;OAOG;IACG,cAAc,CAClB,IAAI,GAAE,mCAAwC,GAC7C,OAAO,CAAC,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;IAQ/D;;;;;;OAMG;IACG,aAAa,CACjB,IAAI,GAAE,iCAAsC,GAC3C,OAAO,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,CAAC;IAQ3D;;;;;;;;OAQG;IACG,MAAM,CACV,IAAI,GAAE;QACJ,KAAK,CAAC,EAAE,2BAA2B,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC;KAC3C,GACL,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAK/C;;;;;;OAMG;IACG,gBAAgB,CACpB,IAAI,GAAE,qCAA0C,GAC/C,OAAO,CAAC,4BAA4B,CAAC,yBAAyB,CAAC,CAAC;CAOpE"}