@hexclave/shared 1.0.39 → 1.0.40

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 (48) hide show
  1. package/dist/ai/unified-prompts/reminders.js +1 -1
  2. package/dist/config/schema.d.ts +36 -36
  3. package/dist/esm/ai/unified-prompts/reminders.js +1 -1
  4. package/dist/esm/config/schema.d.ts +36 -36
  5. package/dist/esm/interface/admin-interface.js +1 -1
  6. package/dist/esm/interface/admin-metrics.d.ts +25 -25
  7. package/dist/esm/interface/client-interface.js +1 -1
  8. package/dist/esm/interface/conversations.d.ts +10 -10
  9. package/dist/esm/interface/crud/current-user.d.ts +9 -9
  10. package/dist/esm/interface/crud/email-outbox.d.ts +206 -206
  11. package/dist/esm/interface/crud/products.d.ts +5 -5
  12. package/dist/esm/interface/crud/project-api-keys.d.ts +4 -4
  13. package/dist/esm/interface/crud/team-member-profiles.d.ts +16 -16
  14. package/dist/esm/interface/crud/transactions.d.ts +2 -2
  15. package/dist/esm/interface/crud/users.d.ts +12 -12
  16. package/dist/esm/interface/plan-usage.d.ts +2 -2
  17. package/dist/esm/interface/server-interface.d.ts +1 -0
  18. package/dist/esm/interface/server-interface.d.ts.map +1 -1
  19. package/dist/esm/interface/server-interface.js +2 -1
  20. package/dist/esm/interface/server-interface.js.map +1 -1
  21. package/dist/esm/interface/webhooks.d.ts +2 -2
  22. package/dist/esm/known-errors.d.ts +2 -2
  23. package/dist/esm/schema-fields.d.ts +1 -1
  24. package/dist/esm/sessions.d.ts +1 -1
  25. package/dist/esm/utils/promises.js +1 -1
  26. package/dist/interface/admin-interface.js +1 -1
  27. package/dist/interface/admin-metrics.d.ts +25 -25
  28. package/dist/interface/client-interface.js +1 -1
  29. package/dist/interface/conversations.d.ts +10 -10
  30. package/dist/interface/crud/current-user.d.ts +9 -9
  31. package/dist/interface/crud/email-outbox.d.ts +206 -206
  32. package/dist/interface/crud/products.d.ts +5 -5
  33. package/dist/interface/crud/project-api-keys.d.ts +4 -4
  34. package/dist/interface/crud/team-member-profiles.d.ts +16 -16
  35. package/dist/interface/crud/transactions.d.ts +2 -2
  36. package/dist/interface/crud/users.d.ts +12 -12
  37. package/dist/interface/plan-usage.d.ts +2 -2
  38. package/dist/interface/server-interface.d.ts +1 -0
  39. package/dist/interface/server-interface.d.ts.map +1 -1
  40. package/dist/interface/server-interface.js +2 -1
  41. package/dist/interface/server-interface.js.map +1 -1
  42. package/dist/interface/webhooks.d.ts +2 -2
  43. package/dist/known-errors.d.ts +2 -2
  44. package/dist/schema-fields.d.ts +1 -1
  45. package/dist/sessions.d.ts +1 -1
  46. package/dist/utils/promises.js +1 -1
  47. package/package.json +1 -1
  48. package/src/interface/server-interface.ts +2 -0
