@outseta/react 0.4.25 → 0.4.27

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@outseta/react",
3
- "version": "0.4.25",
3
+ "version": "0.4.27",
4
4
  "description": "React hooks and components for the Outseta API",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -18,7 +18,7 @@
18
18
  }
19
19
  },
20
20
  "dependencies": {
21
- "@outseta/api-client": "0.3.31"
21
+ "@outseta/api-client": "0.3.33"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "react": "^18.0.0 || ^19.0.0"
@@ -35,6 +35,7 @@ import type {
35
35
  PersonForgotPasswordBody,
36
36
  PersonGetAllPeople200,
37
37
  PersonGetAllPeopleParams,
38
+ PersonRequestMagicLinkBody,
38
39
  PersonSetTemporaryPasswordBody,
39
40
  PersonUpdatePersonBody
40
41
  } from '../outsetaAPI.schemas';
@@ -1795,4 +1796,73 @@ export const usePersonForgotPassword = <TError = void,
1795
1796
 
1796
1797
  return useMutation(mutationOptions);
1797
1798
  }
1799
+ /**
1800
+ * Sends an email containing a single-use, time-limited link that signs
1801
+ the recipient in without a password. Always responds 200 regardless
1802
+ of whether the email matches a known user or whether the feature is
1803
+ enabled, so the endpoint cannot be used to enumerate accounts.
1804
+ * @summary Request a passwordless magic link to sign in.
1805
+ */
1806
+ export const personRequestMagicLink = (
1807
+ personRequestMagicLinkBody: NonReadonly<PersonRequestMagicLinkBody>,
1808
+ options?: SecondParameter<typeof customFetch>,signal?: AbortSignal
1809
+ ) => {
1810
+
1811
+
1812
+ return customFetch<Blob>(
1813
+ {url: `/api/v1/crm/people/requestMagicLink`, method: 'POST',
1814
+ headers: {'Content-Type': 'application/json', },
1815
+ data: personRequestMagicLinkBody,
1816
+ responseType: 'blob', signal
1817
+ },
1818
+ options);
1819
+ }
1820
+
1821
+
1822
+
1823
+ export const getPersonRequestMagicLinkMutationOptions = <TError = unknown,
1824
+ TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof personRequestMagicLink>>, TError,{data: NonReadonly<PersonRequestMagicLinkBody>}, TContext>, request?: SecondParameter<typeof customFetch>}
1825
+ ): UseMutationOptions<Awaited<ReturnType<typeof personRequestMagicLink>>, TError,{data: NonReadonly<PersonRequestMagicLinkBody>}, TContext> => {
1826
+
1827
+ const mutationKey = ['personRequestMagicLink'];
1828
+ const {mutation: mutationOptions, request: requestOptions} = options ?
1829
+ options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?
1830
+ options
1831
+ : {...options, mutation: {...options.mutation, mutationKey}}
1832
+ : {mutation: { mutationKey, }, request: undefined};
1833
+
1834
+
1835
+
1836
+
1837
+ const mutationFn: MutationFunction<Awaited<ReturnType<typeof personRequestMagicLink>>, {data: NonReadonly<PersonRequestMagicLinkBody>}> = (props) => {
1838
+ const {data} = props ?? {};
1839
+
1840
+ return personRequestMagicLink(data,requestOptions)
1841
+ }
1842
+
1843
+
1844
+
1845
+
1846
+ return { mutationFn, ...mutationOptions }}
1847
+
1848
+ export type PersonRequestMagicLinkMutationResult = NonNullable<Awaited<ReturnType<typeof personRequestMagicLink>>>
1849
+ export type PersonRequestMagicLinkMutationBody = NonReadonly<PersonRequestMagicLinkBody>
1850
+ export type PersonRequestMagicLinkMutationError = unknown
1851
+
1852
+ /**
1853
+ * @summary Request a passwordless magic link to sign in.
1854
+ */
1855
+ export const usePersonRequestMagicLink = <TError = unknown,
1856
+ TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof personRequestMagicLink>>, TError,{data: NonReadonly<PersonRequestMagicLinkBody>}, TContext>, request?: SecondParameter<typeof customFetch>}
1857
+ ): UseMutationResult<
1858
+ Awaited<ReturnType<typeof personRequestMagicLink>>,
1859
+ TError,
1860
+ {data: NonReadonly<PersonRequestMagicLinkBody>},
1861
+ TContext
1862
+ > => {
1863
+
1864
+ const mutationOptions = getPersonRequestMagicLinkMutationOptions(options);
1865
+
1866
+ return useMutation(mutationOptions);
1867
+ }
1798
1868
 
