@workos-inc/widgets 1.11.0 → 1.12.0-next.1778098442416

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 (120) hide show
  1. package/CHANGELOG.md +6 -6
  2. package/dist/cjs/api/api-provider.cjs.map +1 -1
  3. package/dist/cjs/api/api-provider.d.cts +1 -1
  4. package/dist/cjs/api/endpoint.cjs.map +1 -1
  5. package/dist/cjs/api/endpoint.d.cts +1 -1
  6. package/dist/cjs/api-keys.client.cjs +72 -4
  7. package/dist/cjs/api-keys.client.cjs.map +1 -1
  8. package/dist/cjs/api-keys.client.d.cts +1 -0
  9. package/dist/cjs/experimental/api/fetch.cjs.map +1 -1
  10. package/dist/cjs/experimental/api/fetch.d.cts +1 -1
  11. package/dist/cjs/experimental/api/react-query.cjs.map +1 -1
  12. package/dist/cjs/experimental/api/react-query.d.cts +1 -1
  13. package/dist/cjs/experimental/api/swr.cjs.map +1 -1
  14. package/dist/cjs/experimental/api/swr.d.cts +1 -1
  15. package/dist/cjs/index.cjs.map +1 -1
  16. package/dist/cjs/lib/api/user-api-key.cjs +72 -0
  17. package/dist/cjs/lib/api/user-api-key.cjs.map +1 -0
  18. package/dist/cjs/lib/api/user-api-key.d.cts +16 -0
  19. package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs +13 -6
  20. package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs.map +1 -1
  21. package/dist/cjs/lib/api-keys/api-keys-state.cjs +6 -0
  22. package/dist/cjs/lib/api-keys/api-keys-state.cjs.map +1 -1
  23. package/dist/cjs/lib/api-keys/api-keys-state.d.cts +2 -0
  24. package/dist/cjs/lib/api-keys/create-api-key.cjs +13 -1
  25. package/dist/cjs/lib/api-keys/create-api-key.cjs.map +1 -1
  26. package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs +3 -0
  27. package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs.map +1 -1
  28. package/dist/cjs/lib/use-permissions.cjs +3 -2
  29. package/dist/cjs/lib/use-permissions.cjs.map +1 -1
  30. package/dist/cjs/lib/use-permissions.d.cts +2 -2
  31. package/dist/cjs/lib/user-api-keys/create-user-api-key.cjs +593 -0
  32. package/dist/cjs/lib/user-api-keys/create-user-api-key.cjs.map +1 -0
  33. package/dist/cjs/lib/user-api-keys/create-user-api-key.d.cts +10 -0
  34. package/dist/cjs/lib/user-api-keys/revoke-user-api-key-dialog.cjs +130 -0
  35. package/dist/cjs/lib/user-api-keys/revoke-user-api-key-dialog.cjs.map +1 -0
  36. package/dist/cjs/lib/user-api-keys/revoke-user-api-key-dialog.d.cts +12 -0
  37. package/dist/cjs/lib/user-api-keys/user-api-key-details-card.cjs +94 -0
  38. package/dist/cjs/lib/user-api-keys/user-api-key-details-card.cjs.map +1 -0
  39. package/dist/cjs/lib/user-api-keys/user-api-key-details-card.d.cts +11 -0
  40. package/dist/cjs/lib/user-api-keys/user-api-key-details-dialog.cjs +108 -0
  41. package/dist/cjs/lib/user-api-keys/user-api-key-details-dialog.cjs.map +1 -0
  42. package/dist/cjs/lib/user-api-keys/user-api-key-details-dialog.d.cts +13 -0
  43. package/dist/cjs/lib/user-api-keys/user-api-keys-context.cjs +83 -0
  44. package/dist/cjs/lib/user-api-keys/user-api-keys-context.cjs.map +1 -0
  45. package/dist/cjs/lib/user-api-keys/user-api-keys-context.d.cts +16 -0
  46. package/dist/cjs/lib/user-api-keys/user-api-keys-search-provider.cjs +95 -0
  47. package/dist/cjs/lib/user-api-keys/user-api-keys-search-provider.cjs.map +1 -0
  48. package/dist/cjs/lib/user-api-keys/user-api-keys-search-provider.d.cts +12 -0
  49. package/dist/cjs/lib/user-api-keys/user-api-keys-search.cjs +104 -0
  50. package/dist/cjs/lib/user-api-keys/user-api-keys-search.cjs.map +1 -0
  51. package/dist/cjs/lib/user-api-keys/user-api-keys-search.d.cts +6 -0
  52. package/dist/cjs/lib/user-api-keys/user-api-keys-state.cjs +165 -0
  53. package/dist/cjs/lib/user-api-keys/user-api-keys-state.cjs.map +1 -0
  54. package/dist/cjs/lib/user-api-keys/user-api-keys-state.d.cts +33 -0
  55. package/dist/cjs/lib/user-api-keys/user-api-keys-table.cjs +300 -0
  56. package/dist/cjs/lib/user-api-keys/user-api-keys-table.cjs.map +1 -0
  57. package/dist/cjs/lib/user-api-keys/user-api-keys-table.d.cts +12 -0
  58. package/dist/cjs/lib/user-api-keys/user-api-keys.cjs +165 -0
  59. package/dist/cjs/lib/user-api-keys/user-api-keys.cjs.map +1 -0
  60. package/dist/cjs/lib/user-api-keys/user-api-keys.d.cts +34 -0
  61. package/dist/esm/api/api-provider.d.ts +1 -1
  62. package/dist/esm/api/api-provider.js.map +1 -1
  63. package/dist/esm/api/endpoint.d.ts +1 -1
  64. package/dist/esm/api/endpoint.js.map +1 -1
  65. package/dist/esm/api-keys.client.d.ts +1 -0
  66. package/dist/esm/api-keys.client.js +87 -5
  67. package/dist/esm/api-keys.client.js.map +1 -1
  68. package/dist/esm/experimental/api/fetch.d.ts +1 -1
  69. package/dist/esm/experimental/api/fetch.js.map +1 -1
  70. package/dist/esm/experimental/api/react-query.d.ts +1 -1
  71. package/dist/esm/experimental/api/react-query.js.map +1 -1
  72. package/dist/esm/experimental/api/swr.d.ts +1 -1
  73. package/dist/esm/experimental/api/swr.js.map +1 -1
  74. package/dist/esm/index.js.map +1 -1
  75. package/dist/esm/lib/api/user-api-key.d.ts +16 -0
  76. package/dist/esm/lib/api/user-api-key.js +52 -0
  77. package/dist/esm/lib/api/user-api-key.js.map +1 -0
  78. package/dist/esm/lib/api-keys/api-key-details-dialog.js +13 -6
  79. package/dist/esm/lib/api-keys/api-key-details-dialog.js.map +1 -1
  80. package/dist/esm/lib/api-keys/api-keys-state.d.ts +2 -0
  81. package/dist/esm/lib/api-keys/api-keys-state.js +6 -0
  82. package/dist/esm/lib/api-keys/api-keys-state.js.map +1 -1
  83. package/dist/esm/lib/api-keys/create-api-key.js +13 -1
  84. package/dist/esm/lib/api-keys/create-api-key.js.map +1 -1
  85. package/dist/esm/lib/api-keys/revoke-api-key-dialog.js +3 -0
  86. package/dist/esm/lib/api-keys/revoke-api-key-dialog.js.map +1 -1
  87. package/dist/esm/lib/use-permissions.d.ts +2 -2
  88. package/dist/esm/lib/use-permissions.js +3 -2
  89. package/dist/esm/lib/use-permissions.js.map +1 -1
  90. package/dist/esm/lib/user-api-keys/create-user-api-key.d.ts +10 -0
  91. package/dist/esm/lib/user-api-keys/create-user-api-key.js +578 -0
  92. package/dist/esm/lib/user-api-keys/create-user-api-key.js.map +1 -0
  93. package/dist/esm/lib/user-api-keys/revoke-user-api-key-dialog.d.ts +12 -0
  94. package/dist/esm/lib/user-api-keys/revoke-user-api-key-dialog.js +109 -0
  95. package/dist/esm/lib/user-api-keys/revoke-user-api-key-dialog.js.map +1 -0
  96. package/dist/esm/lib/user-api-keys/user-api-key-details-card.d.ts +11 -0
  97. package/dist/esm/lib/user-api-keys/user-api-key-details-card.js +60 -0
  98. package/dist/esm/lib/user-api-keys/user-api-key-details-card.js.map +1 -0
  99. package/dist/esm/lib/user-api-keys/user-api-key-details-dialog.d.ts +13 -0
  100. package/dist/esm/lib/user-api-keys/user-api-key-details-dialog.js +86 -0
  101. package/dist/esm/lib/user-api-keys/user-api-key-details-dialog.js.map +1 -0
  102. package/dist/esm/lib/user-api-keys/user-api-keys-context.d.ts +16 -0
  103. package/dist/esm/lib/user-api-keys/user-api-keys-context.js +50 -0
  104. package/dist/esm/lib/user-api-keys/user-api-keys-context.js.map +1 -0
  105. package/dist/esm/lib/user-api-keys/user-api-keys-search-provider.d.ts +12 -0
  106. package/dist/esm/lib/user-api-keys/user-api-keys-search-provider.js +60 -0
  107. package/dist/esm/lib/user-api-keys/user-api-keys-search-provider.js.map +1 -0
  108. package/dist/esm/lib/user-api-keys/user-api-keys-search.d.ts +6 -0
  109. package/dist/esm/lib/user-api-keys/user-api-keys-search.js +70 -0
  110. package/dist/esm/lib/user-api-keys/user-api-keys-search.js.map +1 -0
  111. package/dist/esm/lib/user-api-keys/user-api-keys-state.d.ts +33 -0
  112. package/dist/esm/lib/user-api-keys/user-api-keys-state.js +131 -0
  113. package/dist/esm/lib/user-api-keys/user-api-keys-state.js.map +1 -0
  114. package/dist/esm/lib/user-api-keys/user-api-keys-table.d.ts +12 -0
  115. package/dist/esm/lib/user-api-keys/user-api-keys-table.js +276 -0
  116. package/dist/esm/lib/user-api-keys/user-api-keys-table.js.map +1 -0
  117. package/dist/esm/lib/user-api-keys/user-api-keys.d.ts +34 -0
  118. package/dist/esm/lib/user-api-keys/user-api-keys.js +141 -0
  119. package/dist/esm/lib/user-api-keys/user-api-keys.js.map +1 -0
  120. package/package.json +3 -3