@@ -10,7 +10,6 @@ declare const customerProductReadSchema: yup$1.ObjectSchema<{
10
10
  client_metadata?: {} | null | undefined;
11
11
  client_read_only_metadata?: {} | null | undefined;
12
12
  server_metadata?: {} | null | undefined;
13
- display_name: string;
14
13
  server_only: boolean;
15
14
  customer_type: "team" | "user" | "custom";
16
15
  stackable: boolean;
@@ -25,6 +24,7 @@ declare const customerProductReadSchema: yup$1.ObjectSchema<{
25
24
  interval?: DayInterval | undefined;
26
25
  free_trial?: DayInterval | undefined;
27
26
  }>;
27
+ display_name: string;
28
28
  included_items: Record<string, {
29
29
  quantity?: number | undefined;
30
30
  repeat?: "never" | DayInterval | undefined;
@@ -45,7 +45,6 @@ declare const customerProductReadSchema: yup$1.ObjectSchema<{
45
45
  client_metadata?: {} | null | undefined;
46
46
  client_read_only_metadata?: {} | null | undefined;
47
47
  server_metadata?: {} | null | undefined;
48
- display_name: string;
49
48
  server_only: boolean;
50
49
  customer_type: "team" | "user" | "custom";
51
50
  stackable: boolean;
@@ -60,6 +59,7 @@ declare const customerProductReadSchema: yup$1.ObjectSchema<{
60
59
  interval?: DayInterval | undefined;
61
60
  free_trial?: DayInterval | undefined;
62
61
  }>;
62
+ display_name: string;
63
63
  included_items: Record<string, {
64
64
  quantity?: number | undefined;
65
65
  repeat?: "never" | DayInterval | undefined;
@@ -108,7 +108,6 @@ declare const customerProductsListResponseSchema: yup$1.ObjectSchema<{
108
108
  client_metadata?: {} | null | undefined;
109
109
  client_read_only_metadata?: {} | null | undefined;
110
110
  server_metadata?: {} | null | undefined;
111
- display_name: string;
112
111
  server_only: boolean;
113
112
  customer_type: "team" | "user" | "custom";
114
113
  stackable: boolean;
@@ -123,6 +122,7 @@ declare const customerProductsListResponseSchema: yup$1.ObjectSchema<{
123
122
  interval?: DayInterval | undefined;
124
123
  free_trial?: DayInterval | undefined;
125
124
  }>;
125
+ display_name: string;
126
126
  included_items: Record<string, {
127
127
  quantity?: number | undefined;
128
128
  repeat?: "never" | DayInterval | undefined;
@@ -130,14 +130,12 @@ declare const customerProductsListResponseSchema: yup$1.ObjectSchema<{
130
130
  }>;
131
131
  };
132
132
  }[] | undefined;
133
- id: string | null;
134
133
  quantity: number;
135
134
  product: {
136
135
  free_trial?: DayInterval | undefined;
137
136
  client_metadata?: {} | null | undefined;
138
137
  client_read_only_metadata?: {} | null | undefined;
139
138
  server_metadata?: {} | null | undefined;
140
- display_name: string;
141
139
  server_only: boolean;
142
140
  customer_type: "team" | "user" | "custom";
143
141
  stackable: boolean;
@@ -152,12 +150,14 @@ declare const customerProductsListResponseSchema: yup$1.ObjectSchema<{
152
150
  interval?: DayInterval | undefined;
153
151
  free_trial?: DayInterval | undefined;
154
152
  }>;
153
+ display_name: string;
155
154
  included_items: Record<string, {
156
155
  quantity?: number | undefined;
157
156
  repeat?: "never" | DayInterval | undefined;
158
157
  expires?: "never" | "when-purchase-expires" | "when-repeated" | undefined;
159
158
  }>;
160
159
  };
160
+ id: string | null;
161
161
  }[];
162
162
  is_paginated: boolean;
163
163
  pagination: {
@@ -78,12 +78,12 @@ declare const userApiKeysCrud: CrudSchemaFromOptions<{
78
78
  is_public: undefined;
79
79
  user_id: undefined;
80
80
  }, "">, userApiKeysCreateOutputSchema: yup$1.ObjectSchema<{
81
+ user_id: string;
81
82
  type: "user";
83
+ description: string;
82
84
  id: string;
83
85
  created_at_millis: number;
84
86
  expires_at_millis: number | undefined;
85
- user_id: string;
86
- description: string;
87
87
  manually_revoked_at_millis: number | undefined;
88
88
  is_public: boolean;
89
89
  } & {
@@ -177,11 +177,11 @@ declare const teamApiKeysCrud: CrudSchemaFromOptions<{
177
177
  team_id: undefined;
178
178
  }, "">, teamApiKeysCreateOutputSchema: yup$1.ObjectSchema<{
179
179
  type: "team";
180
+ team_id: string;
181
+ description: string;
180
182
  id: string;
181
183
  created_at_millis: number;
182
184
  expires_at_millis: number | undefined;
183
- team_id: string;
184
- description: string;
185
185
  manually_revoked_at_millis: number | undefined;
186
186
  is_public: boolean;
187
187
  } & {
@@ -20,32 +20,32 @@ declare const teamMemberProfilesCrudServerReadSchema: yup$1.ObjectSchema<{
20
20
  profile_image_url: string | null;
21
21
  } & {
22
22
  user: {
23
- id: string;
24
- country_code: string | null;
25
- display_name: string | null;
26
- primary_email: string | null;
27
- profile_image_url: string | null;
28
- signed_up_at_millis: number;
29
- last_active_at_millis: number;
30
23
  restricted_reason: {
31
24
  type: "anonymous" | "email_not_verified" | "restricted_by_administrator";
32
25
  } | null;
26
+ primary_email: string | null;
27
+ display_name: string | null;
33
28
  client_metadata: {} | null;
34
29
  client_read_only_metadata: {} | null;
35
30
  server_metadata: {} | null;
31
+ id: string;
36
32
  selected_team_id: string | null;
37
33
  is_anonymous: boolean;
38
34
  is_restricted: boolean;
39
35
  requires_totp_mfa: boolean;
36
+ country_code: string | null;
37
+ profile_image_url: string | null;
38
+ signed_up_at_millis: number;
39
+ last_active_at_millis: number;
40
40
  primary_email_verified: boolean;
41
41
  primary_email_auth_enabled: boolean;
42
42
  selected_team: {
43
43
  client_metadata?: {} | null | undefined;
44
44
  client_read_only_metadata?: {} | null | undefined;
45
45
  server_metadata?: {} | null | undefined;
46
+ display_name: string;
46
47
  id: string;
47
48
  created_at_millis: number;
48
- display_name: string;
49
49
  profile_image_url: string | null;
50
50
  } | null;
51
51
  has_password: boolean;
@@ -143,32 +143,32 @@ declare const teamMemberProfilesCrud: CrudSchemaFromOptions<{
143
143
  profile_image_url: string | null;
144
144
  } & {
145
145
  user: {
146
- id: string;
147
- country_code: string | null;
148
- display_name: string | null;
149
- primary_email: string | null;
150
- profile_image_url: string | null;
151
- signed_up_at_millis: number;
152
- last_active_at_millis: number;
153
146
  restricted_reason: {
154
147
  type: "anonymous" | "email_not_verified" | "restricted_by_administrator";
155
148
  } | null;
149
+ primary_email: string | null;
150
+ display_name: string | null;
156
151
  client_metadata: {} | null;
157
152
  client_read_only_metadata: {} | null;
158
153
  server_metadata: {} | null;
154
+ id: string;
159
155
  selected_team_id: string | null;
160
156
  is_anonymous: boolean;
161
157
  is_restricted: boolean;
162
158
  requires_totp_mfa: boolean;
159
+ country_code: string | null;
160
+ profile_image_url: string | null;
161
+ signed_up_at_millis: number;
162
+ last_active_at_millis: number;
163
163
  primary_email_verified: boolean;
164
164
  primary_email_auth_enabled: boolean;
165
165
  selected_team: {
166
166
  client_metadata?: {} | null | undefined;
167
167
  client_read_only_metadata?: {} | null | undefined;
168
168
  server_metadata?: {} | null | undefined;
169
+ display_name: string;
169
170
  id: string;
170
171
  created_at_millis: number;
171
- display_name: string;
172
172
  profile_image_url: string | null;
173
173
  } | null;
174
174
  has_password: boolean;
@@ -42,7 +42,6 @@ declare const transactionEntrySchema: yup$1.MixedSchema<{
42
42
  client_metadata?: {} | null | undefined;
43
43
  client_read_only_metadata?: {} | null | undefined;
44
44
  server_metadata?: {} | null | undefined;
45
- display_name: string;
46
45
  server_only: boolean;
47
46
  customer_type: "team" | "user" | "custom";
48
47
  stackable: boolean;
@@ -57,6 +56,7 @@ declare const transactionEntrySchema: yup$1.MixedSchema<{
57
56
  interval?: DayInterval | undefined;
58
57
  free_trial?: DayInterval | undefined;
59
58
  }>;
59
+ display_name: string;
60
60
  included_items: Record<string, {
61
61
  quantity?: number | undefined;
62
62
  repeat?: "never" | DayInterval | undefined;
@@ -126,7 +126,6 @@ declare const transactionSchema: yup$1.ObjectSchema<{
126
126
  client_metadata?: {} | null | undefined;
127
127
  client_read_only_metadata?: {} | null | undefined;
128
128
  server_metadata?: {} | null | undefined;
129
- display_name: string;
130
129
  server_only: boolean;
131
130
  customer_type: "team" | "user" | "custom";
132
131
  stackable: boolean;
@@ -141,6 +140,7 @@ declare const transactionSchema: yup$1.ObjectSchema<{
141
140
  interval?: DayInterval | undefined;
142
141
  free_trial?: DayInterval | undefined;
143
142
  }>;
143
+ display_name: string;
144
144
  included_items: Record<string, {
145
145
  quantity?: number | undefined;
146
146
  repeat?: "never" | DayInterval | undefined;
@@ -80,9 +80,9 @@ declare const usersCrudServerReadSchema: yup$1.ObjectSchema<{
80
80
  client_metadata?: {} | null | undefined;
81
81
  client_read_only_metadata?: {} | null | undefined;
82
82
  server_metadata?: {} | null | undefined;
83
+ display_name: string;
83
84
  id: string;
84
85
  created_at_millis: number;
85
- display_name: string;
86
86
  profile_image_url: string | null;
87
87
  } | null;
88
88
  selected_team_id: string | null;
@@ -162,14 +162,14 @@ declare const usersCrudServerReadSchema: yup$1.ObjectSchema<{
162
162
  requires_totp_mfa: undefined;
163
163
  }, "">;
164
164
  declare const usersCrudServerCreateSchema: yup$1.ObjectSchema<{
165
- country_code: string | null | undefined;
166
- display_name: string | null | undefined;
167
165
  primary_email: string | null | undefined;
168
- profile_image_url: string | null | undefined;
166
+ display_name: string | null | undefined;
169
167
  client_metadata: {} | null | undefined;
170
168
  client_read_only_metadata: {} | null | undefined;
171
169
  server_metadata: {} | null | undefined;
172
170
  is_anonymous: boolean | undefined;
171
+ country_code: string | null | undefined;
172
+ profile_image_url: string | null | undefined;
173
173
  password: string | null | undefined;
174
174
  primary_email_verified: boolean | undefined;
175
175
  primary_email_auth_enabled: boolean | undefined;
@@ -188,8 +188,8 @@ declare const usersCrudServerCreateSchema: yup$1.ObjectSchema<{
188
188
  totp_secret_base64: string | null | undefined;
189
189
  } & {
190
190
  oauth_providers: {
191
- id: string;
192
191
  email: string | null;
192
+ id: string;
193
193
  account_id: string;
194
194
  }[] | undefined;
195
195
  is_anonymous: boolean | undefined;
@@ -233,9 +233,9 @@ declare const usersCrud: CrudSchemaFromOptions<{
233
233
  client_metadata?: {} | null | undefined;
234
234
  client_read_only_metadata?: {} | null | undefined;
235
235
  server_metadata?: {} | null | undefined;
236
+ display_name: string;
236
237
  id: string;
237
238
  created_at_millis: number;
238
- display_name: string;
239
239
  profile_image_url: string | null;
240
240
  } | null;
241
241
  selected_team_id: string | null;
@@ -368,14 +368,14 @@ declare const usersCrud: CrudSchemaFromOptions<{
368
368
  };
369
369
  }, "">;
370
370
  serverCreateSchema: yup$1.ObjectSchema<{
371
- country_code: string | null | undefined;
372
- display_name: string | null | undefined;
373
371
  primary_email: string | null | undefined;
374
- profile_image_url: string | null | undefined;
372
+ display_name: string | null | undefined;
375
373
  client_metadata: {} | null | undefined;
376
374
  client_read_only_metadata: {} | null | undefined;
377
375
  server_metadata: {} | null | undefined;
378
376
  is_anonymous: boolean | undefined;
377
+ country_code: string | null | undefined;
378
+ profile_image_url: string | null | undefined;
379
379
  password: string | null | undefined;
380
380
  primary_email_verified: boolean | undefined;
381
381
  primary_email_auth_enabled: boolean | undefined;
@@ -394,8 +394,8 @@ declare const usersCrud: CrudSchemaFromOptions<{
394
394
  totp_secret_base64: string | null | undefined;
395
395
  } & {
396
396
  oauth_providers: {
397
- id: string;
398
397
  email: string | null;
398
+ id: string;
399
399
  account_id: string;
400
400
  }[] | undefined;
401
401
  is_anonymous: boolean | undefined;
@@ -467,9 +467,9 @@ declare const userCreatedWebhookEvent: WebhookEvent<yup$1.ObjectSchema<{
467
467
  client_metadata?: {} | null | undefined;
468
468
  client_read_only_metadata?: {} | null | undefined;
469
469
  server_metadata?: {} | null | undefined;
470
+ display_name: string;
470
471
  id: string;
471
472
  created_at_millis: number;
472
- display_name: string;
473
473
  profile_image_url: string | null;
474
474
  } | null;
475
475
  selected_team_id: string | null;
@@ -558,9 +558,9 @@ declare const userUpdatedWebhookEvent: WebhookEvent<yup$1.ObjectSchema<{
558
558
  client_metadata?: {} | null | undefined;
559
559
  client_read_only_metadata?: {} | null | undefined;
560
560
  server_metadata?: {} | null | undefined;
561
+ display_name: string;
561
562
  id: string;
562
563
  created_at_millis: number;
563
- display_name: string;
564
564
  profile_image_url: string | null;
565
565
  } | null;
566
566
  selected_team_id: string | null;
@@ -24,15 +24,15 @@ declare const planUsageRowSchema: yup$1.ObjectSchema<{
24
24
  declare const planUsageResponseSchema: yup$1.ObjectSchema<{
25
25
  owner_team_id: string;
26
26
  owner_team_display_name: string;
27
- plan_id: "free" | "team" | "growth";
27
+ plan_id: "team" | "free" | "growth";
28
28
  plan_display_name: string;
29
29
  period_start_millis: number;
30
30
  period_end_millis: number;
31
31
  next_plan_id: "team" | "growth" | null;
32
32
  rows: {
33
+ item_id: "dashboard_admins" | "auth_users" | "emails_per_month" | "analytics_timeout_seconds" | "analytics_events" | "session_replays" | "onboarding_call";
33
34
  display_name: string;
34
35
  kind: "current" | "metered" | "capability";
35
- item_id: "dashboard_admins" | "auth_users" | "emails_per_month" | "analytics_timeout_seconds" | "analytics_events" | "session_replays" | "onboarding_call";
36
36
  used: number | null;
37
37
  limit: number | null;
38
38
  remaining: number | null;
@@ -184,6 +184,7 @@ declare class HexclaveServerInterface extends HexclaveClientInterface {
184
184
  sendEmail(options: {
185
185
  userIds?: string[];
186
186
  allUsers?: true;
187
+ emails?: string[];
187
188
  themeId?: string | null | false;
188
189
  html?: string;
189
190
  subject?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"server-interface.d.ts","names":[],"sources":["../../src/interface/server-interface.ts"],"mappings":"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"}
1
+ {"version":3,"file":"server-interface.d.ts","names":[],"sources":["../../src/interface/server-interface.ts"],"mappings":"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"}
@@ -3,8 +3,8 @@ const require_chunk = require('../chunk-BE-pF4vm.js');
3
3
  let ___utils_errors_js = require("../utils/errors.js");
4
4
  let ___utils_objects_js = require("../utils/objects.js");
5
5
  let ___utils_results_js = require("../utils/results.js");
6
- let ___known_errors_js = require("../known-errors.js");
7
6
  let ___utils_urls_js = require("../utils/urls.js");
7
+ let ___known_errors_js = require("../known-errors.js");
8
8
  let ___sessions_js = require("../sessions.js");
9
9
  let __client_interface_js = require("./client-interface.js");
10
10
  let ___helpers_vault_client_side_js = require("../helpers/vault/client-side.js");
@@ -357,6 +357,7 @@ var HexclaveServerInterface = class extends __client_interface_js.HexclaveClient
357
357
  body: JSON.stringify({
358
358
  user_ids: options.userIds,
359
359
  all_users: options.allUsers,
360
+ emails: options.emails,
360
361
  theme_id: options.themeId,
361
362
  html: options.html,
362
363
  subject: options.subject,
@@ -1 +1 @@
1
- {"version":3,"file":"server-interface.js","names":["HexclaveClientInterface","Result","KnownErrors","HexclaveAssertionError","InternalSession"],"sources":["../../src/interface/server-interface.ts"],"sourcesContent":["import * as yup from \"yup\";\nimport { decryptValue, encryptValue, hashKey } from \"../helpers/vault/client-side\";\nimport { KnownErrors } from \"../known-errors\";\nimport { inlineProductSchema } from \"../schema-fields\";\nimport { AccessToken, InternalSession, RefreshToken } from \"../sessions\";\nimport { HexclaveAssertionError } from \"../utils/errors\";\nimport { filterUndefined } from \"../utils/objects\";\nimport { Result } from \"../utils/results\";\nimport { urlString } from \"../utils/urls\";\nimport {\n ClientInterfaceOptions,\n HexclaveClientInterface\n} from \"./client-interface\";\nimport { ConnectedAccountAccessTokenCrud, ConnectedAccountCrud } from \"./crud/connected-accounts\";\nimport { ContactChannelsCrud } from \"./crud/contact-channels\";\nimport { CurrentUserCrud } from \"./crud/current-user\";\nimport { ItemCrud } from \"./crud/items\";\nimport { NotificationPreferenceCrud } from \"./crud/notification-preferences\";\nimport { OAuthProviderCrud } from \"./crud/oauth-providers\";\nimport { ProjectPermissionsCrud } from \"./crud/project-permissions\";\nimport { SessionsCrud } from \"./crud/sessions\";\nimport { TeamInvitationCrud } from \"./crud/team-invitation\";\nimport { TeamMemberProfilesCrud } from \"./crud/team-member-profiles\";\nimport { TeamMembershipsCrud } from \"./crud/team-memberships\";\nimport { TeamPermissionsCrud } from \"./crud/team-permissions\";\nimport { TeamsCrud } from \"./crud/teams\";\nimport { UsersCrud } from \"./crud/users\";\n\nexport type ServerAuthApplicationOptions = (\n & ClientInterfaceOptions\n & (\n | {\n readonly secretServerKey: string,\n }\n | {\n readonly projectOwnerSession: InternalSession | (() => Promise<string | null>),\n }\n )\n);\n\nexport class HexclaveServerInterface extends HexclaveClientInterface {\n constructor(public override options: ServerAuthApplicationOptions) {\n super(options);\n }\n\n protected async sendServerRequest(path: string, options: RequestInit, session: InternalSession | null, requestType: \"server\" | \"admin\" = \"server\") {\n return await this.sendClientRequest(\n path,\n {\n ...options,\n headers: {\n // Hexclave rebrand: emit x-hexclave-* request header; the backend proxy dual-accepts both names.\n \"x-hexclave-secret-server-key\": \"secretServerKey\" in this.options ? this.options.secretServerKey : \"\",\n ...options.headers,\n },\n },\n session,\n requestType,\n );\n }\n\n override async getCustomerBilling(\n customerType: \"user\" | \"team\",\n customerId: string,\n session: InternalSession | null,\n ): Promise<{\n has_customer: boolean,\n default_payment_method: {\n id: string,\n brand: string | null,\n last4: string | null,\n exp_month: number | null,\n exp_year: number | null,\n } | null,\n }> {\n const response = await this.sendServerRequest(\n urlString`/payments/billing/${customerType}/${customerId}`,\n {},\n session,\n );\n return await response.json();\n }\n\n override async createCustomerPaymentMethodSetupIntent(\n customerType: \"user\" | \"team\",\n customerId: string,\n session: InternalSession | null,\n ): Promise<{\n client_secret: string,\n stripe_account_id: string,\n }> {\n const response = await this.sendServerRequest(\n urlString`/payments/payment-method/${customerType}/${customerId}/setup-intent`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n session,\n );\n return await response.json();\n }\n\n override async setDefaultCustomerPaymentMethodFromSetupIntent(\n customerType: \"user\" | \"team\",\n customerId: string,\n setupIntentId: string,\n session: InternalSession | null,\n ): Promise<{\n default_payment_method: {\n id: string,\n brand: string | null,\n last4: string | null,\n exp_month: number | null,\n exp_year: number | null,\n },\n }> {\n const response = await this.sendServerRequest(\n urlString`/payments/payment-method/${customerType}/${customerId}/set-default`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n setup_intent_id: setupIntentId,\n }),\n },\n session,\n );\n return await response.json();\n }\n\n\n protected async sendServerRequestAndCatchKnownError<E extends typeof KnownErrors[keyof KnownErrors]>(\n path: string,\n requestOptions: RequestInit,\n tokenStoreOrNull: InternalSession | null,\n errorsToCatch: readonly E[],\n ): Promise<Result<\n Response & {\n usedTokens: {\n accessToken: AccessToken,\n refreshToken: RefreshToken | null,\n } | null,\n },\n InstanceType<E>\n >> {\n try {\n return Result.ok(await this.sendServerRequest(path, requestOptions, tokenStoreOrNull));\n } catch (e) {\n for (const errorType of errorsToCatch) {\n if (errorType.isInstance(e)) {\n return Result.error(e as InstanceType<E>);\n }\n }\n throw e;\n }\n }\n\n async createServerUser(data: UsersCrud['Server']['Create']): Promise<UsersCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n \"/users\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async getServerUserByToken(session: InternalSession): Promise<CurrentUserCrud['Server']['Read'] | null> {\n const responseOrError = await this.sendServerRequestAndCatchKnownError(\n \"/users/me\",\n {},\n session,\n [KnownErrors.CannotGetOwnUserWithoutUser],\n );\n if (responseOrError.status === \"error\") {\n if (KnownErrors.CannotGetOwnUserWithoutUser.isInstance(responseOrError.error)) {\n return null;\n } else {\n throw new HexclaveAssertionError(\"Unexpected uncaught error\", { cause: responseOrError.error });\n }\n }\n const response = responseOrError.data;\n const user: CurrentUserCrud['Server']['Read'] = await response.json();\n if (!(user as any)) throw new HexclaveAssertionError(\"User endpoint returned null; this should never happen\");\n return user;\n }\n\n async getServerUserById(userId: string): Promise<Result<UsersCrud['Server']['Read']>> {\n const responseOrError = await this.sendServerRequestAndCatchKnownError(\n urlString`/users/${userId}`,\n {},\n null,\n [KnownErrors.UserNotFound],\n );\n if (responseOrError.status === \"error\") {\n return Result.error(responseOrError.error);\n }\n const user: UsersCrud['Server']['Read'] = await responseOrError.data.json();\n return Result.ok(user);\n }\n\n async listServerTeamInvitations(options: {\n teamId: string,\n }): Promise<TeamInvitationCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(\n urlString`/team-invitations?team_id=${options.teamId}`,\n {},\n null,\n );\n const result = await response.json() as TeamInvitationCrud['Server']['List'];\n return result.items;\n }\n\n async revokeServerTeamInvitation(invitationId: string, teamId: string) {\n await this.sendServerRequest(\n urlString`/team-invitations/${invitationId}?team_id=${teamId}`,\n { method: \"DELETE\" },\n null,\n );\n }\n\n async listServerTeamMemberProfiles(\n options: {\n teamId: string,\n },\n ): Promise<TeamMemberProfilesCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(\n urlString`/team-member-profiles?team_id=${options.teamId}`,\n {},\n null,\n );\n const result = await response.json() as TeamMemberProfilesCrud['Server']['List'];\n return result.items;\n }\n\n async getServerTeamMemberProfile(\n options: {\n teamId: string,\n userId: string,\n },\n ): Promise<TeamMemberProfilesCrud['Client']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/team-member-profiles/${options.teamId}/${options.userId}`,\n {},\n null,\n );\n return await response.json();\n }\n\n async listServerTeamPermissions(\n options: {\n userId?: string,\n teamId?: string,\n recursive: boolean,\n },\n session: InternalSession | null,\n ): Promise<TeamPermissionsCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(\n `/team-permissions?${new URLSearchParams(filterUndefined({\n user_id: options.userId,\n team_id: options.teamId,\n recursive: options.recursive.toString(),\n }))}`,\n {},\n session,\n );\n const result = await response.json() as TeamPermissionsCrud['Server']['List'];\n return result.items;\n }\n\n async listServerProjectPermissions(\n options: {\n userId?: string,\n recursive: boolean,\n },\n session: InternalSession | null,\n ): Promise<ProjectPermissionsCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(\n `/project-permissions?${new URLSearchParams(filterUndefined({\n user_id: options.userId,\n recursive: options.recursive.toString(),\n }))}`,\n {},\n session,\n );\n const result = await response.json() as ProjectPermissionsCrud['Server']['List'];\n return result.items;\n }\n\n async listServerUsers(options: (\n & {\n cursor?: string,\n limit?: number,\n orderBy?: 'signedUpAt' | 'lastActiveAt',\n desc?: boolean,\n query?: string,\n excludedEmailDomains?: string[],\n includeRestricted?: boolean,\n teamId?: string,\n }\n & (\n {\n includeAnonymous?: boolean,\n onlyAnonymous?: false,\n }\n | {\n includeAnonymous: true,\n onlyAnonymous: true,\n }\n )\n )): Promise<UsersCrud['Server']['List']> {\n const searchParams = new URLSearchParams(filterUndefined({\n cursor: options.cursor,\n limit: options.limit?.toString(),\n desc: options.desc?.toString(),\n team_id: options.teamId,\n ...options.orderBy ? {\n order_by: {\n signedUpAt: \"signed_up_at\",\n lastActiveAt: \"last_active_at\",\n }[options.orderBy],\n } : {},\n ...options.query ? {\n query: options.query,\n } : {},\n ...options.excludedEmailDomains && options.excludedEmailDomains.length > 0 ? {\n excluded_email_domains: options.excludedEmailDomains.join(\",\"), // backend expects comma-separated list of domains.\n } : {},\n ...options.includeRestricted ? {\n include_restricted: 'true',\n } : {},\n ...options.includeAnonymous ? {\n include_anonymous: 'true',\n } : {},\n ...options.onlyAnonymous ? {\n only_anonymous: 'true',\n } : {},\n }));\n const response = await this.sendServerRequest(\"/users?\" + searchParams.toString(), {}, null);\n return await response.json();\n }\n\n async listServerTeams(options?: {\n userId?: string,\n }): Promise<TeamsCrud['Server']['Read'][]> {\n const result = await this.listServerTeamsPaginated(options);\n return result.items;\n }\n\n async listServerTeamsPaginated(options?: {\n userId?: string,\n orderBy?: 'createdAt',\n desc?: boolean,\n cursor?: string,\n limit?: number,\n query?: string,\n }): Promise<TeamsCrud['Server']['List']> {\n const response = await this.sendServerRequest(\n `/teams?${new URLSearchParams(filterUndefined({\n user_id: options?.userId,\n // SDK option uses camelCase `createdAt`; backend uses snake_case.\n order_by: options?.orderBy === 'createdAt' ? 'created_at' : options?.orderBy,\n desc: options?.desc !== undefined ? String(options.desc) : undefined,\n cursor: options?.cursor,\n limit: options?.limit?.toString(),\n query: options?.query,\n }))}`,\n {},\n null\n );\n return await response.json() as TeamsCrud['Server']['List'];\n }\n\n async getServerTeam(teamId: string): Promise<TeamsCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n `/teams/${teamId}`,\n {},\n null\n );\n return await response.json();\n }\n\n async listServerTeamUsers(teamId: string): Promise<UsersCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(`/users?team_id=${teamId}`, {}, null);\n const result = await response.json() as UsersCrud['Server']['List'];\n return result.items;\n }\n\n /* when passing a session, the user will be added to the team */\n async createServerTeam(data: TeamsCrud['Server']['Create']): Promise<TeamsCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n \"/teams\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null\n );\n return await response.json();\n }\n\n async updateServerTeam(teamId: string, data: TeamsCrud['Server']['Update']): Promise<TeamsCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/teams/${teamId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async deleteServerTeam(teamId: string): Promise<void> {\n await this.sendServerRequest(\n urlString`/teams/${teamId}`,\n { method: \"DELETE\" },\n null,\n );\n }\n\n async addServerUserToTeam(options: {\n userId: string,\n teamId: string,\n }): Promise<TeamMembershipsCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/team-memberships/${options.teamId}/${options.userId}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n return await response.json();\n }\n\n async removeServerUserFromTeam(options: {\n userId: string,\n teamId: string,\n }) {\n await this.sendServerRequest(\n urlString`/team-memberships/${options.teamId}/${options.userId}`,\n {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n }\n\n async listServerUserTeamInvitations(userId: string): Promise<TeamInvitationCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(\n \"/team-invitations?\" + new URLSearchParams({ user_id: userId }),\n {},\n null,\n );\n const result = await response.json() as TeamInvitationCrud['Server']['List'];\n return result.items;\n }\n\n async acceptServerTeamInvitationById(\n invitationId: string,\n userId: string,\n ) {\n await this.sendServerRequest(\n urlString`/team-invitations/${invitationId}/accept` + \"?\" + new URLSearchParams({ user_id: userId }),\n { method: \"POST\" },\n null,\n );\n }\n\n async updateServerUser(userId: string, update: UsersCrud['Server']['Update']): Promise<UsersCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/users/${userId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(update),\n },\n null,\n );\n return await response.json();\n }\n\n async createServerProviderAccessToken(\n userId: string,\n provider: string,\n scope: string,\n ): Promise<ConnectedAccountAccessTokenCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/connected-accounts/${userId}/${provider}/access-token`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ scope }),\n },\n null,\n );\n return await response.json();\n }\n\n /**\n * Get access token for a specific connected account by provider ID and provider account ID.\n * This is the preferred method when dealing with multiple accounts of the same provider.\n */\n async createServerProviderAccessTokenByAccount(\n userId: string,\n providerId: string,\n providerAccountId: string,\n scope: string,\n ): Promise<ConnectedAccountAccessTokenCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/connected-accounts/${userId}/${providerId}/${providerAccountId}/access-token`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ scope }),\n },\n null,\n );\n return await response.json();\n }\n\n /**\n * List all connected accounts for a user.\n */\n async listServerConnectedAccounts(\n userId: string,\n ): Promise<ConnectedAccountCrud['Server']['List']> {\n const response = await this.sendServerRequest(\n urlString`/connected-accounts/${userId}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async createServerUserSession(userId: string, expiresInMillis: number, isImpersonation: boolean): Promise<{ accessToken: string, refreshToken: string }> {\n const response = await this.sendServerRequest(\n \"/auth/sessions\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n user_id: userId,\n expires_in_millis: expiresInMillis,\n is_impersonation: isImpersonation,\n }),\n },\n null,\n );\n const result = await response.json();\n return {\n accessToken: result.access_token,\n refreshToken: result.refresh_token,\n };\n }\n\n async leaveServerTeam(\n options: {\n teamId: string,\n userId: string,\n },\n ) {\n await this.sendClientRequest(\n urlString`/team-memberships/${options.teamId}/${options.userId}`,\n {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n }\n\n async updateServerTeamMemberProfile(options: {\n teamId: string,\n userId: string,\n profile: TeamMemberProfilesCrud['Server']['Update'],\n }) {\n await this.sendServerRequest(\n urlString`/team-member-profiles/${options.teamId}/${options.userId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(options.profile),\n },\n null,\n );\n }\n\n async grantServerTeamUserPermission(teamId: string, userId: string, permissionId: string) {\n await this.sendServerRequest(\n urlString`/team-permissions/${teamId}/${userId}/${permissionId}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n }\n\n async grantServerProjectPermission(userId: string, permissionId: string) {\n await this.sendServerRequest(\n urlString`/project-permissions/${userId}/${permissionId}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n }\n\n async revokeServerTeamUserPermission(teamId: string, userId: string, permissionId: string) {\n await this.sendServerRequest(\n urlString`/team-permissions/${teamId}/${userId}/${permissionId}`,\n {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n }\n\n async revokeServerProjectPermission(userId: string, permissionId: string) {\n await this.sendServerRequest(\n urlString`/project-permissions/${userId}/${permissionId}`,\n {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n }\n\n async deleteServerUser(userId: string) {\n await this.sendServerRequest(\n urlString`/users/${userId}`,\n {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n }\n\n async createServerContactChannel(\n data: ContactChannelsCrud['Server']['Create'],\n ): Promise<ContactChannelsCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n \"/contact-channels\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async updateServerContactChannel(\n userId: string,\n contactChannelId: string,\n data: ContactChannelsCrud['Server']['Update'],\n ): Promise<ContactChannelsCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/contact-channels/${userId}/${contactChannelId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async deleteServerContactChannel(\n userId: string,\n contactChannelId: string,\n ): Promise<void> {\n await this.sendServerRequest(\n urlString`/contact-channels/${userId}/${contactChannelId}`,\n {\n method: \"DELETE\",\n },\n null,\n );\n }\n\n async listServerContactChannels(\n userId: string,\n ): Promise<ContactChannelsCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(\n urlString`/contact-channels?user_id=${userId}`,\n {\n method: \"GET\",\n },\n null,\n );\n const json = await response.json() as ContactChannelsCrud['Server']['List'];\n return json.items;\n }\n\n async listServerNotificationCategories(\n userId: string,\n ): Promise<NotificationPreferenceCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(\n urlString`/emails/notification-preference/${userId}`,\n {\n method: \"GET\",\n },\n null,\n );\n const json = await response.json() as NotificationPreferenceCrud['Server']['List'];\n return json.items;\n }\n\n async setServerNotificationsEnabled(\n userId: string,\n notificationCategoryId: string,\n enabled: boolean,\n ): Promise<void> {\n await this.sendServerRequest(\n urlString`/emails/notification-preference/${userId}/${notificationCategoryId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n enabled,\n }),\n },\n null,\n );\n }\n\n async sendServerContactChannelVerificationEmail(\n userId: string,\n contactChannelId: string,\n callbackUrl: string,\n ): Promise<void> {\n await this.sendServerRequest(\n urlString`/contact-channels/${userId}/${contactChannelId}/send-verification-code`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ callback_url: callbackUrl }),\n },\n null,\n );\n }\n\n\n async listServerSessions(userId: string): Promise<SessionsCrud['Server']['List']> {\n const response = await this.sendServerRequest(\n urlString`/auth/sessions?user_id=${userId}`,\n {\n method: \"GET\",\n },\n null,\n );\n return await response.json();\n }\n\n async deleteServerSession(sessionId: string) {\n await this.sendServerRequest(\n urlString`/auth/sessions/${sessionId}`,\n {\n method: \"DELETE\",\n },\n null,\n );\n }\n\n\n async sendServerTeamInvitation(options: {\n email: string,\n teamId: string,\n callbackUrl: string,\n }): Promise<void> {\n await this.sendServerRequest(\n \"/team-invitations/send-code\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n email: options.email,\n team_id: options.teamId,\n callback_url: options.callbackUrl,\n }),\n },\n null,\n );\n }\n\n async updatePassword(\n options: { oldPassword: string, newPassword: string },\n ): Promise<KnownErrors[\"PasswordConfirmationMismatch\"] | KnownErrors[\"PasswordRequirementsNotMet\"] | undefined> {\n const res = await this.sendServerRequestAndCatchKnownError(\n \"/auth/password/update\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n old_password: options.oldPassword,\n new_password: options.newPassword,\n }),\n },\n null,\n [KnownErrors.PasswordConfirmationMismatch, KnownErrors.PasswordRequirementsNotMet]\n );\n\n if (res.status === \"error\") {\n return res.error;\n }\n }\n\n // OAuth Providers CRUD operations\n async createServerOAuthProvider(\n data: OAuthProviderCrud['Server']['Create'],\n ): Promise<OAuthProviderCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n \"/oauth-providers\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n\n async listServerOAuthProviders(\n options: {\n user_id?: string,\n } = {},\n ): Promise<OAuthProviderCrud['Server']['Read'][]> {\n const queryParams = new URLSearchParams(filterUndefined(options));\n const response = await this.sendServerRequest(\n `/oauth-providers${queryParams.toString() ? `?${queryParams.toString()}` : ''}`,\n {\n method: \"GET\",\n },\n null,\n );\n const result = await response.json();\n return result.items;\n }\n\n async updateServerOAuthProvider(\n userId: string,\n providerId: string,\n data: OAuthProviderCrud['Server']['Update'],\n ): Promise<OAuthProviderCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/oauth-providers/${userId}/${providerId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async deleteServerOAuthProvider(\n userId: string,\n providerId: string,\n ): Promise<void> {\n const response = await this.sendServerRequest(\n urlString`/oauth-providers/${userId}/${providerId}`,\n {\n method: \"DELETE\",\n },\n null,\n );\n return await response.json();\n }\n\n async sendEmail(options: {\n userIds?: string[],\n allUsers?: true,\n themeId?: string | null | false,\n html?: string,\n subject?: string,\n notificationCategoryName?: string,\n templateId?: string,\n variables?: Record<string, any>,\n draftId?: string,\n scheduledAt?: Date,\n }): Promise<Result<void, KnownErrors[\"RequiresCustomEmailServer\"] | KnownErrors[\"SchemaError\"] | KnownErrors[\"UserIdDoesNotExist\"]>> {\n const res = await this.sendServerRequest(\n \"/emails/send-email\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n user_ids: options.userIds,\n all_users: options.allUsers,\n theme_id: options.themeId,\n html: options.html,\n subject: options.subject,\n notification_category_name: options.notificationCategoryName,\n template_id: options.templateId,\n variables: options.variables,\n draft_id: options.draftId,\n scheduled_at_millis: options.scheduledAt?.getTime(),\n }),\n },\n null,\n );\n return Result.ok(undefined);\n }\n\n async getEmailDeliveryInfo(): Promise<{\n stats: {\n hour: { sent: number, bounced: number, marked_as_spam: number },\n day: { sent: number, bounced: number, marked_as_spam: number },\n week: { sent: number, bounced: number, marked_as_spam: number },\n month: { sent: number, bounced: number, marked_as_spam: number },\n },\n capacity: {\n rate_per_second: number,\n boost_multiplier: number,\n penalty_factor: number,\n is_boost_active: boolean,\n boost_expires_at: string | null,\n },\n }> {\n const res = await this.sendServerRequest(\n \"/emails/delivery-info\",\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n },\n null,\n );\n return await res.json();\n }\n\n async activateEmailCapacityBoost(): Promise<{ expires_at: string }> {\n const res = await this.sendServerRequest(\n \"/emails/capacity-boost\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({}),\n },\n null,\n );\n return await res.json();\n }\n\n async updateItemQuantity(\n options: (\n { itemId: string, userId: string } |\n { itemId: string, teamId: string } |\n { itemId: string, customCustomerId: string }\n ),\n data: ItemCrud['Server']['Update'],\n ): Promise<void> {\n let customerType: \"user\" | \"team\" | \"custom\";\n let customerId: string;\n const itemId: string = options.itemId;\n\n if (\"userId\" in options) {\n customerType = \"user\";\n customerId = options.userId;\n } else if (\"teamId\" in options) {\n customerType = \"team\";\n customerId = options.teamId;\n } else if (\"customCustomerId\" in options) {\n customerType = \"custom\";\n customerId = options.customCustomerId;\n } else {\n throw new HexclaveAssertionError(\"updateItemQuantity requires one of userId, teamId, or customCustomerId\");\n }\n\n const queryParams = new URLSearchParams({ allow_negative: (data.allow_negative ?? false).toString() });\n await this.sendServerRequest(\n `/payments/items/${customerType}/${customerId}/${itemId}/update-quantity?${queryParams.toString()}`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ delta: data.delta, expires_at: data.expires_at, description: data.description }),\n },\n null\n );\n }\n\n async grantProduct(\n options: {\n customerType: \"user\" | \"team\" | \"custom\",\n customerId: string,\n productId?: string,\n product?: yup.InferType<typeof inlineProductSchema>,\n quantity?: number,\n },\n ): Promise<void> {\n if (!options.productId && !options.product) {\n throw new HexclaveAssertionError(\"grantProduct requires either productId or product\");\n }\n if (options.productId && options.product) {\n throw new HexclaveAssertionError(\"grantProduct should not receive both productId and product\");\n }\n const body = filterUndefined({\n product_id: options.productId,\n product_inline: options.product,\n quantity: options.quantity,\n });\n await this.sendServerRequest(\n urlString`/payments/products/${options.customerType}/${options.customerId}`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n },\n null,\n );\n }\n\n async getDataVaultStoreValue(secret: string, storeId: string, key: string) {\n const hashedKey = await hashKey(secret, key);\n const response = await this.sendServerRequestAndCatchKnownError(\n `/data-vault/stores/${storeId}/get`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ hashed_key: hashedKey }),\n },\n null,\n [KnownErrors.DataVaultStoreHashedKeyDoesNotExist] as const,\n );\n if (response.status === \"error\") {\n if (KnownErrors.DataVaultStoreHashedKeyDoesNotExist.isInstance(response.error)) {\n return null;\n } else {\n throw new HexclaveAssertionError(\"Unexpected uncaught error\", { cause: response.error });\n }\n }\n const json = await response.data.json();\n const encryptedValue = json.encrypted_value;\n if (typeof encryptedValue !== \"string\") throw new HexclaveAssertionError(\"encrypted_value is not a string\", { type: typeof encryptedValue });\n return await decryptValue(secret, key, encryptedValue);\n }\n\n async setDataVaultStoreValue(secret: string, storeId: string, key: string, value: string) {\n const hashedKey = await hashKey(secret, key);\n const encryptedValue = await encryptValue(secret, key, value);\n await this.sendServerRequest(\n `/data-vault/stores/${storeId}/set`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ hashed_key: hashedKey, encrypted_value: encryptedValue }),\n },\n null,\n );\n }\n\n async initiateServerPasskeyRegistration(userId: string): Promise<Result<{ options_json: any, code: string }, KnownErrors[]>> {\n // Create a temporary session for this user to use for passkey registration\n // TODO instead of creating a new session, this should just call the endpoint in a way in which it doesn't require a session\n // (currently this shows up on session history etc... not ideal)\n const { accessToken, refreshToken } = await this.createServerUserSession(userId, 60000 * 2, false); // 2 minute session\n const tempSession = new InternalSession({\n accessToken,\n refreshToken,\n refreshAccessTokenCallback: async () => null, // No refresh for temporary sessions\n });\n\n // Use the existing initiatePasskeyRegistration method with the temporary session\n return await this.initiatePasskeyRegistration({}, tempSession);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"server-interface.js","names":["HexclaveClientInterface","Result","KnownErrors","HexclaveAssertionError","InternalSession"],"sources":["../../src/interface/server-interface.ts"],"sourcesContent":["import * as yup from \"yup\";\nimport { decryptValue, encryptValue, hashKey } from \"../helpers/vault/client-side\";\nimport { KnownErrors } from \"../known-errors\";\nimport { inlineProductSchema } from \"../schema-fields\";\nimport { AccessToken, InternalSession, RefreshToken } from \"../sessions\";\nimport { HexclaveAssertionError } from \"../utils/errors\";\nimport { filterUndefined } from \"../utils/objects\";\nimport { Result } from \"../utils/results\";\nimport { urlString } from \"../utils/urls\";\nimport {\n ClientInterfaceOptions,\n HexclaveClientInterface\n} from \"./client-interface\";\nimport { ConnectedAccountAccessTokenCrud, ConnectedAccountCrud } from \"./crud/connected-accounts\";\nimport { ContactChannelsCrud } from \"./crud/contact-channels\";\nimport { CurrentUserCrud } from \"./crud/current-user\";\nimport { ItemCrud } from \"./crud/items\";\nimport { NotificationPreferenceCrud } from \"./crud/notification-preferences\";\nimport { OAuthProviderCrud } from \"./crud/oauth-providers\";\nimport { ProjectPermissionsCrud } from \"./crud/project-permissions\";\nimport { SessionsCrud } from \"./crud/sessions\";\nimport { TeamInvitationCrud } from \"./crud/team-invitation\";\nimport { TeamMemberProfilesCrud } from \"./crud/team-member-profiles\";\nimport { TeamMembershipsCrud } from \"./crud/team-memberships\";\nimport { TeamPermissionsCrud } from \"./crud/team-permissions\";\nimport { TeamsCrud } from \"./crud/teams\";\nimport { UsersCrud } from \"./crud/users\";\n\nexport type ServerAuthApplicationOptions = (\n & ClientInterfaceOptions\n & (\n | {\n readonly secretServerKey: string,\n }\n | {\n readonly projectOwnerSession: InternalSession | (() => Promise<string | null>),\n }\n )\n);\n\nexport class HexclaveServerInterface extends HexclaveClientInterface {\n constructor(public override options: ServerAuthApplicationOptions) {\n super(options);\n }\n\n protected async sendServerRequest(path: string, options: RequestInit, session: InternalSession | null, requestType: \"server\" | \"admin\" = \"server\") {\n return await this.sendClientRequest(\n path,\n {\n ...options,\n headers: {\n // Hexclave rebrand: emit x-hexclave-* request header; the backend proxy dual-accepts both names.\n \"x-hexclave-secret-server-key\": \"secretServerKey\" in this.options ? this.options.secretServerKey : \"\",\n ...options.headers,\n },\n },\n session,\n requestType,\n );\n }\n\n override async getCustomerBilling(\n customerType: \"user\" | \"team\",\n customerId: string,\n session: InternalSession | null,\n ): Promise<{\n has_customer: boolean,\n default_payment_method: {\n id: string,\n brand: string | null,\n last4: string | null,\n exp_month: number | null,\n exp_year: number | null,\n } | null,\n }> {\n const response = await this.sendServerRequest(\n urlString`/payments/billing/${customerType}/${customerId}`,\n {},\n session,\n );\n return await response.json();\n }\n\n override async createCustomerPaymentMethodSetupIntent(\n customerType: \"user\" | \"team\",\n customerId: string,\n session: InternalSession | null,\n ): Promise<{\n client_secret: string,\n stripe_account_id: string,\n }> {\n const response = await this.sendServerRequest(\n urlString`/payments/payment-method/${customerType}/${customerId}/setup-intent`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n session,\n );\n return await response.json();\n }\n\n override async setDefaultCustomerPaymentMethodFromSetupIntent(\n customerType: \"user\" | \"team\",\n customerId: string,\n setupIntentId: string,\n session: InternalSession | null,\n ): Promise<{\n default_payment_method: {\n id: string,\n brand: string | null,\n last4: string | null,\n exp_month: number | null,\n exp_year: number | null,\n },\n }> {\n const response = await this.sendServerRequest(\n urlString`/payments/payment-method/${customerType}/${customerId}/set-default`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n setup_intent_id: setupIntentId,\n }),\n },\n session,\n );\n return await response.json();\n }\n\n\n protected async sendServerRequestAndCatchKnownError<E extends typeof KnownErrors[keyof KnownErrors]>(\n path: string,\n requestOptions: RequestInit,\n tokenStoreOrNull: InternalSession | null,\n errorsToCatch: readonly E[],\n ): Promise<Result<\n Response & {\n usedTokens: {\n accessToken: AccessToken,\n refreshToken: RefreshToken | null,\n } | null,\n },\n InstanceType<E>\n >> {\n try {\n return Result.ok(await this.sendServerRequest(path, requestOptions, tokenStoreOrNull));\n } catch (e) {\n for (const errorType of errorsToCatch) {\n if (errorType.isInstance(e)) {\n return Result.error(e as InstanceType<E>);\n }\n }\n throw e;\n }\n }\n\n async createServerUser(data: UsersCrud['Server']['Create']): Promise<UsersCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n \"/users\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async getServerUserByToken(session: InternalSession): Promise<CurrentUserCrud['Server']['Read'] | null> {\n const responseOrError = await this.sendServerRequestAndCatchKnownError(\n \"/users/me\",\n {},\n session,\n [KnownErrors.CannotGetOwnUserWithoutUser],\n );\n if (responseOrError.status === \"error\") {\n if (KnownErrors.CannotGetOwnUserWithoutUser.isInstance(responseOrError.error)) {\n return null;\n } else {\n throw new HexclaveAssertionError(\"Unexpected uncaught error\", { cause: responseOrError.error });\n }\n }\n const response = responseOrError.data;\n const user: CurrentUserCrud['Server']['Read'] = await response.json();\n if (!(user as any)) throw new HexclaveAssertionError(\"User endpoint returned null; this should never happen\");\n return user;\n }\n\n async getServerUserById(userId: string): Promise<Result<UsersCrud['Server']['Read']>> {\n const responseOrError = await this.sendServerRequestAndCatchKnownError(\n urlString`/users/${userId}`,\n {},\n null,\n [KnownErrors.UserNotFound],\n );\n if (responseOrError.status === \"error\") {\n return Result.error(responseOrError.error);\n }\n const user: UsersCrud['Server']['Read'] = await responseOrError.data.json();\n return Result.ok(user);\n }\n\n async listServerTeamInvitations(options: {\n teamId: string,\n }): Promise<TeamInvitationCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(\n urlString`/team-invitations?team_id=${options.teamId}`,\n {},\n null,\n );\n const result = await response.json() as TeamInvitationCrud['Server']['List'];\n return result.items;\n }\n\n async revokeServerTeamInvitation(invitationId: string, teamId: string) {\n await this.sendServerRequest(\n urlString`/team-invitations/${invitationId}?team_id=${teamId}`,\n { method: \"DELETE\" },\n null,\n );\n }\n\n async listServerTeamMemberProfiles(\n options: {\n teamId: string,\n },\n ): Promise<TeamMemberProfilesCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(\n urlString`/team-member-profiles?team_id=${options.teamId}`,\n {},\n null,\n );\n const result = await response.json() as TeamMemberProfilesCrud['Server']['List'];\n return result.items;\n }\n\n async getServerTeamMemberProfile(\n options: {\n teamId: string,\n userId: string,\n },\n ): Promise<TeamMemberProfilesCrud['Client']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/team-member-profiles/${options.teamId}/${options.userId}`,\n {},\n null,\n );\n return await response.json();\n }\n\n async listServerTeamPermissions(\n options: {\n userId?: string,\n teamId?: string,\n recursive: boolean,\n },\n session: InternalSession | null,\n ): Promise<TeamPermissionsCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(\n `/team-permissions?${new URLSearchParams(filterUndefined({\n user_id: options.userId,\n team_id: options.teamId,\n recursive: options.recursive.toString(),\n }))}`,\n {},\n session,\n );\n const result = await response.json() as TeamPermissionsCrud['Server']['List'];\n return result.items;\n }\n\n async listServerProjectPermissions(\n options: {\n userId?: string,\n recursive: boolean,\n },\n session: InternalSession | null,\n ): Promise<ProjectPermissionsCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(\n `/project-permissions?${new URLSearchParams(filterUndefined({\n user_id: options.userId,\n recursive: options.recursive.toString(),\n }))}`,\n {},\n session,\n );\n const result = await response.json() as ProjectPermissionsCrud['Server']['List'];\n return result.items;\n }\n\n async listServerUsers(options: (\n & {\n cursor?: string,\n limit?: number,\n orderBy?: 'signedUpAt' | 'lastActiveAt',\n desc?: boolean,\n query?: string,\n excludedEmailDomains?: string[],\n includeRestricted?: boolean,\n teamId?: string,\n }\n & (\n {\n includeAnonymous?: boolean,\n onlyAnonymous?: false,\n }\n | {\n includeAnonymous: true,\n onlyAnonymous: true,\n }\n )\n )): Promise<UsersCrud['Server']['List']> {\n const searchParams = new URLSearchParams(filterUndefined({\n cursor: options.cursor,\n limit: options.limit?.toString(),\n desc: options.desc?.toString(),\n team_id: options.teamId,\n ...options.orderBy ? {\n order_by: {\n signedUpAt: \"signed_up_at\",\n lastActiveAt: \"last_active_at\",\n }[options.orderBy],\n } : {},\n ...options.query ? {\n query: options.query,\n } : {},\n ...options.excludedEmailDomains && options.excludedEmailDomains.length > 0 ? {\n excluded_email_domains: options.excludedEmailDomains.join(\",\"), // backend expects comma-separated list of domains.\n } : {},\n ...options.includeRestricted ? {\n include_restricted: 'true',\n } : {},\n ...options.includeAnonymous ? {\n include_anonymous: 'true',\n } : {},\n ...options.onlyAnonymous ? {\n only_anonymous: 'true',\n } : {},\n }));\n const response = await this.sendServerRequest(\"/users?\" + searchParams.toString(), {}, null);\n return await response.json();\n }\n\n async listServerTeams(options?: {\n userId?: string,\n }): Promise<TeamsCrud['Server']['Read'][]> {\n const result = await this.listServerTeamsPaginated(options);\n return result.items;\n }\n\n async listServerTeamsPaginated(options?: {\n userId?: string,\n orderBy?: 'createdAt',\n desc?: boolean,\n cursor?: string,\n limit?: number,\n query?: string,\n }): Promise<TeamsCrud['Server']['List']> {\n const response = await this.sendServerRequest(\n `/teams?${new URLSearchParams(filterUndefined({\n user_id: options?.userId,\n // SDK option uses camelCase `createdAt`; backend uses snake_case.\n order_by: options?.orderBy === 'createdAt' ? 'created_at' : options?.orderBy,\n desc: options?.desc !== undefined ? String(options.desc) : undefined,\n cursor: options?.cursor,\n limit: options?.limit?.toString(),\n query: options?.query,\n }))}`,\n {},\n null\n );\n return await response.json() as TeamsCrud['Server']['List'];\n }\n\n async getServerTeam(teamId: string): Promise<TeamsCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n `/teams/${teamId}`,\n {},\n null\n );\n return await response.json();\n }\n\n async listServerTeamUsers(teamId: string): Promise<UsersCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(`/users?team_id=${teamId}`, {}, null);\n const result = await response.json() as UsersCrud['Server']['List'];\n return result.items;\n }\n\n /* when passing a session, the user will be added to the team */\n async createServerTeam(data: TeamsCrud['Server']['Create']): Promise<TeamsCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n \"/teams\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null\n );\n return await response.json();\n }\n\n async updateServerTeam(teamId: string, data: TeamsCrud['Server']['Update']): Promise<TeamsCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/teams/${teamId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async deleteServerTeam(teamId: string): Promise<void> {\n await this.sendServerRequest(\n urlString`/teams/${teamId}`,\n { method: \"DELETE\" },\n null,\n );\n }\n\n async addServerUserToTeam(options: {\n userId: string,\n teamId: string,\n }): Promise<TeamMembershipsCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/team-memberships/${options.teamId}/${options.userId}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n return await response.json();\n }\n\n async removeServerUserFromTeam(options: {\n userId: string,\n teamId: string,\n }) {\n await this.sendServerRequest(\n urlString`/team-memberships/${options.teamId}/${options.userId}`,\n {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n }\n\n async listServerUserTeamInvitations(userId: string): Promise<TeamInvitationCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(\n \"/team-invitations?\" + new URLSearchParams({ user_id: userId }),\n {},\n null,\n );\n const result = await response.json() as TeamInvitationCrud['Server']['List'];\n return result.items;\n }\n\n async acceptServerTeamInvitationById(\n invitationId: string,\n userId: string,\n ) {\n await this.sendServerRequest(\n urlString`/team-invitations/${invitationId}/accept` + \"?\" + new URLSearchParams({ user_id: userId }),\n { method: \"POST\" },\n null,\n );\n }\n\n async updateServerUser(userId: string, update: UsersCrud['Server']['Update']): Promise<UsersCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/users/${userId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(update),\n },\n null,\n );\n return await response.json();\n }\n\n async createServerProviderAccessToken(\n userId: string,\n provider: string,\n scope: string,\n ): Promise<ConnectedAccountAccessTokenCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/connected-accounts/${userId}/${provider}/access-token`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ scope }),\n },\n null,\n );\n return await response.json();\n }\n\n /**\n * Get access token for a specific connected account by provider ID and provider account ID.\n * This is the preferred method when dealing with multiple accounts of the same provider.\n */\n async createServerProviderAccessTokenByAccount(\n userId: string,\n providerId: string,\n providerAccountId: string,\n scope: string,\n ): Promise<ConnectedAccountAccessTokenCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/connected-accounts/${userId}/${providerId}/${providerAccountId}/access-token`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ scope }),\n },\n null,\n );\n return await response.json();\n }\n\n /**\n * List all connected accounts for a user.\n */\n async listServerConnectedAccounts(\n userId: string,\n ): Promise<ConnectedAccountCrud['Server']['List']> {\n const response = await this.sendServerRequest(\n urlString`/connected-accounts/${userId}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async createServerUserSession(userId: string, expiresInMillis: number, isImpersonation: boolean): Promise<{ accessToken: string, refreshToken: string }> {\n const response = await this.sendServerRequest(\n \"/auth/sessions\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n user_id: userId,\n expires_in_millis: expiresInMillis,\n is_impersonation: isImpersonation,\n }),\n },\n null,\n );\n const result = await response.json();\n return {\n accessToken: result.access_token,\n refreshToken: result.refresh_token,\n };\n }\n\n async leaveServerTeam(\n options: {\n teamId: string,\n userId: string,\n },\n ) {\n await this.sendClientRequest(\n urlString`/team-memberships/${options.teamId}/${options.userId}`,\n {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n }\n\n async updateServerTeamMemberProfile(options: {\n teamId: string,\n userId: string,\n profile: TeamMemberProfilesCrud['Server']['Update'],\n }) {\n await this.sendServerRequest(\n urlString`/team-member-profiles/${options.teamId}/${options.userId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(options.profile),\n },\n null,\n );\n }\n\n async grantServerTeamUserPermission(teamId: string, userId: string, permissionId: string) {\n await this.sendServerRequest(\n urlString`/team-permissions/${teamId}/${userId}/${permissionId}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n }\n\n async grantServerProjectPermission(userId: string, permissionId: string) {\n await this.sendServerRequest(\n urlString`/project-permissions/${userId}/${permissionId}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n }\n\n async revokeServerTeamUserPermission(teamId: string, userId: string, permissionId: string) {\n await this.sendServerRequest(\n urlString`/team-permissions/${teamId}/${userId}/${permissionId}`,\n {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n }\n\n async revokeServerProjectPermission(userId: string, permissionId: string) {\n await this.sendServerRequest(\n urlString`/project-permissions/${userId}/${permissionId}`,\n {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n }\n\n async deleteServerUser(userId: string) {\n await this.sendServerRequest(\n urlString`/users/${userId}`,\n {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n }\n\n async createServerContactChannel(\n data: ContactChannelsCrud['Server']['Create'],\n ): Promise<ContactChannelsCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n \"/contact-channels\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async updateServerContactChannel(\n userId: string,\n contactChannelId: string,\n data: ContactChannelsCrud['Server']['Update'],\n ): Promise<ContactChannelsCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/contact-channels/${userId}/${contactChannelId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async deleteServerContactChannel(\n userId: string,\n contactChannelId: string,\n ): Promise<void> {\n await this.sendServerRequest(\n urlString`/contact-channels/${userId}/${contactChannelId}`,\n {\n method: \"DELETE\",\n },\n null,\n );\n }\n\n async listServerContactChannels(\n userId: string,\n ): Promise<ContactChannelsCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(\n urlString`/contact-channels?user_id=${userId}`,\n {\n method: \"GET\",\n },\n null,\n );\n const json = await response.json() as ContactChannelsCrud['Server']['List'];\n return json.items;\n }\n\n async listServerNotificationCategories(\n userId: string,\n ): Promise<NotificationPreferenceCrud['Server']['Read'][]> {\n const response = await this.sendServerRequest(\n urlString`/emails/notification-preference/${userId}`,\n {\n method: \"GET\",\n },\n null,\n );\n const json = await response.json() as NotificationPreferenceCrud['Server']['List'];\n return json.items;\n }\n\n async setServerNotificationsEnabled(\n userId: string,\n notificationCategoryId: string,\n enabled: boolean,\n ): Promise<void> {\n await this.sendServerRequest(\n urlString`/emails/notification-preference/${userId}/${notificationCategoryId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n enabled,\n }),\n },\n null,\n );\n }\n\n async sendServerContactChannelVerificationEmail(\n userId: string,\n contactChannelId: string,\n callbackUrl: string,\n ): Promise<void> {\n await this.sendServerRequest(\n urlString`/contact-channels/${userId}/${contactChannelId}/send-verification-code`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ callback_url: callbackUrl }),\n },\n null,\n );\n }\n\n\n async listServerSessions(userId: string): Promise<SessionsCrud['Server']['List']> {\n const response = await this.sendServerRequest(\n urlString`/auth/sessions?user_id=${userId}`,\n {\n method: \"GET\",\n },\n null,\n );\n return await response.json();\n }\n\n async deleteServerSession(sessionId: string) {\n await this.sendServerRequest(\n urlString`/auth/sessions/${sessionId}`,\n {\n method: \"DELETE\",\n },\n null,\n );\n }\n\n\n async sendServerTeamInvitation(options: {\n email: string,\n teamId: string,\n callbackUrl: string,\n }): Promise<void> {\n await this.sendServerRequest(\n \"/team-invitations/send-code\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n email: options.email,\n team_id: options.teamId,\n callback_url: options.callbackUrl,\n }),\n },\n null,\n );\n }\n\n async updatePassword(\n options: { oldPassword: string, newPassword: string },\n ): Promise<KnownErrors[\"PasswordConfirmationMismatch\"] | KnownErrors[\"PasswordRequirementsNotMet\"] | undefined> {\n const res = await this.sendServerRequestAndCatchKnownError(\n \"/auth/password/update\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n old_password: options.oldPassword,\n new_password: options.newPassword,\n }),\n },\n null,\n [KnownErrors.PasswordConfirmationMismatch, KnownErrors.PasswordRequirementsNotMet]\n );\n\n if (res.status === \"error\") {\n return res.error;\n }\n }\n\n // OAuth Providers CRUD operations\n async createServerOAuthProvider(\n data: OAuthProviderCrud['Server']['Create'],\n ): Promise<OAuthProviderCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n \"/oauth-providers\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n\n async listServerOAuthProviders(\n options: {\n user_id?: string,\n } = {},\n ): Promise<OAuthProviderCrud['Server']['Read'][]> {\n const queryParams = new URLSearchParams(filterUndefined(options));\n const response = await this.sendServerRequest(\n `/oauth-providers${queryParams.toString() ? `?${queryParams.toString()}` : ''}`,\n {\n method: \"GET\",\n },\n null,\n );\n const result = await response.json();\n return result.items;\n }\n\n async updateServerOAuthProvider(\n userId: string,\n providerId: string,\n data: OAuthProviderCrud['Server']['Update'],\n ): Promise<OAuthProviderCrud['Server']['Read']> {\n const response = await this.sendServerRequest(\n urlString`/oauth-providers/${userId}/${providerId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async deleteServerOAuthProvider(\n userId: string,\n providerId: string,\n ): Promise<void> {\n const response = await this.sendServerRequest(\n urlString`/oauth-providers/${userId}/${providerId}`,\n {\n method: \"DELETE\",\n },\n null,\n );\n return await response.json();\n }\n\n async sendEmail(options: {\n userIds?: string[],\n allUsers?: true,\n emails?: string[],\n themeId?: string | null | false,\n html?: string,\n subject?: string,\n notificationCategoryName?: string,\n templateId?: string,\n variables?: Record<string, any>,\n draftId?: string,\n scheduledAt?: Date,\n }): Promise<Result<void, KnownErrors[\"RequiresCustomEmailServer\"] | KnownErrors[\"SchemaError\"] | KnownErrors[\"UserIdDoesNotExist\"]>> {\n const res = await this.sendServerRequest(\n \"/emails/send-email\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n user_ids: options.userIds,\n all_users: options.allUsers,\n emails: options.emails,\n theme_id: options.themeId,\n html: options.html,\n subject: options.subject,\n notification_category_name: options.notificationCategoryName,\n template_id: options.templateId,\n variables: options.variables,\n draft_id: options.draftId,\n scheduled_at_millis: options.scheduledAt?.getTime(),\n }),\n },\n null,\n );\n return Result.ok(undefined);\n }\n\n async getEmailDeliveryInfo(): Promise<{\n stats: {\n hour: { sent: number, bounced: number, marked_as_spam: number },\n day: { sent: number, bounced: number, marked_as_spam: number },\n week: { sent: number, bounced: number, marked_as_spam: number },\n month: { sent: number, bounced: number, marked_as_spam: number },\n },\n capacity: {\n rate_per_second: number,\n boost_multiplier: number,\n penalty_factor: number,\n is_boost_active: boolean,\n boost_expires_at: string | null,\n },\n }> {\n const res = await this.sendServerRequest(\n \"/emails/delivery-info\",\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n },\n null,\n );\n return await res.json();\n }\n\n async activateEmailCapacityBoost(): Promise<{ expires_at: string }> {\n const res = await this.sendServerRequest(\n \"/emails/capacity-boost\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({}),\n },\n null,\n );\n return await res.json();\n }\n\n async updateItemQuantity(\n options: (\n { itemId: string, userId: string } |\n { itemId: string, teamId: string } |\n { itemId: string, customCustomerId: string }\n ),\n data: ItemCrud['Server']['Update'],\n ): Promise<void> {\n let customerType: \"user\" | \"team\" | \"custom\";\n let customerId: string;\n const itemId: string = options.itemId;\n\n if (\"userId\" in options) {\n customerType = \"user\";\n customerId = options.userId;\n } else if (\"teamId\" in options) {\n customerType = \"team\";\n customerId = options.teamId;\n } else if (\"customCustomerId\" in options) {\n customerType = \"custom\";\n customerId = options.customCustomerId;\n } else {\n throw new HexclaveAssertionError(\"updateItemQuantity requires one of userId, teamId, or customCustomerId\");\n }\n\n const queryParams = new URLSearchParams({ allow_negative: (data.allow_negative ?? false).toString() });\n await this.sendServerRequest(\n `/payments/items/${customerType}/${customerId}/${itemId}/update-quantity?${queryParams.toString()}`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ delta: data.delta, expires_at: data.expires_at, description: data.description }),\n },\n null\n );\n }\n\n async grantProduct(\n options: {\n customerType: \"user\" | \"team\" | \"custom\",\n customerId: string,\n productId?: string,\n product?: yup.InferType<typeof inlineProductSchema>,\n quantity?: number,\n },\n ): Promise<void> {\n if (!options.productId && !options.product) {\n throw new HexclaveAssertionError(\"grantProduct requires either productId or product\");\n }\n if (options.productId && options.product) {\n throw new HexclaveAssertionError(\"grantProduct should not receive both productId and product\");\n }\n const body = filterUndefined({\n product_id: options.productId,\n product_inline: options.product,\n quantity: options.quantity,\n });\n await this.sendServerRequest(\n urlString`/payments/products/${options.customerType}/${options.customerId}`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n },\n null,\n );\n }\n\n async getDataVaultStoreValue(secret: string, storeId: string, key: string) {\n const hashedKey = await hashKey(secret, key);\n const response = await this.sendServerRequestAndCatchKnownError(\n `/data-vault/stores/${storeId}/get`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ hashed_key: hashedKey }),\n },\n null,\n [KnownErrors.DataVaultStoreHashedKeyDoesNotExist] as const,\n );\n if (response.status === \"error\") {\n if (KnownErrors.DataVaultStoreHashedKeyDoesNotExist.isInstance(response.error)) {\n return null;\n } else {\n throw new HexclaveAssertionError(\"Unexpected uncaught error\", { cause: response.error });\n }\n }\n const json = await response.data.json();\n const encryptedValue = json.encrypted_value;\n if (typeof encryptedValue !== \"string\") throw new HexclaveAssertionError(\"encrypted_value is not a string\", { type: typeof encryptedValue });\n return await decryptValue(secret, key, encryptedValue);\n }\n\n async setDataVaultStoreValue(secret: string, storeId: string, key: string, value: string) {\n const hashedKey = await hashKey(secret, key);\n const encryptedValue = await encryptValue(secret, key, value);\n await this.sendServerRequest(\n `/data-vault/stores/${storeId}/set`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ hashed_key: hashedKey, encrypted_value: encryptedValue }),\n },\n null,\n );\n }\n\n async initiateServerPasskeyRegistration(userId: string): Promise<Result<{ options_json: any, code: string }, KnownErrors[]>> {\n // Create a temporary session for this user to use for passkey registration\n // TODO instead of creating a new session, this should just call the endpoint in a way in which it doesn't require a session\n // (currently this shows up on session history etc... not ideal)\n const { accessToken, refreshToken } = await this.createServerUserSession(userId, 60000 * 2, false); // 2 minute session\n const tempSession = new InternalSession({\n accessToken,\n refreshToken,\n refreshAccessTokenCallback: async () => null, // No refresh for temporary sessions\n });\n\n // Use the existing initiatePasskeyRegistration method with the temporary session\n return await this.initiatePasskeyRegistration({}, tempSession);\n }\n}\n"],"mappings":"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"}