@@ -3432,7 +3432,7 @@ export type QcountConfigAllOf = {
3432
3432
  export type QcountConfig = AbstractQcountBean & QcountConfigAllOf;
3433
3433
 
3434
3434
  /**
3435
- * `100` - Slack, `102` - MagicLinkApiKey, `103` - MagicLinkApiKeySecret, `104` - OAuth_HideCreateAccountLink, `105` - Chat_IsOffline, `106` - HostedPageCustomCode, `107` - RegistrationConfirmationEmailDelaySeconds, `108` - AccountCancellationReasons, `110` - WebhookSignatureKey, `111` - HostedProfileBackLink, `112` - AccountCancellationReasonRequired, `114` - Email_OutsetaBrandingDisabled, `119` - Email_BlacklistedInboundEmails, `121` - PasswordPolicy, `123` - CRM_FieldSortingEnabled, `124` - CRM_RegistrationCallbackLocations, `125` - KnowledgeBaseVersion, `126` - Support_SpamThreshold, `127` - Email_RestrictedPhrases, `128` - KnowledgeBaseLanguage, `130` - Billing_System, `131` - Billing_RestrictSubscriptionActions, `140` - TwoFactorAuthenticationEnabled, `142` - ForceTwoFactorAuthentication, `190` - Stripe_TaxEnabled, `192` - Stripe_TaxIdTypes, `193` - Stripe_ApplePayMerchantIdDomainAssociation, `194` - Stripe_WebhookSecret, `195` - Stripe_OnlySyncOutsetaCustomers, `196` - Stripe_Checkout_RequireBillingAddress, `197` - Stripe_Checkout_RequireConsentTermsOfService, `200` - Webflow_AccessToken, `201` - Webflow_SyncEnabled, `202` - Webflow_SyncConfiguration, `203` - Webflow_ApiVersion, `550` - CopyQcount_AddOnMap, `551` - CopyQcount_AccountMap, `552` - CopyQcount_DiscountCouponMap, `553` - CopyQcount_InvoiceMap, `554` - CopyQcount_PersonMap, `555` - CopyQcount_PlanMap, `556` - CopyQcount_PlanFamilyMap, `557` - CopyQcount_SubscriptionMap, `558` - CopyQcount_TransactionMap, `570` - StripeMigration_LastAccountId, `571` - StripeMigration_LastInvoiceId, `572` - StripeMigration_LastExpiredSubscriptionId, `573` - StripeMigration_LastPostExportSubscriptionId, `574` - StripeMigration_LastUsageId, `575` - StripeMigration_SubscriptionExportDate, `576` - StripeMigration_SubscriptionExportIds, `577` - StripeMigration_SubscriptionAddOnExportIds, `578` - StripeMigration_SubscriptionCutoverDate, `579` - StripeMigration_LastPreCutoverExportSubscriptionId
3435
+ * `100` - Slack, `102` - MagicLinkApiKey, `103` - MagicLinkApiKeySecret, `104` - OAuth_HideCreateAccountLink, `105` - Chat_IsOffline, `106` - HostedPageCustomCode, `107` - RegistrationConfirmationEmailDelaySeconds, `108` - AccountCancellationReasons, `110` - WebhookSignatureKey, `111` - HostedProfileBackLink, `112` - AccountCancellationReasonRequired, `114` - Email_OutsetaBrandingDisabled, `119` - Email_BlacklistedInboundEmails, `121` - PasswordPolicy, `123` - CRM_FieldSortingEnabled, `124` - CRM_RegistrationCallbackLocations, `125` - KnowledgeBaseVersion, `126` - Support_SpamThreshold, `127` - Email_RestrictedPhrases, `128` - KnowledgeBaseLanguage, `130` - Billing_System, `131` - Billing_RestrictSubscriptionActions, `140` - TwoFactorAuthenticationEnabled, `142` - ForceTwoFactorAuthentication, `143` - MagicLinkLoginEnabled, `190` - Stripe_TaxEnabled, `192` - Stripe_TaxIdTypes, `193` - Stripe_ApplePayMerchantIdDomainAssociation, `194` - Stripe_WebhookSecret, `195` - Stripe_OnlySyncOutsetaCustomers, `196` - Stripe_Checkout_RequireBillingAddress, `197` - Stripe_Checkout_RequireConsentTermsOfService, `200` - Webflow_AccessToken, `201` - Webflow_SyncEnabled, `202` - Webflow_SyncConfiguration, `203` - Webflow_ApiVersion, `550` - CopyQcount_AddOnMap, `551` - CopyQcount_AccountMap, `552` - CopyQcount_DiscountCouponMap, `553` - CopyQcount_InvoiceMap, `554` - CopyQcount_PersonMap, `555` - CopyQcount_PlanMap, `556` - CopyQcount_PlanFamilyMap, `557` - CopyQcount_SubscriptionMap, `558` - CopyQcount_TransactionMap, `570` - StripeMigration_LastAccountId, `571` - StripeMigration_LastInvoiceId, `572` - StripeMigration_LastExpiredSubscriptionId, `573` - StripeMigration_LastPostExportSubscriptionId, `574` - StripeMigration_LastUsageId, `575` - StripeMigration_SubscriptionExportDate, `576` - StripeMigration_SubscriptionExportIds, `577` - StripeMigration_SubscriptionAddOnExportIds, `578` - StripeMigration_SubscriptionCutoverDate, `579` - StripeMigration_LastPreCutoverExportSubscriptionId
3436
3436
  */
3437
3437
  export type QcountConfigSettingType = typeof QcountConfigSettingType[keyof typeof QcountConfigSettingType];
3438
3438
 
@@ -3463,6 +3463,7 @@ export const QcountConfigSettingType = {
3463
3463
  Billing_RestrictSubscriptionActions: 131,
3464
3464
  TwoFactorAuthenticationEnabled: 140,
3465
3465
  ForceTwoFactorAuthentication: 142,
3466
+ MagicLinkLoginEnabled: 143,
3466
3467
  Stripe_TaxEnabled: 190,
3467
3468
  Stripe_TaxIdTypes: 192,
3468
3469
  Stripe_ApplePayMerchantIdDomainAssociation: 193,
@@ -4381,7 +4382,7 @@ export interface FlatfileImportData {
4381
4382
  }
4382
4383
 
4383
4384
  /**
4384
- * `1` - UpdateSegmentBackGroundTask, `2` - ImportPeopleTask, `3` - ImportAccountTask, `4` - ImportDealTask, `5` - ImportEmailList, `6` - RescheduleDripCampaignTask, `7` - DeleteSegmentPeopleTask, `8` - StartDripCampaignTask, `9` - WebflowSyncTask, `10` - UpdatePersonSegmentsTask, `11` - ImportDiscountCouponTask, `12` - RemoveDiscordUserFromAllServersTask, `13` - SendInvoiceEmailTask, `14` - UpdateDiscordUserRolesTask, `15` - StripeBillingSyncTask, `16` - UpdateStripeDefaultSourceTask, `17` - DeleteScheduledCampaignMessagesTask, `18` - SendSpamCheckEmailTask, `19` - UpdateDiscordMemberRolesTask, `20` - SendInvoicePaidEmailTask, `21` - ResendTrialLimitEmailTask
4385
+ * `1` - UpdateSegmentBackGroundTask, `2` - ImportPeopleTask, `3` - ImportAccountTask, `4` - ImportDealTask, `5` - ImportEmailList, `6` - RescheduleDripCampaignTask, `7` - DeleteSegmentPeopleTask, `8` - StartDripCampaignTask, `9` - WebflowSyncTask, `10` - UpdatePersonSegmentsTask, `11` - ImportDiscountCouponTask, `12` - RemoveDiscordUserFromAllServersTask, `13` - SendInvoiceEmailTask, `14` - UpdateDiscordUserRolesTask, `15` - StripeBillingSyncTask, `16` - UpdateStripeDefaultSourceTask, `17` - DeleteScheduledCampaignMessagesTask, `18` - SendSpamCheckEmailTask, `19` - UpdateDiscordMemberRolesTask, `20` - SendInvoicePaidEmailTask, `21` - ResendTrialLimitEmailTask, `22` - UpdateStripeSubscriptionApplicationFeePercentTask
4385
4386
  */
4386
4387
  export type BackGroundTaskType = typeof BackGroundTaskType[keyof typeof BackGroundTaskType];
4387
4388
 
@@ -4409,6 +4410,7 @@ export const BackGroundTaskType = {
4409
4410
  UpdateDiscordMemberRolesTask: 19,
4410
4411
  SendInvoicePaidEmailTask: 20,
4411
4412
  ResendTrialLimitEmailTask: 21,
4413
+ UpdateStripeSubscriptionApplicationFeePercentTask: 22,
4412
4414
  } as const;
4413
4415
 
4414
4416
  /**
@@ -9134,6 +9136,13 @@ export type AuthGetTokenParams = {
9134
9136
  data: unknown | null;
9135
9137
  };
9136
9138
 
9139
+ export type AuthMagicLinkTokenParams = {
9140
+ /**
9141
+ * @nullable
9142
+ */
9143
+ data: unknown | null;
9144
+ };
9145
+
9137
9146
  export type AuthResendTwoFactorParams = {
9138
9147
  /**
9139
9148
  * @nullable
@@ -9562,6 +9571,11 @@ export type PersonSetTemporaryPasswordBody = TemporaryPasswordModel | null;
9562
9571
  */
9563
9572
  export type PersonForgotPasswordBody = Person | null;
9564
9573
 
9574
+ /**
9575
+ * @nullable
9576
+ */
9577
+ export type PersonRequestMagicLinkBody = Person | null;
9578
+
9565
9579
  export type DiscountCouponGetDiscountCouponByCodeParams = {
9566
9580
  /**
9567
9581
  * The unique identifier of the plan to validate the coupon against
@@ -10,6 +10,7 @@ import type {
10
10
 
11
11
  import type {
12
12
  AuthGetTokenParams,
13
+ AuthMagicLinkTokenParams,
13
14
  AuthResendTwoFactorParams,
14
15
  AuthSwitchTwoFactorMechanismParams,
15
16
  AuthVerifyTwoFactorRecoveryParams,
@@ -228,6 +229,85 @@ export const useAuthGetToken = <TError = string,
228
229
  return useMutation(mutationOptions);
229
230
  }
230
231
  /**
232
+ * Call this with the magicToken carried by the link from a
233
+ "magic link" email (requested via POST /api/v1/crm/people/requestMagicLink):
234
+
235
+ { "magic_token": "eyJ..." }
236
+
237
+ The link proves control of the email inbox, which satisfies the first
238
+ factor. The response then matches POST /api/v1/tokens:
239
+
240
+ - 200 with an access token when no further factor is required;
241
+ - 202 with a two_factor_required challenge when the user
242
+ has a non-email second factor (e.g. an authenticator app) that must
243
+ still be cleared via POST /api/v1/tokens/two-factor. Email is
244
+ never offered as that second factor — it was already the first.
245
+
246
+ An invalid, expired, already-used token (or a tenant without magic-link
247
+ login enabled) returns 400 (invalid_grant).
248
+ * @summary Exchange a magic-link token for an access token (passwordless login).
249
+ */
250
+ export const authMagicLinkToken = (
251
+ params: AuthMagicLinkTokenParams,
252
+ options?: SecondParameter<typeof customFetch>,signal?: AbortSignal
253
+ ) => {
254
+
255
+
256
+ return customFetch<TokenPayload | TwoFactorChallengePayload>(
257
+ {url: `/api/v1/tokens/magic-link`, method: 'POST',
258
+ params, signal
259
+ },
260
+ options);
261
+ }
262
+
263
+
264
+
265
+ export const getAuthMagicLinkTokenMutationOptions = <TError = string,
266
+ TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof authMagicLinkToken>>, TError,{params: AuthMagicLinkTokenParams}, TContext>, request?: SecondParameter<typeof customFetch>}
267
+ ): UseMutationOptions<Awaited<ReturnType<typeof authMagicLinkToken>>, TError,{params: AuthMagicLinkTokenParams}, TContext> => {
268
+
269
+ const mutationKey = ['authMagicLinkToken'];
270
+ const {mutation: mutationOptions, request: requestOptions} = options ?
271
+ options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?
272
+ options
273
+ : {...options, mutation: {...options.mutation, mutationKey}}
274
+ : {mutation: { mutationKey, }, request: undefined};
275
+
276
+
277
+
278
+
279
+ const mutationFn: MutationFunction<Awaited<ReturnType<typeof authMagicLinkToken>>, {params: AuthMagicLinkTokenParams}> = (props) => {
280
+ const {params} = props ?? {};
281
+
282
+ return authMagicLinkToken(params,requestOptions)
283
+ }
284
+
285
+
286
+
287
+
288
+ return { mutationFn, ...mutationOptions }}
289
+
290
+ export type AuthMagicLinkTokenMutationResult = NonNullable<Awaited<ReturnType<typeof authMagicLinkToken>>>
291
+
292
+ export type AuthMagicLinkTokenMutationError = string
293
+
294
+ /**
295
+ * @summary Exchange a magic-link token for an access token (passwordless login).
296
+ */
297
+ export const useAuthMagicLinkToken = <TError = string,
298
+ TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof authMagicLinkToken>>, TError,{params: AuthMagicLinkTokenParams}, TContext>, request?: SecondParameter<typeof customFetch>}
299
+ ): UseMutationResult<
300
+ Awaited<ReturnType<typeof authMagicLinkToken>>,
301
+ TError,
302
+ {params: AuthMagicLinkTokenParams},
303
+ TContext
304
+ > => {
305
+
306
+ const mutationOptions = getAuthMagicLinkTokenMutationOptions(options);
307
+
308
+ return useMutation(mutationOptions);
309
+ }
310
+ /**
231
311
  * Call this after `POST /api/v1/tokens` returns `two_factor_required`.
232
312
  Post the challenge token from that response together with the user's
233
313
  one-time code (the emailed code, or the current code from their