@unkey/api 2.0.3 → 2.0.4

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 (163) hide show
  1. package/README.md +4 -2
  2. package/bin/mcp-server.js +348 -141
  3. package/bin/mcp-server.js.map +21 -16
  4. package/dist/commonjs/funcs/keysRerollKey.d.ts +49 -0
  5. package/dist/commonjs/funcs/keysRerollKey.d.ts.map +1 -0
  6. package/dist/commonjs/funcs/keysRerollKey.js +159 -0
  7. package/dist/commonjs/funcs/keysRerollKey.js.map +1 -0
  8. package/dist/commonjs/funcs/permissionsListPermissions.d.ts +2 -1
  9. package/dist/commonjs/funcs/permissionsListPermissions.d.ts.map +1 -1
  10. package/dist/commonjs/funcs/permissionsListPermissions.js +2 -1
  11. package/dist/commonjs/funcs/permissionsListPermissions.js.map +1 -1
  12. package/dist/commonjs/funcs/permissionsListRoles.d.ts +2 -1
  13. package/dist/commonjs/funcs/permissionsListRoles.d.ts.map +1 -1
  14. package/dist/commonjs/funcs/permissionsListRoles.js +2 -1
  15. package/dist/commonjs/funcs/permissionsListRoles.js.map +1 -1
  16. package/dist/commonjs/lib/config.d.ts +3 -3
  17. package/dist/commonjs/lib/config.js +3 -3
  18. package/dist/commonjs/mcp-server/mcp-server.js +1 -1
  19. package/dist/commonjs/mcp-server/server.d.ts.map +1 -1
  20. package/dist/commonjs/mcp-server/server.js +3 -1
  21. package/dist/commonjs/mcp-server/server.js.map +1 -1
  22. package/dist/commonjs/mcp-server/tools/keysRerollKey.d.ts +8 -0
  23. package/dist/commonjs/mcp-server/tools/keysRerollKey.d.ts.map +1 -0
  24. package/dist/commonjs/mcp-server/tools/keysRerollKey.js +96 -0
  25. package/dist/commonjs/mcp-server/tools/keysRerollKey.js.map +1 -0
  26. package/dist/commonjs/mcp-server/tools/permissionsListPermissions.d.ts.map +1 -1
  27. package/dist/commonjs/mcp-server/tools/permissionsListPermissions.js +2 -1
  28. package/dist/commonjs/mcp-server/tools/permissionsListPermissions.js.map +1 -1
  29. package/dist/commonjs/mcp-server/tools/permissionsListRoles.d.ts.map +1 -1
  30. package/dist/commonjs/mcp-server/tools/permissionsListRoles.js +2 -1
  31. package/dist/commonjs/mcp-server/tools/permissionsListRoles.js.map +1 -1
  32. package/dist/commonjs/models/components/index.d.ts +3 -0
  33. package/dist/commonjs/models/components/index.d.ts.map +1 -1
  34. package/dist/commonjs/models/components/index.js +3 -0
  35. package/dist/commonjs/models/components/index.js.map +1 -1
  36. package/dist/commonjs/models/components/v2keysaddpermissionsresponsebody.d.ts +0 -1
  37. package/dist/commonjs/models/components/v2keysaddpermissionsresponsebody.d.ts.map +1 -1
  38. package/dist/commonjs/models/components/v2keysaddpermissionsresponsebody.js.map +1 -1
  39. package/dist/commonjs/models/components/v2keysaddrolesresponsebody.d.ts +0 -1
  40. package/dist/commonjs/models/components/v2keysaddrolesresponsebody.d.ts.map +1 -1
  41. package/dist/commonjs/models/components/v2keysaddrolesresponsebody.js.map +1 -1
  42. package/dist/commonjs/models/components/v2keysremoverolesresponsebody.d.ts +0 -1
  43. package/dist/commonjs/models/components/v2keysremoverolesresponsebody.d.ts.map +1 -1
  44. package/dist/commonjs/models/components/v2keysremoverolesresponsebody.js.map +1 -1
  45. package/dist/commonjs/models/components/v2keysrerollkeyrequestbody.d.ts +60 -0
  46. package/dist/commonjs/models/components/v2keysrerollkeyrequestbody.d.ts.map +1 -0
  47. package/dist/commonjs/models/components/v2keysrerollkeyrequestbody.js +71 -0
  48. package/dist/commonjs/models/components/v2keysrerollkeyrequestbody.js.map +1 -0
  49. package/dist/commonjs/models/components/v2keysrerollkeyresponsebody.d.ts +36 -0
  50. package/dist/commonjs/models/components/v2keysrerollkeyresponsebody.d.ts.map +1 -0
  51. package/dist/commonjs/models/components/v2keysrerollkeyresponsebody.js +73 -0
  52. package/dist/commonjs/models/components/v2keysrerollkeyresponsebody.js.map +1 -0
  53. package/dist/commonjs/models/components/v2keysrerollkeyresponsedata.d.ts +62 -0
  54. package/dist/commonjs/models/components/v2keysrerollkeyresponsedata.d.ts.map +1 -0
  55. package/dist/commonjs/models/components/v2keysrerollkeyresponsedata.js +71 -0
  56. package/dist/commonjs/models/components/v2keysrerollkeyresponsedata.js.map +1 -0
  57. package/dist/commonjs/models/components/v2keyssetpermissionsresponsebody.d.ts +0 -1
  58. package/dist/commonjs/models/components/v2keyssetpermissionsresponsebody.d.ts.map +1 -1
  59. package/dist/commonjs/models/components/v2keyssetpermissionsresponsebody.js.map +1 -1
  60. package/dist/commonjs/models/components/v2keyssetrolesresponsebody.d.ts +0 -1
  61. package/dist/commonjs/models/components/v2keyssetrolesresponsebody.d.ts.map +1 -1
  62. package/dist/commonjs/models/components/v2keyssetrolesresponsebody.js.map +1 -1
  63. package/dist/commonjs/sdk/keys.d.ts +38 -0
  64. package/dist/commonjs/sdk/keys.d.ts.map +1 -1
  65. package/dist/commonjs/sdk/keys.js +41 -0
  66. package/dist/commonjs/sdk/keys.js.map +1 -1
  67. package/dist/commonjs/sdk/permissions.d.ts +4 -2
  68. package/dist/commonjs/sdk/permissions.d.ts.map +1 -1
  69. package/dist/commonjs/sdk/permissions.js +4 -2
  70. package/dist/commonjs/sdk/permissions.js.map +1 -1
  71. package/dist/esm/funcs/keysRerollKey.d.ts +49 -0
  72. package/dist/esm/funcs/keysRerollKey.d.ts.map +1 -0
  73. package/dist/esm/funcs/keysRerollKey.js +123 -0
  74. package/dist/esm/funcs/keysRerollKey.js.map +1 -0
  75. package/dist/esm/funcs/permissionsListPermissions.d.ts +2 -1
  76. package/dist/esm/funcs/permissionsListPermissions.d.ts.map +1 -1
  77. package/dist/esm/funcs/permissionsListPermissions.js +2 -1
  78. package/dist/esm/funcs/permissionsListPermissions.js.map +1 -1
  79. package/dist/esm/funcs/permissionsListRoles.d.ts +2 -1
  80. package/dist/esm/funcs/permissionsListRoles.d.ts.map +1 -1
  81. package/dist/esm/funcs/permissionsListRoles.js +2 -1
  82. package/dist/esm/funcs/permissionsListRoles.js.map +1 -1
  83. package/dist/esm/lib/config.d.ts +3 -3
  84. package/dist/esm/lib/config.js +3 -3
  85. package/dist/esm/mcp-server/mcp-server.js +1 -1
  86. package/dist/esm/mcp-server/server.d.ts.map +1 -1
  87. package/dist/esm/mcp-server/server.js +3 -1
  88. package/dist/esm/mcp-server/server.js.map +1 -1
  89. package/dist/esm/mcp-server/tools/keysRerollKey.d.ts +8 -0
  90. package/dist/esm/mcp-server/tools/keysRerollKey.d.ts.map +1 -0
  91. package/dist/esm/mcp-server/tools/keysRerollKey.js +60 -0
  92. package/dist/esm/mcp-server/tools/keysRerollKey.js.map +1 -0
  93. package/dist/esm/mcp-server/tools/permissionsListPermissions.d.ts.map +1 -1
  94. package/dist/esm/mcp-server/tools/permissionsListPermissions.js +2 -1
  95. package/dist/esm/mcp-server/tools/permissionsListPermissions.js.map +1 -1
  96. package/dist/esm/mcp-server/tools/permissionsListRoles.d.ts.map +1 -1
  97. package/dist/esm/mcp-server/tools/permissionsListRoles.js +2 -1
  98. package/dist/esm/mcp-server/tools/permissionsListRoles.js.map +1 -1
  99. package/dist/esm/models/components/index.d.ts +3 -0
  100. package/dist/esm/models/components/index.d.ts.map +1 -1
  101. package/dist/esm/models/components/index.js +3 -0
  102. package/dist/esm/models/components/index.js.map +1 -1
  103. package/dist/esm/models/components/v2keysaddpermissionsresponsebody.d.ts +0 -1
  104. package/dist/esm/models/components/v2keysaddpermissionsresponsebody.d.ts.map +1 -1
  105. package/dist/esm/models/components/v2keysaddpermissionsresponsebody.js.map +1 -1
  106. package/dist/esm/models/components/v2keysaddrolesresponsebody.d.ts +0 -1
  107. package/dist/esm/models/components/v2keysaddrolesresponsebody.d.ts.map +1 -1
  108. package/dist/esm/models/components/v2keysaddrolesresponsebody.js.map +1 -1
  109. package/dist/esm/models/components/v2keysremoverolesresponsebody.d.ts +0 -1
  110. package/dist/esm/models/components/v2keysremoverolesresponsebody.d.ts.map +1 -1
  111. package/dist/esm/models/components/v2keysremoverolesresponsebody.js.map +1 -1
  112. package/dist/esm/models/components/v2keysrerollkeyrequestbody.d.ts +60 -0
  113. package/dist/esm/models/components/v2keysrerollkeyrequestbody.d.ts.map +1 -0
  114. package/dist/esm/models/components/v2keysrerollkeyrequestbody.js +33 -0
  115. package/dist/esm/models/components/v2keysrerollkeyrequestbody.js.map +1 -0
  116. package/dist/esm/models/components/v2keysrerollkeyresponsebody.d.ts +36 -0
  117. package/dist/esm/models/components/v2keysrerollkeyresponsebody.d.ts.map +1 -0
  118. package/dist/esm/models/components/v2keysrerollkeyresponsebody.js +35 -0
  119. package/dist/esm/models/components/v2keysrerollkeyresponsebody.js.map +1 -0
  120. package/dist/esm/models/components/v2keysrerollkeyresponsedata.d.ts +62 -0
  121. package/dist/esm/models/components/v2keysrerollkeyresponsedata.d.ts.map +1 -0
  122. package/dist/esm/models/components/v2keysrerollkeyresponsedata.js +33 -0
  123. package/dist/esm/models/components/v2keysrerollkeyresponsedata.js.map +1 -0
  124. package/dist/esm/models/components/v2keyssetpermissionsresponsebody.d.ts +0 -1
  125. package/dist/esm/models/components/v2keyssetpermissionsresponsebody.d.ts.map +1 -1
  126. package/dist/esm/models/components/v2keyssetpermissionsresponsebody.js.map +1 -1
  127. package/dist/esm/models/components/v2keyssetrolesresponsebody.d.ts +0 -1
  128. package/dist/esm/models/components/v2keyssetrolesresponsebody.d.ts.map +1 -1
  129. package/dist/esm/models/components/v2keyssetrolesresponsebody.js.map +1 -1
  130. package/dist/esm/sdk/keys.d.ts +38 -0
  131. package/dist/esm/sdk/keys.d.ts.map +1 -1
  132. package/dist/esm/sdk/keys.js +41 -0
  133. package/dist/esm/sdk/keys.js.map +1 -1
  134. package/dist/esm/sdk/permissions.d.ts +4 -2
  135. package/dist/esm/sdk/permissions.d.ts.map +1 -1
  136. package/dist/esm/sdk/permissions.js +4 -2
  137. package/dist/esm/sdk/permissions.js.map +1 -1
  138. package/docs/sdks/keys/README.md +113 -0
  139. package/docs/sdks/permissions/README.md +4 -2
  140. package/examples/apisCreateApi.example.ts +1 -1
  141. package/examples/package-lock.json +3 -3
  142. package/jsr.json +1 -1
  143. package/package.json +3 -3
  144. package/src/funcs/keysRerollKey.ts +227 -0
  145. package/src/funcs/permissionsListPermissions.ts +2 -1
  146. package/src/funcs/permissionsListRoles.ts +2 -1
  147. package/src/lib/config.ts +3 -3
  148. package/src/mcp-server/mcp-server.ts +1 -1
  149. package/src/mcp-server/server.ts +3 -1
  150. package/src/mcp-server/tools/keysRerollKey.ts +69 -0
  151. package/src/mcp-server/tools/permissionsListPermissions.ts +2 -1
  152. package/src/mcp-server/tools/permissionsListRoles.ts +2 -1
  153. package/src/models/components/index.ts +3 -0
  154. package/src/models/components/v2keysaddpermissionsresponsebody.ts +0 -1
  155. package/src/models/components/v2keysaddrolesresponsebody.ts +0 -1
  156. package/src/models/components/v2keysremoverolesresponsebody.ts +0 -1
  157. package/src/models/components/v2keysrerollkeyrequestbody.ts +99 -0
  158. package/src/models/components/v2keysrerollkeyresponsebody.ts +87 -0
  159. package/src/models/components/v2keysrerollkeyresponsedata.ts +103 -0
  160. package/src/models/components/v2keyssetpermissionsresponsebody.ts +0 -1
  161. package/src/models/components/v2keyssetrolesresponsebody.ts +0 -1
  162. package/src/sdk/keys.ts +49 -0
  163. package/src/sdk/permissions.ts +4 -2