@@ -565,7 +565,7 @@ type DataIntegration = {
565
565
  slug: string;
566
566
  integrationType: "asana" | "attio" | "box" | "cal-dot-com" | "calendly" | "confluence" | "datadog" | "dropbox" | "frame-io" | "front" | "github" | "gitlab" | "gmail" | "gong" | "google" | "google-calendar" | "google-drive" | "helpscout" | "hubspot" | "intercom" | "intralinks" | "jira" | "linear" | "microsoft" | "microsoft-onedrive" | "microsoft-onenote" | "microsoft-outlook" | "microsoft-outlook-calendar" | "microsoft-sharepoint" | "microsoft-teams" | "microsoft-todo" | "notion" | "prefect" | "pydantic-logfire" | "quickbooks" | "salesforce" | "sentry" | "slack" | "snowflake" | "stripe" | "xero" | "zendesk" | "zoom" | string;
567
567
  ownership: "userland_user" | "organization";
568
- credentialsType: "shared" | "custom";
568
+ credentialsType: "shared" | "custom" | "organization";
569
569
  scopes?: string[] | null;
570
570
  createdAt: string;
571
571
  updatedAt: string;
@@ -34,21 +34,46 @@ var import_use_permissions = require("./lib/use-permissions.js");
34
34
  var import_api_keys_context = require("./lib/api-keys/api-keys-context.js");
35
35
  var import_api_key = require("./lib/api/api-key.js");
36
36
  var import_create_api_key = require("./lib/api-keys/create-api-key.js");
37
- const ApiKeys = ({ authToken, ...domProps }) => {
37
+ var import_user_api_keys = require("./lib/user-api-keys/user-api-keys.js");
38
+ var import_user_api_key = require("./lib/api/user-api-key.js");
39
+ var import_user_api_keys_context = require("./lib/user-api-keys/user-api-keys-context.js");
40
+ var import_create_user_api_key = require("./lib/user-api-keys/create-user-api-key.js");
41
+ const USER_API_KEY_PERMISSION_SCOPES = [
42
+ "widgets:user-api-keys:manage-self",
43
+ "widgets:user-api-keys:manage-all"
44
+ ];
45
+ const USER_API_KEY_MANAGE_ALL_SCOPE = "widgets:user-api-keys:manage-all";
46
+ function hasPermission(permissions, scope) {
47
+ return permissions?.includes(scope) ?? false;
48
+ }
49
+ function canManageUserApiKeys(permissions) {
50
+ return USER_API_KEY_PERMISSION_SCOPES.some(
51
+ (scope) => hasPermission(permissions, scope)
52
+ );
53
+ }
54
+ const ApiKeys = ({
55
+ authToken,
56
+ scope = "organization",
57
+ ...domProps
58
+ }) => {
38
59
  const baseUrl = (0, import_widgets_context.useWorkOsApiUrl)();
60
+ const ErrorComponent = scope === "organization" ? import_api_keys.ApiKeysError : import_user_api_keys.UserApiKeysError;
39
61
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
40
62
  import_error_boundary.ErrorBoundary,
41
63
  {
42
- fallbackRender: ({ error }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_api_keys.ApiKeysError, { ...domProps, error }),
64
+ fallbackRender: ({ error }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ErrorComponent, { ...domProps, error }),
43
65
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
44
66
  import_api_provider.ApiProvider,
45
67
  {
46
- widgetType: "api-keys",
68
+ widgetType: scope === "organization" ? "api-keys" : "user-api-keys",
47
69
  authToken,
48
70
  baseUrl,
49
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_api_keys_context.ApiKeysContextProvider, { children: [
71
+ children: scope === "organization" ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_api_keys_context.ApiKeysContextProvider, { children: [
50
72
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_create_api_key.CreateApiKeyDialog, {}),
51
73
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ApiKeysImpl, { ...domProps })
74
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_user_api_keys_context.UserApiKeysContextProvider, { children: [
75
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CreateUserApiKeyDialogGate, {}),
76
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UserApiKeysImpl, { ...domProps })
52
77
  ] })
53
78
  }
54
79
  )
@@ -85,6 +110,49 @@ const ApiKeysImpl = (props) => {
85
110
  }
86
111
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_api_keys.ApiKeysError, { error: apiKeys.error, ...props });
87
112
  };
