@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,223 @@
1
+ import { OrgEnvironmentsDocument, OrgEnvironmentDocument, EnvironmentVersionsDocument, EnvironmentForwardVersionsDocument, EnvironmentDatacentersDocument, EnvironmentFlavorsDocument, EnvironmentQuoteDocument, CreateEnvironmentDocument, DestroyEnvironmentDocument, PurgeEnvironmentDocument, ResumeEnvironmentDocument, UpdateEnvironmentScalingDocument, UpdateEnvironmentBillingTiersDocument, RedeployEnvironmentDocument, RestartEnvironmentServicesDocument, LinkAppToEnvironmentDocument, } from '../generated/graphql.js';
2
+ /**
3
+ * Dedicated customer environments — exposed as `client.environments` (and
4
+ * grouped under `client.admin`).
5
+ *
6
+ * Targets the **management-api**. Reads require the `view_environments` org
7
+ * permission ({@link quote} requires `view_billing`); the deploy/scale/destroy
8
+ * mutations require `manage_environments`. Lifecycle mutations are asynchronous:
9
+ * they return a {@link CksEnvironmentChangeOrder} you poll via {@link get} until
10
+ * its `status` is `succeeded`/`failed`. `BigInt` ids are decimal strings; `since`
11
+ * args are ISO-8601 `DateTime` strings.
12
+ *
13
+ * WARNING: {@link create}, {@link destroy}, {@link purge}, and
14
+ * {@link redeploy} provision or tear down real cloud resources (and reserve
15
+ * wallet funds). Drive them only against a sandbox org in tests.
16
+ *
17
+ * @throws {CrowdyGraphQLError} `UNAUTHENTICATED` / `FORBIDDEN` / `SCOPE_MISSING`
18
+ * per the permission notes above.
19
+ */
20
+ export class EnvironmentsAPI {
21
+ constructor(management) {
22
+ this.management = management;
23
+ }
24
+ /**
25
+ * List every environment owned by an org (any lifecycle state). Summary rows
26
+ * only — use {@link get} for full detail. Requires `view_environments`.
27
+ *
28
+ * @param orgId - Numeric org id.
29
+ * @returns The org's environments.
30
+ */
31
+ async list(orgId) {
32
+ const data = await this.management.request(OrgEnvironmentsDocument, {
33
+ orgId,
34
+ });
35
+ return data.orgEnvironments;
36
+ }
37
+ /**
38
+ * Full detail for one environment (components, change orders, outputs).
39
+ * Requires `view_environments`.
40
+ *
41
+ * @param orgId - Numeric org id.
42
+ * @param slug - Environment slug.
43
+ * @returns The {@link CksEnvironmentDetail}, or `null` if not found.
44
+ */
45
+ async get(orgId, slug) {
46
+ const data = await this.management.request(OrgEnvironmentDocument, {
47
+ orgId,
48
+ slug,
49
+ });
50
+ return data.orgEnvironment;
51
+ }
52
+ /**
53
+ * Catalog of deployable environment release versions (newest first). Any
54
+ * authenticated caller.
55
+ *
56
+ * @returns The available environment versions.
57
+ */
58
+ async versions() {
59
+ const data = await this.management.request(EnvironmentVersionsDocument, {});
60
+ return data.environmentVersions;
61
+ }
62
+ /**
63
+ * Versions a specific environment may upgrade to (forward-only). Requires
64
+ * `view_environments`.
65
+ *
66
+ * @param orgId - Numeric org id.
67
+ * @param slug - Environment slug.
68
+ * @returns The upgrade-target versions.
69
+ */
70
+ async forwardVersions(orgId, slug) {
71
+ const data = await this.management.request(EnvironmentForwardVersionsDocument, { orgId, slug });
72
+ return data.environmentForwardVersions;
73
+ }
74
+ /**
75
+ * OVH datacenters with at least one customer-selectable flavor. Requires an
76
+ * authenticated caller.
77
+ *
78
+ * @returns The selectable datacenters.
79
+ */
80
+ async datacenters() {
81
+ const data = await this.management.request(EnvironmentDatacentersDocument, {});
82
+ return data.environmentDatacenters;
83
+ }
84
+ /**
85
+ * Customer-selectable instance flavors (with pricing) in a datacenter.
86
+ *
87
+ * @param datacenter - Datacenter/region code from {@link datacenters}.
88
+ * @returns The available flavors.
89
+ */
90
+ async flavors(datacenter) {
91
+ const data = await this.management.request(EnvironmentFlavorsDocument, {
92
+ datacenter,
93
+ });
94
+ return data.environmentFlavors;
95
+ }
96
+ /**
97
+ * Price a proposed environment selection and check the wallet can cover it.
98
+ * Read-only (provisions nothing). Requires `view_billing`.
99
+ *
100
+ * @param input - {@link EnvironmentQuoteInput}: org, datacenter, flavors,
101
+ * server counts.
102
+ * @returns The {@link CksEnvironmentQuote} including the `canCreate` gate.
103
+ */
104
+ async quote(input) {
105
+ const data = await this.management.request(EnvironmentQuoteDocument, {
106
+ input,
107
+ });
108
+ return data.environmentQuote;
109
+ }
110
+ /**
111
+ * Provision a new dedicated environment. Requires `manage_environments`.
112
+ * Reserves wallet funds and starts cloud provisioning — poll {@link get}.
113
+ *
114
+ * @param input - {@link CreateEnvironmentInput}.
115
+ * @returns The new environment's detail with its initial change order.
116
+ */
117
+ async create(input) {
118
+ const data = await this.management.request(CreateEnvironmentDocument, {
119
+ input,
120
+ });
121
+ return data.createEnvironment;
122
+ }
123
+ /**
124
+ * Tear down an environment's runtime (keeps the record). Requires
125
+ * `manage_environments`.
126
+ *
127
+ * @param input - {@link DestroyEnvironmentInput}.
128
+ * @returns The destroy {@link CksEnvironmentChangeOrder}.
129
+ */
130
+ async destroy(input) {
131
+ const data = await this.management.request(DestroyEnvironmentDocument, {
132
+ input,
133
+ });
134
+ return data.destroyEnvironment;
135
+ }
136
+ /**
137
+ * Permanently purge a destroyed environment's record. Requires
138
+ * `manage_environments`. Irreversible.
139
+ *
140
+ * @param input - {@link PurgeEnvironmentInput}.
141
+ * @returns `true` on success.
142
+ */
143
+ async purge(input) {
144
+ const data = await this.management.request(PurgeEnvironmentDocument, {
145
+ input,
146
+ });
147
+ return data.purgeEnvironment;
148
+ }
149
+ /**
150
+ * Resume a suspended (non-payment) environment after funding the wallet.
151
+ * Requires `manage_environments`.
152
+ *
153
+ * @param input - {@link ResumeEnvironmentInput}.
154
+ * @returns The resume {@link CksEnvironmentChangeOrder}.
155
+ */
156
+ async resume(input) {
157
+ const data = await this.management.request(ResumeEnvironmentDocument, {
158
+ input,
159
+ });
160
+ return data.resumeEnvironment;
161
+ }
162
+ /**
163
+ * Change min/max server counts (autoscaling bounds). Requires
164
+ * `manage_environments`.
165
+ *
166
+ * @param input - {@link UpdateEnvironmentScalingInput}.
167
+ * @returns The scaling {@link CksEnvironmentChangeOrder}.
168
+ */
169
+ async updateScaling(input) {
170
+ const data = await this.management.request(UpdateEnvironmentScalingDocument, { input });
171
+ return data.updateEnvironmentScaling;
172
+ }
173
+ /**
174
+ * Set an environment's Buddy / GraphQL / Postgres capacity billing-tier
175
+ * levels (from {@link BillingAPI.buddyTiers} / {@link BillingAPI.graphqlTiers}
176
+ * / {@link BillingAPI.postgresTiers}). Requires `manage_environments`.
177
+ *
178
+ * @param input - {@link UpdateEnvironmentBillingTiersInput} (org, slug, and
179
+ * the per-resource tier levels to set).
180
+ * @returns The updated {@link CksEnvironment}.
181
+ */
182
+ async updateBillingTiers(input) {
183
+ const data = await this.management.request(UpdateEnvironmentBillingTiersDocument, { input });
184
+ return data.updateEnvironmentBillingTiers;
185
+ }
186
+ /**
187
+ * Deploy a (forward-only) environment release version. Requires
188
+ * `manage_environments`.
189
+ *
190
+ * @param input - {@link RedeployEnvironmentInput} (target version).
191
+ * @returns The deploy {@link CksEnvironmentChangeOrder}.
192
+ */
193
+ async redeploy(input) {
194
+ const data = await this.management.request(RedeployEnvironmentDocument, {
195
+ input,
196
+ });
197
+ return data.redeployEnvironment;
198
+ }
199
+ /**
200
+ * Restart an environment's services without redeploying. Requires
201
+ * `manage_environments`.
202
+ *
203
+ * @param input - {@link RestartEnvironmentServicesInput}.
204
+ * @returns The restart {@link CksEnvironmentChangeOrder}.
205
+ */
206
+ async restartServices(input) {
207
+ const data = await this.management.request(RestartEnvironmentServicesDocument, { input });
208
+ return data.restartEnvironmentServices;
209
+ }
210
+ /**
211
+ * Link an app to an environment so its runtime is served there. Requires
212
+ * `manage_environments`.
213
+ *
214
+ * @param input - {@link LinkAppToEnvironmentInput}.
215
+ * @returns The updated {@link App} (with its new routing fields).
216
+ */
217
+ async linkApp(input) {
218
+ const data = await this.management.request(LinkAppToEnvironmentDocument, {
219
+ input,
220
+ });
221
+ return data.linkAppToEnvironment;
222
+ }
223
+ }
@@ -0,0 +1,114 @@
1
+ import type { GraphQLClient } from '../client.js';
2
+ import { type GridUserPermissionsQuery, type NearbyGridPermissionsQuery, type GridPermissionLimitsQuery, type GridGroupGrantsQuery, type CreateGridMutation, type DeleteGridMutation, type GrantGridPermissionsMutation, type RevokeGridPermissionsMutation, type SetGridPermissionLimitsMutation, type AssignGroupToGridMutation, type RevokeGroupFromGridMutation, type NearbyGridPermissionsInput, type CreateGridInput, type DeleteGridInput, type GrantGridPermissionsInput, type RevokeGridPermissionsInput, type SetGridPermissionLimitsInput, type AssignGroupToGridInput, type RevokeGroupFromGridInput } from '../generated/graphql.js';
3
+ /**
4
+ * App grids + grid runtime-permission administration — exposed as
5
+ * `client.gameApps` (and grouped under `client.admin`).
6
+ *
7
+ * Targets the **game-api**. A grid is a named 3D box of chunks that runtime
8
+ * (voxel) permissions are scoped to. EVERY operation requires app-admin
9
+ * (`manage_apps` on the owning org). Mutations recompute the materialized
10
+ * effective ACL that Buddy enforces. `BigInt` ids are decimal strings.
11
+ *
12
+ * @throws {CrowdyGraphQLError} `UNAUTHENTICATED` / `FORBIDDEN` / `SCOPE_MISSING`
13
+ * when the caller lacks `manage_apps`.
14
+ */
15
+ export declare class GameAppsAPI {
16
+ private readonly graphql;
17
+ constructor(graphql: GraphQLClient);
18
+ /**
19
+ * Read a user's effective (materialized) runtime permission keys on a grid.
20
+ *
21
+ * @param appId - App that owns the grid.
22
+ * @param gridId - Grid to read permissions on.
23
+ * @param userId - User whose effective permissions to read.
24
+ * @returns The user's effective grid permissions.
25
+ */
26
+ userPermissions(appId: string, gridId: string, userId: string): Promise<GridUserPermissionsQuery['gridUserPermissions']>;
27
+ /**
28
+ * List grids overlapping a chunk-coordinate box with a user's effective keys
29
+ * on each.
30
+ *
31
+ * @param input - {@link NearbyGridPermissionsInput} (app, user, corners).
32
+ * @returns The overlapping grids with effective permissions.
33
+ */
34
+ nearbyPermissions(input: NearbyGridPermissionsInput): Promise<NearbyGridPermissionsQuery['nearbyGridPermissions']>;
35
+ /**
36
+ * Read the permission-key whitelist configured for a grid (empty = no limit).
37
+ *
38
+ * @param appId - App that owns the grid.
39
+ * @param gridId - Grid whose whitelist to read.
40
+ * @returns The grid's permission limits.
41
+ */
42
+ permissionLimits(appId: string, gridId: string): Promise<GridPermissionLimitsQuery['gridPermissionLimits']>;
43
+ /**
44
+ * List a group's grants on a grid (rows of the group-grants input table).
45
+ *
46
+ * @param appId - App that owns the grid.
47
+ * @param gridId - Grid to list group grants on.
48
+ * @param groupId - Group whose grants to list.
49
+ * @returns The group's grid grants.
50
+ */
51
+ groupGrants(appId: string, gridId: string, groupId: string): Promise<GridGroupGrantsQuery['gridGroupGrants']>;
52
+ /**
53
+ * Create a grid (a named box of chunks). Returns a hybrid response: on success
54
+ * `grid` is set and `error` is `NO_ERROR`; on failure `grid` is `null`.
55
+ *
56
+ * @param input - {@link CreateGridInput} (app + two opposite corners).
57
+ * @returns The create-grid result.
58
+ */
59
+ createGrid(input: CreateGridInput): Promise<CreateGridMutation['createGrid']>;
60
+ /**
61
+ * Delete a studio-created peer grid so its chunk box no longer blocks
62
+ * overlapping grid creation. Returns a hybrid response: on success `gridId`
63
+ * is set and `error` is `NO_ERROR`; on failure `gridId` is `null` and `error`
64
+ * is a UDP-style code (e.g. `GRID_NOT_FOUND`,
65
+ * `CANNOT_DELETE_DEFAULT_WORLD_GRID`, `GRID_HAS_NESTED_CHILDREN`). The
66
+ * open-by-default world grid and any grid that still contains nested child
67
+ * grids cannot be deleted.
68
+ *
69
+ * @param input - {@link DeleteGridInput} (the app + grid id to delete).
70
+ * @returns The delete-grid result.
71
+ */
72
+ deleteGrid(input: DeleteGridInput): Promise<DeleteGridMutation['deleteGrid']>;
73
+ /**
74
+ * Grant runtime permission keys directly to a user on a grid; recomputes the
75
+ * effective ACL.
76
+ *
77
+ * @param input - {@link GrantGridPermissionsInput}.
78
+ * @returns The user's effective grid permissions after the grant.
79
+ */
80
+ grantPermissions(input: GrantGridPermissionsInput): Promise<GrantGridPermissionsMutation['grantGridPermissions']>;
81
+ /**
82
+ * Revoke a user's direct grants on a grid (omit keys to revoke all);
83
+ * recomputes the effective ACL.
84
+ *
85
+ * @param input - {@link RevokeGridPermissionsInput}.
86
+ * @returns The user's remaining effective grid permissions.
87
+ */
88
+ revokePermissions(input: RevokeGridPermissionsInput): Promise<RevokeGridPermissionsMutation['revokeGridPermissions']>;
89
+ /**
90
+ * Replace a grid's permission-key whitelist (empty = no limit); recomputes the
91
+ * effective ACL.
92
+ *
93
+ * @param input - {@link SetGridPermissionLimitsInput}.
94
+ * @returns The grid's updated permission limits.
95
+ */
96
+ setPermissionLimits(input: SetGridPermissionLimitsInput): Promise<SetGridPermissionLimitsMutation['setGridPermissionLimits']>;
97
+ /**
98
+ * Grant permission keys to a group (optionally a single role) on a grid;
99
+ * recomputes the effective ACL.
100
+ *
101
+ * @param input - {@link AssignGroupToGridInput}.
102
+ * @returns The group's grid grants after the assignment.
103
+ */
104
+ assignGroup(input: AssignGroupToGridInput): Promise<AssignGroupToGridMutation['assignGroupToGrid']>;
105
+ /**
106
+ * Revoke a group/role's grants on a grid (omit keys to revoke all); recomputes
107
+ * the effective ACL.
108
+ *
109
+ * @param input - {@link RevokeGroupFromGridInput}.
110
+ * @returns The group's remaining grid grants.
111
+ */
112
+ revokeGroup(input: RevokeGroupFromGridInput): Promise<RevokeGroupFromGridMutation['revokeGroupFromGrid']>;
113
+ }
114
+ //# sourceMappingURL=gameApps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gameApps.d.ts","sourceRoot":"","sources":["../../src/domains/gameApps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAYL,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAClC,KAAK,+BAA+B,EACpC,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC9B,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;;;;GAWG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,aAAa;IAEnD;;;;;;;OAOG;IACG,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,CAAC;IAS3D;;;;;;OAMG;IACG,iBAAiB,CACrB,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;IAO/D;;;;;;OAMG;IACG,gBAAgB,CACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IAQ7D;;;;;;;OAOG;IACG,WAAW,CACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IASnD;;;;;;OAMG;IACG,UAAU,CACd,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAK5C;;;;;;;;;;;OAWG;IACG,UAAU,CACd,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAK5C;;;;;;OAMG;IACG,gBAAgB,CACpB,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,4BAA4B,CAAC,sBAAsB,CAAC,CAAC;IAOhE;;;;;;OAMG;IACG,iBAAiB,CACrB,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,6BAA6B,CAAC,uBAAuB,CAAC,CAAC;IAOlE;;;;;;OAMG;IACG,mBAAmB,CACvB,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,+BAA+B,CAAC,yBAAyB,CAAC,CAAC;IAOtE;;;;;;OAMG;IACG,WAAW,CACf,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,CAAC;IAO1D;;;;;;OAMG;IACG,WAAW,CACf,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,2BAA2B,CAAC,qBAAqB,CAAC,CAAC;CAM/D"}
@@ -0,0 +1,169 @@
1
+ import { GridUserPermissionsDocument, NearbyGridPermissionsDocument, GridPermissionLimitsDocument, GridGroupGrantsDocument, CreateGridDocument, DeleteGridDocument, GrantGridPermissionsDocument, RevokeGridPermissionsDocument, SetGridPermissionLimitsDocument, AssignGroupToGridDocument, RevokeGroupFromGridDocument, } from '../generated/graphql.js';
2
+ /**
3
+ * App grids + grid runtime-permission administration — exposed as
4
+ * `client.gameApps` (and grouped under `client.admin`).
5
+ *
6
+ * Targets the **game-api**. A grid is a named 3D box of chunks that runtime
7
+ * (voxel) permissions are scoped to. EVERY operation requires app-admin
8
+ * (`manage_apps` on the owning org). Mutations recompute the materialized
9
+ * effective ACL that Buddy enforces. `BigInt` ids are decimal strings.
10
+ *
11
+ * @throws {CrowdyGraphQLError} `UNAUTHENTICATED` / `FORBIDDEN` / `SCOPE_MISSING`
12
+ * when the caller lacks `manage_apps`.
13
+ */
14
+ export class GameAppsAPI {
15
+ constructor(graphql) {
16
+ this.graphql = graphql;
17
+ }
18
+ /**
19
+ * Read a user's effective (materialized) runtime permission keys on a grid.
20
+ *
21
+ * @param appId - App that owns the grid.
22
+ * @param gridId - Grid to read permissions on.
23
+ * @param userId - User whose effective permissions to read.
24
+ * @returns The user's effective grid permissions.
25
+ */
26
+ async userPermissions(appId, gridId, userId) {
27
+ const data = await this.graphql.request(GridUserPermissionsDocument, {
28
+ appId,
29
+ gridId,
30
+ userId,
31
+ });
32
+ return data.gridUserPermissions;
33
+ }
34
+ /**
35
+ * List grids overlapping a chunk-coordinate box with a user's effective keys
36
+ * on each.
37
+ *
38
+ * @param input - {@link NearbyGridPermissionsInput} (app, user, corners).
39
+ * @returns The overlapping grids with effective permissions.
40
+ */
41
+ async nearbyPermissions(input) {
42
+ const data = await this.graphql.request(NearbyGridPermissionsDocument, {
43
+ input,
44
+ });
45
+ return data.nearbyGridPermissions;
46
+ }
47
+ /**
48
+ * Read the permission-key whitelist configured for a grid (empty = no limit).
49
+ *
50
+ * @param appId - App that owns the grid.
51
+ * @param gridId - Grid whose whitelist to read.
52
+ * @returns The grid's permission limits.
53
+ */
54
+ async permissionLimits(appId, gridId) {
55
+ const data = await this.graphql.request(GridPermissionLimitsDocument, {
56
+ appId,
57
+ gridId,
58
+ });
59
+ return data.gridPermissionLimits;
60
+ }
61
+ /**
62
+ * List a group's grants on a grid (rows of the group-grants input table).
63
+ *
64
+ * @param appId - App that owns the grid.
65
+ * @param gridId - Grid to list group grants on.
66
+ * @param groupId - Group whose grants to list.
67
+ * @returns The group's grid grants.
68
+ */
69
+ async groupGrants(appId, gridId, groupId) {
70
+ const data = await this.graphql.request(GridGroupGrantsDocument, {
71
+ appId,
72
+ gridId,
73
+ groupId,
74
+ });
75
+ return data.gridGroupGrants;
76
+ }
77
+ /**
78
+ * Create a grid (a named box of chunks). Returns a hybrid response: on success
79
+ * `grid` is set and `error` is `NO_ERROR`; on failure `grid` is `null`.
80
+ *
81
+ * @param input - {@link CreateGridInput} (app + two opposite corners).
82
+ * @returns The create-grid result.
83
+ */
84
+ async createGrid(input) {
85
+ const data = await this.graphql.request(CreateGridDocument, { input });
86
+ return data.createGrid;
87
+ }
88
+ /**
89
+ * Delete a studio-created peer grid so its chunk box no longer blocks
90
+ * overlapping grid creation. Returns a hybrid response: on success `gridId`
91
+ * is set and `error` is `NO_ERROR`; on failure `gridId` is `null` and `error`
92
+ * is a UDP-style code (e.g. `GRID_NOT_FOUND`,
93
+ * `CANNOT_DELETE_DEFAULT_WORLD_GRID`, `GRID_HAS_NESTED_CHILDREN`). The
94
+ * open-by-default world grid and any grid that still contains nested child
95
+ * grids cannot be deleted.
96
+ *
97
+ * @param input - {@link DeleteGridInput} (the app + grid id to delete).
98
+ * @returns The delete-grid result.
99
+ */
100
+ async deleteGrid(input) {
101
+ const data = await this.graphql.request(DeleteGridDocument, { input });
102
+ return data.deleteGrid;
103
+ }
104
+ /**
105
+ * Grant runtime permission keys directly to a user on a grid; recomputes the
106
+ * effective ACL.
107
+ *
108
+ * @param input - {@link GrantGridPermissionsInput}.
109
+ * @returns The user's effective grid permissions after the grant.
110
+ */
111
+ async grantPermissions(input) {
112
+ const data = await this.graphql.request(GrantGridPermissionsDocument, {
113
+ input,
114
+ });
115
+ return data.grantGridPermissions;
116
+ }
117
+ /**
118
+ * Revoke a user's direct grants on a grid (omit keys to revoke all);
119
+ * recomputes the effective ACL.
120
+ *
121
+ * @param input - {@link RevokeGridPermissionsInput}.
122
+ * @returns The user's remaining effective grid permissions.
123
+ */
124
+ async revokePermissions(input) {
125
+ const data = await this.graphql.request(RevokeGridPermissionsDocument, {
126
+ input,
127
+ });
128
+ return data.revokeGridPermissions;
129
+ }
130
+ /**
131
+ * Replace a grid's permission-key whitelist (empty = no limit); recomputes the
132
+ * effective ACL.
133
+ *
134
+ * @param input - {@link SetGridPermissionLimitsInput}.
135
+ * @returns The grid's updated permission limits.
136
+ */
137
+ async setPermissionLimits(input) {
138
+ const data = await this.graphql.request(SetGridPermissionLimitsDocument, {
139
+ input,
140
+ });
141
+ return data.setGridPermissionLimits;
142
+ }
143
+ /**
144
+ * Grant permission keys to a group (optionally a single role) on a grid;
145
+ * recomputes the effective ACL.
146
+ *
147
+ * @param input - {@link AssignGroupToGridInput}.
148
+ * @returns The group's grid grants after the assignment.
149
+ */
150
+ async assignGroup(input) {
151
+ const data = await this.graphql.request(AssignGroupToGridDocument, {
152
+ input,
153
+ });
154
+ return data.assignGroupToGrid;
155
+ }
156
+ /**
157
+ * Revoke a group/role's grants on a grid (omit keys to revoke all); recomputes
158
+ * the effective ACL.
159
+ *
160
+ * @param input - {@link RevokeGroupFromGridInput}.
161
+ * @returns The group's remaining grid grants.
162
+ */
163
+ async revokeGroup(input) {
164
+ const data = await this.graphql.request(RevokeGroupFromGridDocument, {
165
+ input,
166
+ });
167
+ return data.revokeGroupFromGrid;
168
+ }
169
+ }