@@ -0,0 +1,69 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { keysRerollKey } from "../../funcs/keysRerollKey.js";
6
+ import * as components from "../../models/components/index.js";
7
+ import { formatResult, ToolDefinition } from "../tools.js";
8
+
9
+ const args = {
10
+ request: components.V2KeysRerollKeyRequestBody$inboundSchema,
11
+ };
12
+
13
+ export const tool$keysRerollKey: ToolDefinition<typeof args> = {
14
+ name: "keys-reroll-key",
15
+ description: `Reroll Key
16
+
17
+ Generate a new API key while preserving the configuration from an existing key.
18
+
19
+ This operation creates a fresh key with a new token while maintaining all settings from the original key:
20
+ - Permissions and roles
21
+ - Custom metadata
22
+ - Rate limit configurations
23
+ - Identity associations
24
+ - Remaining credits
25
+ - Recovery settings
26
+
27
+ **Key Generation:**
28
+ - The system attempts to extract the prefix from the original key
29
+ - If prefix extraction fails, the default API prefix is used
30
+ - Key length follows the API's default byte configuration (or 16 bytes if not specified)
31
+
32
+ **Original Key Handling:**
33
+ - The original key will be revoked after the duration specified in \`expiration\`
34
+ - Set \`expiration\` to 0 to revoke immediately
35
+ - This allows for graceful key rotation with an overlap period
36
+
37
+ Common use cases include:
38
+ - Rotating keys for security compliance
39
+ - Issuing replacement keys for compromised credentials
40
+ - Creating backup keys with identical permissions
41
+
42
+ **Important:** Analytics and usage metrics are tracked at both the key level AND identity level. If the original key has an identity, the new key will inherit it, allowing you to track usage across both individual keys and the overall identity.
43
+
44
+ **Required Permissions**
45
+
46
+ Your root key must have:
47
+ - \`api.*.create_key\` or \`api.<api_id>.create_key\`
48
+ - \`api.*.encrypt_key\` or \`api.<api_id>.encrypt_key\` (only when the original key is recoverable)
49
+ `,
50
+ args,
51
+ tool: async (client, args, ctx) => {
52
+ const [result, apiCall] = await keysRerollKey(
53
+ client,
54
+ args.request,
55
+ { fetchOptions: { signal: ctx.signal } },
56
+ ).$inspect();
57
+
58
+ if (!result.ok) {
59
+ return {
60
+ content: [{ type: "text", text: result.error.message }],
61
+ isError: true,
62
+ };
63
+ }
64
+
65
+ const value = result.value;
66
+
67
+ return formatResult(value, apiCall);
68
+ },
69
+ };
@@ -14,7 +14,8 @@ export const tool$permissionsListPermissions: ToolDefinition<typeof args> = {
14
14
  name: "permissions-list-permissions",
15
15
  description: `List permissions
16
16
 
17
- Retrieve all permissions in your workspace. Results are paginated and sorted alphabetically by permission name.
17
+ Retrieve all permissions in your workspace.
18
+ Results are paginated and sorted by their id.
18
19
 
19
20
  **Required Permissions**
20
21
 
@@ -14,7 +14,8 @@ export const tool$permissionsListRoles: ToolDefinition<typeof args> = {
14
14
  name: "permissions-list-roles",
15
15
  description: `List roles
16
16
 
17
- Retrieve all roles in your workspace including their assigned permissions. Results are paginated and sorted alphabetically by role name.
17
+ Retrieve all roles in your workspace including their assigned permissions.
18
+ Results are paginated and sorted by their id.
18
19
 
19
20
  **Required Permissions**
20
21
 
@@ -55,6 +55,9 @@ export * from "./v2keysremovepermissionsrequestbody.js";
55
55
  export * from "./v2keysremovepermissionsresponsebody.js";
56
56
  export * from "./v2keysremoverolesrequestbody.js";
57
57
  export * from "./v2keysremoverolesresponsebody.js";
58
+ export * from "./v2keysrerollkeyrequestbody.js";
59
+ export * from "./v2keysrerollkeyresponsebody.js";
60
+ export * from "./v2keysrerollkeyresponsedata.js";
58
61
  export * from "./v2keyssetpermissionsrequestbody.js";
59
62
  export * from "./v2keyssetpermissionsresponsebody.js";
60
63
  export * from "./v2keyssetrolesrequestbody.js";
@@ -31,7 +31,6 @@ export type V2KeysAddPermissionsResponseBody = {
31
31
  *
32
32
  * This response includes:
33
33
  * - All direct permissions assigned to the key (both pre-existing and newly added)
34
- * - Permissions sorted alphabetically by name for consistent response format
35
34
  * - Both the permission ID and name for each permission
36
35
  *
37
36
  * Important notes:
@@ -32,7 +32,6 @@ export type V2KeysAddRolesResponseBody = {
32
32
  * The response includes:
33
33
  * - All roles now assigned to the key (both pre-existing and newly added)
34
34
  * - Both ID and name of each role for easy reference
35
- * - Roles sorted alphabetically by name for consistent response format
36
35
  *
37
36
  * Important notes:
38
37
  * - The response shows the complete current state after the addition
@@ -32,7 +32,6 @@ export type V2KeysRemoveRolesResponseBody = {
32
32
  * The response includes:
33
33
  * - The remaining roles still assigned to the key (after removing the specified roles)
34
34
  * - Both ID and name for each role for easy reference
35
- * - Roles sorted alphabetically by name for consistent response format
36
35
  *
37
36
  * Important notes:
38
37
  * - The response reflects the current state after the removal operation
@@ -0,0 +1,99 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import * as z from "zod";
6
+ import { safeParse } from "../../lib/schemas.js";
7
+ import { Result as SafeParseResult } from "../../types/fp.js";
8
+ import { SDKValidationError } from "../errors/sdkvalidationerror.js";
9
+
10
+ export type V2KeysRerollKeyRequestBody = {
11
+ /**
12
+ * The database identifier of the key to reroll.
13
+ *
14
+ * @remarks
15
+ *
16
+ * This is the unique ID returned when creating or listing keys, NOT the actual API key token.
17
+ * You can find this ID in:
18
+ * - The response from `keys.createKey`
19
+ * - Key verification responses
20
+ * - The Unkey dashboard
21
+ * - API key listing endpoints
22
+ */
23
+ keyId: string;
24
+ /**
25
+ * Duration in milliseconds until the ORIGINAL key is revoked, starting from now.
26
+ *
27
+ * @remarks
28
+ *
29
+ * This parameter controls the overlap period for key rotation:
30
+ * - Set to `0` to revoke the original key immediately
31
+ * - Positive values keep the original key active for the specified duration
32
+ * - Allows graceful migration by giving users time to update their credentials
33
+ *
34
+ * Common overlap periods:
35
+ * - Immediate revocation: 0
36
+ * - 1 hour grace period: 3600000
37
+ * - 24 hours grace period: 86400000
38
+ * - 7 days grace period: 604800000
39
+ * - 30 days grace period: 2592000000
40
+ */
41
+ expiration: number;
42
+ };
43
+
44
+ /** @internal */
45
+ export const V2KeysRerollKeyRequestBody$inboundSchema: z.ZodType<
46
+ V2KeysRerollKeyRequestBody,
47
+ z.ZodTypeDef,
48
+ unknown
49
+ > = z.object({
50
+ keyId: z.string(),
51
+ expiration: z.number().int(),
52
+ });
53
+
54
+ /** @internal */
55
+ export type V2KeysRerollKeyRequestBody$Outbound = {
56
+ keyId: string;
57
+ expiration: number;
58
+ };
59
+
60
+ /** @internal */
61
+ export const V2KeysRerollKeyRequestBody$outboundSchema: z.ZodType<
62
+ V2KeysRerollKeyRequestBody$Outbound,
63
+ z.ZodTypeDef,
64
+ V2KeysRerollKeyRequestBody
65
+ > = z.object({
66
+ keyId: z.string(),
67
+ expiration: z.number().int(),
68
+ });
69
+
70
+ /**
71
+ * @internal
72
+ * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module.
73
+ */
74
+ export namespace V2KeysRerollKeyRequestBody$ {
75
+ /** @deprecated use `V2KeysRerollKeyRequestBody$inboundSchema` instead. */
76
+ export const inboundSchema = V2KeysRerollKeyRequestBody$inboundSchema;
77
+ /** @deprecated use `V2KeysRerollKeyRequestBody$outboundSchema` instead. */
78
+ export const outboundSchema = V2KeysRerollKeyRequestBody$outboundSchema;
79
+ /** @deprecated use `V2KeysRerollKeyRequestBody$Outbound` instead. */
80
+ export type Outbound = V2KeysRerollKeyRequestBody$Outbound;
81
+ }
82
+
83
+ export function v2KeysRerollKeyRequestBodyToJSON(
84
+ v2KeysRerollKeyRequestBody: V2KeysRerollKeyRequestBody,
85
+ ): string {
86
+ return JSON.stringify(
87
+ V2KeysRerollKeyRequestBody$outboundSchema.parse(v2KeysRerollKeyRequestBody),
88
+ );
89
+ }
90
+
91
+ export function v2KeysRerollKeyRequestBodyFromJSON(
92
+ jsonString: string,
93
+ ): SafeParseResult<V2KeysRerollKeyRequestBody, SDKValidationError> {
94
+ return safeParse(
95
+ jsonString,
96
+ (x) => V2KeysRerollKeyRequestBody$inboundSchema.parse(JSON.parse(x)),
97
+ `Failed to parse 'V2KeysRerollKeyRequestBody' from JSON`,
98
+ );
99
+ }
@@ -0,0 +1,87 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import * as z from "zod";
6
+ import { safeParse } from "../../lib/schemas.js";
7
+ import { Result as SafeParseResult } from "../../types/fp.js";
8
+ import { SDKValidationError } from "../errors/sdkvalidationerror.js";
9
+ import {
10
+ Meta,
11
+ Meta$inboundSchema,
12
+ Meta$Outbound,
13
+ Meta$outboundSchema,
14
+ } from "./meta.js";
15
+ import {
16
+ V2KeysRerollKeyResponseData,
17
+ V2KeysRerollKeyResponseData$inboundSchema,
18
+ V2KeysRerollKeyResponseData$Outbound,
19
+ V2KeysRerollKeyResponseData$outboundSchema,
20
+ } from "./v2keysrerollkeyresponsedata.js";
21
+
22
+ export type V2KeysRerollKeyResponseBody = {
23
+ /**
24
+ * Metadata object included in every API response. This provides context about the request and is essential for debugging, audit trails, and support inquiries. The `requestId` is particularly important when troubleshooting issues with the Unkey support team.
25
+ */
26
+ meta: Meta;
27
+ data: V2KeysRerollKeyResponseData;
28
+ };
29
+
30
+ /** @internal */
31
+ export const V2KeysRerollKeyResponseBody$inboundSchema: z.ZodType<
32
+ V2KeysRerollKeyResponseBody,
33
+ z.ZodTypeDef,
34
+ unknown
35
+ > = z.object({
36
+ meta: Meta$inboundSchema,
37
+ data: V2KeysRerollKeyResponseData$inboundSchema,
38
+ });
39
+
40
+ /** @internal */
41
+ export type V2KeysRerollKeyResponseBody$Outbound = {
42
+ meta: Meta$Outbound;
43
+ data: V2KeysRerollKeyResponseData$Outbound;
44
+ };
45
+
46
+ /** @internal */
47
+ export const V2KeysRerollKeyResponseBody$outboundSchema: z.ZodType<
48
+ V2KeysRerollKeyResponseBody$Outbound,
49
+ z.ZodTypeDef,
50
+ V2KeysRerollKeyResponseBody
51
+ > = z.object({
52
+ meta: Meta$outboundSchema,
53
+ data: V2KeysRerollKeyResponseData$outboundSchema,
54
+ });
55
+
56
+ /**
57
+ * @internal
58
+ * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module.
59
+ */
60
+ export namespace V2KeysRerollKeyResponseBody$ {
61
+ /** @deprecated use `V2KeysRerollKeyResponseBody$inboundSchema` instead. */
62
+ export const inboundSchema = V2KeysRerollKeyResponseBody$inboundSchema;
63
+ /** @deprecated use `V2KeysRerollKeyResponseBody$outboundSchema` instead. */
64
+ export const outboundSchema = V2KeysRerollKeyResponseBody$outboundSchema;
65
+ /** @deprecated use `V2KeysRerollKeyResponseBody$Outbound` instead. */
66
+ export type Outbound = V2KeysRerollKeyResponseBody$Outbound;
67
+ }
68
+
69
+ export function v2KeysRerollKeyResponseBodyToJSON(
70
+ v2KeysRerollKeyResponseBody: V2KeysRerollKeyResponseBody,
71
+ ): string {
72
+ return JSON.stringify(
73
+ V2KeysRerollKeyResponseBody$outboundSchema.parse(
74
+ v2KeysRerollKeyResponseBody,
75
+ ),
76
+ );
77
+ }
78
+
79
+ export function v2KeysRerollKeyResponseBodyFromJSON(
80
+ jsonString: string,
81
+ ): SafeParseResult<V2KeysRerollKeyResponseBody, SDKValidationError> {
82
+ return safeParse(
83
+ jsonString,
84
+ (x) => V2KeysRerollKeyResponseBody$inboundSchema.parse(JSON.parse(x)),
85
+ `Failed to parse 'V2KeysRerollKeyResponseBody' from JSON`,
86
+ );
87
+ }
@@ -0,0 +1,103 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import * as z from "zod";
6
+ import { safeParse } from "../../lib/schemas.js";
7
+ import { Result as SafeParseResult } from "../../types/fp.js";
8
+ import { SDKValidationError } from "../errors/sdkvalidationerror.js";
9
+
10
+ export type V2KeysRerollKeyResponseData = {
11
+ /**
12
+ * The unique identifier for the newly created key.
13
+ *
14
+ * @remarks
15
+ *
16
+ * This is NOT the actual API key token, but a reference ID for management operations.
17
+ * Store this ID to:
18
+ * - Update or revoke the key later
19
+ * - Track the key in your database
20
+ * - Display in admin dashboards (safe to log)
21
+ *
22
+ * Note: This is a new ID - the original key retains its own ID.
23
+ */
24
+ keyId: string;
25
+ /**
26
+ * The newly generated API key token (the actual secret that authenticates requests).
27
+ *
28
+ * @remarks
29
+ *
30
+ * **SECURITY CRITICAL:**
31
+ * - This is the only time you'll receive the complete key
32
+ * - Unkey stores only a hashed version (unless the original key was created with `recoverable=true`)
33
+ * - Never log, store, or expose this value in your systems
34
+ * - Transmit directly to the end user via secure channels only
35
+ * - If lost and not recoverable, you must reroll or create a new key
36
+ *
37
+ * The key format follows: `[prefix]_[random_bytes]`
38
+ * - Prefix is extracted from the original key or uses API default
39
+ * - Random bytes follow API configuration (default: 16 bytes)
40
+ *
41
+ * This is NOT the keyId - it's the actual secret token used for authentication.
42
+ */
43
+ key: string;
44
+ };
45
+
46
+ /** @internal */
47
+ export const V2KeysRerollKeyResponseData$inboundSchema: z.ZodType<
48
+ V2KeysRerollKeyResponseData,
49
+ z.ZodTypeDef,
50
+ unknown
51
+ > = z.object({
52
+ keyId: z.string(),
53
+ key: z.string(),
54
+ });
55
+
56
+ /** @internal */
57
+ export type V2KeysRerollKeyResponseData$Outbound = {
58
+ keyId: string;
59
+ key: string;
60
+ };
61
+
62
+ /** @internal */
63
+ export const V2KeysRerollKeyResponseData$outboundSchema: z.ZodType<
64
+ V2KeysRerollKeyResponseData$Outbound,
65
+ z.ZodTypeDef,
66
+ V2KeysRerollKeyResponseData
67
+ > = z.object({
68
+ keyId: z.string(),
69
+ key: z.string(),
70
+ });
71
+
72
+ /**
73
+ * @internal
74
+ * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module.
75
+ */
76
+ export namespace V2KeysRerollKeyResponseData$ {
77
+ /** @deprecated use `V2KeysRerollKeyResponseData$inboundSchema` instead. */
78
+ export const inboundSchema = V2KeysRerollKeyResponseData$inboundSchema;
79
+ /** @deprecated use `V2KeysRerollKeyResponseData$outboundSchema` instead. */
80
+ export const outboundSchema = V2KeysRerollKeyResponseData$outboundSchema;
81
+ /** @deprecated use `V2KeysRerollKeyResponseData$Outbound` instead. */
82
+ export type Outbound = V2KeysRerollKeyResponseData$Outbound;
83
+ }
84
+
85
+ export function v2KeysRerollKeyResponseDataToJSON(
86
+ v2KeysRerollKeyResponseData: V2KeysRerollKeyResponseData,
87
+ ): string {
88
+ return JSON.stringify(
89
+ V2KeysRerollKeyResponseData$outboundSchema.parse(
90
+ v2KeysRerollKeyResponseData,
91
+ ),
92
+ );
93
+ }
94
+
95
+ export function v2KeysRerollKeyResponseDataFromJSON(
96
+ jsonString: string,
97
+ ): SafeParseResult<V2KeysRerollKeyResponseData, SDKValidationError> {
98
+ return safeParse(
99
+ jsonString,
100
+ (x) => V2KeysRerollKeyResponseData$inboundSchema.parse(JSON.parse(x)),
101
+ `Failed to parse 'V2KeysRerollKeyResponseData' from JSON`,
102
+ );
103
+ }
@@ -32,7 +32,6 @@ export type V2KeysSetPermissionsResponseBody = {
32
32
  * The response includes:
33
33
  * - The comprehensive, updated set of direct permissions (reflecting the complete replacement)
34
34
  * - Both ID and name for each permission for easy reference
35
- * - Permissions sorted alphabetically by name for consistent response format
36
35
  *
37
36
  * Important notes:
38
37
  * - This only shows direct permissions, not those granted through roles
@@ -32,7 +32,6 @@ export type V2KeysSetRolesResponseBody = {
32
32
  * The response includes:
33
33
  * - The comprehensive, updated set of roles (reflecting the complete replacement)
34
34
  * - Both ID and name for each role for easy reference
35
- * - Roles sorted alphabetically by name for consistent response format
36
35
  *
37
36
  * Important notes:
38
37
  * - This response shows the final state after the complete replacement
package/src/sdk/keys.ts CHANGED
@@ -9,6 +9,7 @@ import { keysDeleteKey } from "../funcs/keysDeleteKey.js";
9
9
  import { keysGetKey } from "../funcs/keysGetKey.js";
10
10
  import { keysRemovePermissions } from "../funcs/keysRemovePermissions.js";
11
11
  import { keysRemoveRoles } from "../funcs/keysRemoveRoles.js";
12
+ import { keysRerollKey } from "../funcs/keysRerollKey.js";
12
13
  import { keysSetPermissions } from "../funcs/keysSetPermissions.js";
13
14
  import { keysSetRoles } from "../funcs/keysSetRoles.js";
14
15
  import { keysUpdateCredits } from "../funcs/keysUpdateCredits.js";
@@ -233,6 +234,54 @@ export class Keys extends ClientSDK {
233
234
  ));
234
235
  }
235
236
 
237
+ /**
238
+ * Reroll Key
239
+ *
240
+ * @remarks
241
+ * Generate a new API key while preserving the configuration from an existing key.
242
+ *
243
+ * This operation creates a fresh key with a new token while maintaining all settings from the original key:
244
+ * - Permissions and roles
245
+ * - Custom metadata
246
+ * - Rate limit configurations
247
+ * - Identity associations
248
+ * - Remaining credits
249
+ * - Recovery settings
250
+ *
251
+ * **Key Generation:**
252
+ * - The system attempts to extract the prefix from the original key
253
+ * - If prefix extraction fails, the default API prefix is used
254
+ * - Key length follows the API's default byte configuration (or 16 bytes if not specified)
255
+ *
256
+ * **Original Key Handling:**
257
+ * - The original key will be revoked after the duration specified in `expiration`
258
+ * - Set `expiration` to 0 to revoke immediately
259
+ * - This allows for graceful key rotation with an overlap period
260
+ *
261
+ * Common use cases include:
262
+ * - Rotating keys for security compliance
263
+ * - Issuing replacement keys for compromised credentials
264
+ * - Creating backup keys with identical permissions
265
+ *
266
+ * **Important:** Analytics and usage metrics are tracked at both the key level AND identity level. If the original key has an identity, the new key will inherit it, allowing you to track usage across both individual keys and the overall identity.
267
+ *
268
+ * **Required Permissions**
269
+ *
270
+ * Your root key must have:
271
+ * - `api.*.create_key` or `api.<api_id>.create_key`
272
+ * - `api.*.encrypt_key` or `api.<api_id>.encrypt_key` (only when the original key is recoverable)
273
+ */
274
+ async rerollKey(
275
+ request: components.V2KeysRerollKeyRequestBody,
276
+ options?: RequestOptions,
277
+ ): Promise<components.V2KeysRerollKeyResponseBody> {
278
+ return unwrapAsync(keysRerollKey(
279
+ this,
280
+ request,
281
+ options,
282
+ ));
283
+ }
284
+
236
285
  /**
237
286
  * Set key permissions
238
287
  *
@@ -161,7 +161,8 @@ export class Permissions extends ClientSDK {
161
161
  * List permissions
162
162
  *
163
163
  * @remarks
164
- * Retrieve all permissions in your workspace. Results are paginated and sorted alphabetically by permission name.
164
+ * Retrieve all permissions in your workspace.
165
+ * Results are paginated and sorted by their id.
165
166
  *
166
167
  * **Required Permissions**
167
168
  *
@@ -183,7 +184,8 @@ export class Permissions extends ClientSDK {
183
184
  * List roles
184
185
  *
185
186
  * @remarks
186
- * Retrieve all roles in your workspace including their assigned permissions. Results are paginated and sorted alphabetically by role name.
187
+ * Retrieve all roles in your workspace including their assigned permissions.
188
+ * Results are paginated and sorted by their id.
187
189
  *
188
190
  * **Required Permissions**
189
191
  *