113
+ const CreateUserApiKeyDialogGate = () => {
114
+ const { permissions } = (0, import_api_provider.useApi)();
115
+ const canCreate = canManageUserApiKeys(permissions);
116
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_create_user_api_key.CreateUserApiKeyDialog, { canCreate });
117
+ };
118
+ const UserApiKeysImpl = (props) => {
119
+ const isApiReady = (0, import_api_provider.useApiReady)();
120
+ const apiKeys = (0, import_user_api_key.useUserApiKeys)();
121
+ const { state } = (0, import_user_api_keys_context.useUserApiKeysContext)();
122
+ const { permissions } = (0, import_api_provider.useApi)();
123
+ const canCreate = canManageUserApiKeys(permissions);
124
+ const canManageAll = hasPermission(
125
+ permissions,
126
+ USER_API_KEY_MANAGE_ALL_SCOPE
127
+ );
128
+ (0, import_user_api_key.useListUserApiKeyPermissions)({ limit: 100 });
129
+ const permissionsQuery = (0, import_use_permissions.usePermissions)(USER_API_KEY_PERMISSION_SCOPES);
130
+ if (!isApiReady || apiKeys.isLoading || permissionsQuery.isLoading) {
131
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_user_api_keys.UserApiKeysLoading, { canManageAll, ...props });
132
+ }
133
+ if (permissionsQuery.isError || apiKeys.isError) {
134
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
135
+ import_user_api_keys.UserApiKeysError,
136
+ {
137
+ error: permissionsQuery.error || apiKeys.error,
138
+ ...props
139
+ }
140
+ );
141
+ }
142
+ if (apiKeys.isSuccess) {
143
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
144
+ import_user_api_keys.UserApiKeys,
145
+ {
146
+ apiKeys: apiKeys.data,
147
+ searchQuery: state.searchQuery,
148
+ canCreate,
149
+ canManageAll,
150
+ ...props
151
+ }
152
+ );
153
+ }
154
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_user_api_keys.UserApiKeysLoading, { canManageAll, ...props });
155
+ };
88
156
  // Annotate the CommonJS export names for ESM import in node:
89
157
  0 && (module.exports = {
90
158
  ApiKeys,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/api-keys.client.tsx"],"sourcesContent":["\"use client\";\nimport { ApiProvider, AuthToken, useApiReady } from \"./api/api-provider.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport {\n ApiKeysLoading,\n ApiKeys as ApiKeysPresentational,\n ApiKeysError,\n} from \"./lib/api-keys/api-keys.js\";\nimport type {\n ApiKeysLoadingProps,\n ApiKeysErrorProps,\n} from \"./lib/api-keys/api-keys.js\";\nimport { useListOrganizationApiKeyPermissions } from \"./api/endpoint.js\";\nimport * as React from \"react\";\nimport { ErrorBoundary } from \"./lib/error-boundary.js\";\nimport { usePermissions } from \"./lib/use-permissions.js\";\nimport {\n ApiKeysContextProvider,\n useApiKeysContext,\n} from \"./lib/api-keys/api-keys-context.js\";\nimport { useApiKeys } from \"./lib/api/api-key.js\";\nimport { CreateApiKeyDialog } from \"./lib/api-keys/create-api-key.js\";\nimport type { WidgetRootDomProps } from \"./lib/utils.js\";\n\ninterface ApiKeysProps extends WidgetRootDomProps {\n authToken: AuthToken;\n}\n\nconst ApiKeys: React.FC<ApiKeysProps> = ({ authToken, ...domProps }) => {\n const baseUrl = useWorkOsApiUrl();\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <ApiKeysError {...domProps} error={error} />\n )}\n >\n <ApiProvider\n widgetType=\"api-keys\"\n authToken={authToken}\n baseUrl={baseUrl}\n >\n <ApiKeysContextProvider>\n <CreateApiKeyDialog />\n <ApiKeysImpl {...domProps} />\n </ApiKeysContextProvider>\n </ApiProvider>\n </ErrorBoundary>\n );\n};\n\nconst ApiKeysImpl = (props: WidgetRootDomProps) => {\n const isApiReady = useApiReady();\n const apiKeys = useApiKeys();\n const { state } = useApiKeysContext();\n useListOrganizationApiKeyPermissions({ limit: 100 });\n const permissionsQuery = usePermissions(\"widgets:api-keys:manage\");\n\n if (!isApiReady || apiKeys.isLoading || permissionsQuery.isLoading) {\n return <ApiKeysLoading {...props} />;\n }\n\n if (permissionsQuery.isError || apiKeys.isError) {\n return (\n <ApiKeysError\n error={permissionsQuery.error || apiKeys.error}\n {...props}\n />\n );\n }\n\n if (apiKeys.isSuccess) {\n return (\n <ApiKeysPresentational\n apiKeys={apiKeys.data}\n searchQuery={state.searchQuery}\n {...props}\n />\n );\n }\n\n return <ApiKeysError error={apiKeys.error} {...props} />;\n};\n\nexport type { ApiKeysProps, ApiKeysLoadingProps, ApiKeysErrorProps };\nexport { ApiKeys, ApiKeysLoading, ApiKeysError };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCQ;AAhCR,0BAAoD;AACpD,6BAAgC;AAChC,sBAIO;AAKP,sBAAqD;AAErD,4BAA8B;AAC9B,6BAA+B;AAC/B,8BAGO;AACP,qBAA2B;AAC3B,4BAAmC;AAOnC,MAAM,UAAkC,CAAC,EAAE,WAAW,GAAG,SAAS,MAAM;AACtE,QAAM,cAAU,wCAAgB;AAChC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB,CAAC,EAAE,MAAM,MACvB,4CAAC,gCAAc,GAAG,UAAU,OAAc;AAAA,MAG5C;AAAA,QAAC;AAAA;AAAA,UACC,YAAW;AAAA,UACX;AAAA,UACA;AAAA,UAEA,uDAAC,kDACC;AAAA,wDAAC,4CAAmB;AAAA,YACpB,4CAAC,eAAa,GAAG,UAAU;AAAA,aAC7B;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAEA,MAAM,cAAc,CAAC,UAA8B;AACjD,QAAM,iBAAa,iCAAY;AAC/B,QAAM,cAAU,2BAAW;AAC3B,QAAM,EAAE,MAAM,QAAI,2CAAkB;AACpC,4DAAqC,EAAE,OAAO,IAAI,CAAC;AACnD,QAAM,uBAAmB,uCAAe,yBAAyB;AAEjE,MAAI,CAAC,cAAc,QAAQ,aAAa,iBAAiB,WAAW;AAClE,WAAO,4CAAC,kCAAgB,GAAG,OAAO;AAAA,EACpC;AAEA,MAAI,iBAAiB,WAAW,QAAQ,SAAS;AAC/C,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,iBAAiB,SAAS,QAAQ;AAAA,QACxC,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AAEA,MAAI,QAAQ,WAAW;AACrB,WACE;AAAA,MAAC,gBAAAA;AAAA,MAAA;AAAA,QACC,SAAS,QAAQ;AAAA,QACjB,aAAa,MAAM;AAAA,QAClB,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AAEA,SAAO,4CAAC,gCAAa,OAAO,QAAQ,OAAQ,GAAG,OAAO;AACxD;","names":["ApiKeysPresentational"]}
1
+ {"version":3,"sources":["../../src/api-keys.client.tsx"],"sourcesContent":["\"use client\";\nimport {\n ApiProvider,\n AuthToken,\n useApi,\n useApiReady,\n} from \"./api/api-provider.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport {\n ApiKeysLoading,\n ApiKeys as ApiKeysPresentational,\n ApiKeysError,\n} from \"./lib/api-keys/api-keys.js\";\nimport type {\n ApiKeysLoadingProps,\n ApiKeysErrorProps,\n} from \"./lib/api-keys/api-keys.js\";\nimport { useListOrganizationApiKeyPermissions } from \"./api/endpoint.js\";\nimport * as React from \"react\";\nimport { ErrorBoundary } from \"./lib/error-boundary.js\";\nimport { usePermissions } from \"./lib/use-permissions.js\";\nimport {\n ApiKeysContextProvider,\n useApiKeysContext,\n} from \"./lib/api-keys/api-keys-context.js\";\nimport { useApiKeys } from \"./lib/api/api-key.js\";\nimport { CreateApiKeyDialog } from \"./lib/api-keys/create-api-key.js\";\nimport {\n UserApiKeysLoading,\n UserApiKeys as UserApiKeysPresentational,\n UserApiKeysError,\n} from \"./lib/user-api-keys/user-api-keys.js\";\nimport {\n useListUserApiKeyPermissions,\n useUserApiKeys,\n} from \"./lib/api/user-api-key.js\";\nimport {\n UserApiKeysContextProvider,\n useUserApiKeysContext,\n} from \"./lib/user-api-keys/user-api-keys-context.js\";\nimport { CreateUserApiKeyDialog } from \"./lib/user-api-keys/create-user-api-key.js\";\nimport type { WidgetRootDomProps } from \"./lib/utils.js\";\n\ninterface ApiKeysProps extends WidgetRootDomProps {\n authToken: AuthToken;\n scope?: \"organization\" | \"user\";\n}\n\nconst USER_API_KEY_PERMISSION_SCOPES = [\n \"widgets:user-api-keys:manage-self\",\n \"widgets:user-api-keys:manage-all\",\n] as const;\n\nconst USER_API_KEY_MANAGE_ALL_SCOPE = \"widgets:user-api-keys:manage-all\";\n\nfunction hasPermission(\n permissions: string[] | undefined,\n scope: (typeof USER_API_KEY_PERMISSION_SCOPES)[number],\n) {\n return permissions?.includes(scope) ?? false;\n}\n\nfunction canManageUserApiKeys(permissions: string[] | undefined) {\n return USER_API_KEY_PERMISSION_SCOPES.some((scope) =>\n hasPermission(permissions, scope),\n );\n}\n\nconst ApiKeys: React.FC<ApiKeysProps> = ({\n authToken,\n scope = \"organization\",\n ...domProps\n}) => {\n const baseUrl = useWorkOsApiUrl();\n const ErrorComponent =\n scope === \"organization\" ? ApiKeysError : UserApiKeysError;\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <ErrorComponent {...domProps} error={error} />\n )}\n >\n <ApiProvider\n widgetType={scope === \"organization\" ? \"api-keys\" : \"user-api-keys\"}\n authToken={authToken}\n baseUrl={baseUrl}\n >\n {scope === \"organization\" ? (\n <ApiKeysContextProvider>\n <CreateApiKeyDialog />\n <ApiKeysImpl {...domProps} />\n </ApiKeysContextProvider>\n ) : (\n <UserApiKeysContextProvider>\n <CreateUserApiKeyDialogGate />\n <UserApiKeysImpl {...domProps} />\n </UserApiKeysContextProvider>\n )}\n </ApiProvider>\n </ErrorBoundary>\n );\n};\n\nconst ApiKeysImpl = (props: WidgetRootDomProps) => {\n const isApiReady = useApiReady();\n const apiKeys = useApiKeys();\n const { state } = useApiKeysContext();\n useListOrganizationApiKeyPermissions({ limit: 100 });\n const permissionsQuery = usePermissions(\"widgets:api-keys:manage\");\n\n if (!isApiReady || apiKeys.isLoading || permissionsQuery.isLoading) {\n return <ApiKeysLoading {...props} />;\n }\n\n if (permissionsQuery.isError || apiKeys.isError) {\n return (\n <ApiKeysError\n error={permissionsQuery.error || apiKeys.error}\n {...props}\n />\n );\n }\n\n if (apiKeys.isSuccess) {\n return (\n <ApiKeysPresentational\n apiKeys={apiKeys.data}\n searchQuery={state.searchQuery}\n {...props}\n />\n );\n }\n\n return <ApiKeysError error={apiKeys.error} {...props} />;\n};\n\nconst CreateUserApiKeyDialogGate = () => {\n const { permissions } = useApi();\n const canCreate = canManageUserApiKeys(permissions);\n\n return <CreateUserApiKeyDialog canCreate={canCreate} />;\n};\n\nconst UserApiKeysImpl = (props: WidgetRootDomProps) => {\n const isApiReady = useApiReady();\n const apiKeys = useUserApiKeys();\n const { state } = useUserApiKeysContext();\n const { permissions } = useApi();\n const canCreate = canManageUserApiKeys(permissions);\n const canManageAll = hasPermission(\n permissions,\n USER_API_KEY_MANAGE_ALL_SCOPE,\n );\n\n useListUserApiKeyPermissions({ limit: 100 });\n const permissionsQuery = usePermissions(USER_API_KEY_PERMISSION_SCOPES);\n\n if (!isApiReady || apiKeys.isLoading || permissionsQuery.isLoading) {\n return <UserApiKeysLoading canManageAll={canManageAll} {...props} />;\n }\n\n if (permissionsQuery.isError || apiKeys.isError) {\n return (\n <UserApiKeysError\n error={permissionsQuery.error || apiKeys.error}\n {...props}\n />\n );\n }\n\n if (apiKeys.isSuccess) {\n return (\n <UserApiKeysPresentational\n apiKeys={apiKeys.data}\n searchQuery={state.searchQuery}\n canCreate={canCreate}\n canManageAll={canManageAll}\n {...props}\n />\n );\n }\n\n return <UserApiKeysLoading canManageAll={canManageAll} {...props} />;\n};\n\nexport type { ApiKeysProps, ApiKeysLoadingProps, ApiKeysErrorProps };\nexport { ApiKeys, ApiKeysLoading, ApiKeysError };\n"],"mappings":"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","names":["ApiKeysPresentational","UserApiKeysPresentational"]}
@@ -20,6 +20,7 @@ import '@radix-ui/themes/components/select';
20
20
 
21
21
  interface ApiKeysProps extends WidgetRootDomProps {
22
22
  authToken: AuthToken;
23
+ scope?: "organization" | "user";
23
24
  }
24
25
  declare const ApiKeys: React.FC<ApiKeysProps>;
25
26