@turnkey/core 2.6.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/__clients__/core.d.ts +21 -2
  2. package/dist/__clients__/core.d.ts.map +1 -1
  3. package/dist/__clients__/core.js +108 -39
  4. package/dist/__clients__/core.js.map +1 -1
  5. package/dist/__clients__/core.mjs +101 -32
  6. package/dist/__clients__/core.mjs.map +1 -1
  7. package/dist/__generated__/sdk-client-base.d.ts +9 -0
  8. package/dist/__generated__/sdk-client-base.d.ts.map +1 -1
  9. package/dist/__generated__/sdk-client-base.js +59 -1
  10. package/dist/__generated__/sdk-client-base.js.map +1 -1
  11. package/dist/__generated__/sdk-client-base.mjs +60 -2
  12. package/dist/__generated__/sdk-client-base.mjs.map +1 -1
  13. package/dist/__generated__/version.d.ts +1 -1
  14. package/dist/__generated__/version.js +1 -1
  15. package/dist/__generated__/version.mjs +1 -1
  16. package/dist/__stampers__/api/base.d.ts +2 -1
  17. package/dist/__stampers__/api/base.d.ts.map +1 -1
  18. package/dist/__stampers__/api/base.js +11 -14
  19. package/dist/__stampers__/api/base.js.map +1 -1
  20. package/dist/__stampers__/api/base.mjs +11 -14
  21. package/dist/__stampers__/api/base.mjs.map +1 -1
  22. package/dist/__stampers__/attested/base.d.ts +22 -0
  23. package/dist/__stampers__/attested/base.d.ts.map +1 -0
  24. package/dist/__stampers__/attested/base.js +50 -0
  25. package/dist/__stampers__/attested/base.js.map +1 -0
  26. package/dist/__stampers__/attested/base.mjs +48 -0
  27. package/dist/__stampers__/attested/base.mjs.map +1 -0
  28. package/dist/__types__/config.d.ts +42 -1
  29. package/dist/__types__/config.d.ts.map +1 -1
  30. package/dist/__types__/enums.d.ts +2 -1
  31. package/dist/__types__/enums.d.ts.map +1 -1
  32. package/dist/__types__/enums.js +1 -0
  33. package/dist/__types__/enums.js.map +1 -1
  34. package/dist/__types__/enums.mjs +1 -0
  35. package/dist/__types__/enums.mjs.map +1 -1
  36. package/dist/__types__/method-types/shared.d.ts +21 -1
  37. package/dist/__types__/method-types/shared.d.ts.map +1 -1
  38. package/dist/utils.d.ts.map +1 -1
  39. package/dist/utils.js +3 -1
  40. package/dist/utils.js.map +1 -1
  41. package/dist/utils.mjs +3 -1
  42. package/dist/utils.mjs.map +1 -1
  43. package/package.json +6 -6
@@ -1,5 +1,5 @@
1
1
  import { VERSION } from './version.mjs';
2
- import { TERMINAL_ACTIVITY_STATUSES, TurnkeyRequestError, TurnkeyError, TurnkeyErrorCodes } from '@turnkey/sdk-types';
2
+ import { TERMINAL_ACTIVITY_STATUSES, ActivityStatus, TurnkeyRequestError, TurnkeyError, TurnkeyErrorCodes } from '@turnkey/sdk-types';
3
3
  import { StamperType } from '../__types__/enums.mjs';
4
4
 
5
5
  /* @generated by codegen. DO NOT EDIT BY HAND */
@@ -6044,6 +6044,9 @@ class TurnkeySDKClientBase {
6044
6044
  if (config.walletStamper) {
6045
6045
  this.walletStamper = config.walletStamper;
6046
6046
  }
6047
+ if (config.attestedStamper) {
6048
+ this.attestedStamper = config.attestedStamper;
6049
+ }
6047
6050
  if (config.storageManager) {
6048
6051
  this.storageManager = config.storageManager;
6049
6052
  }
@@ -6061,6 +6064,9 @@ class TurnkeySDKClientBase {
6061
6064
  else if (this.walletStamper) {
6062
6065
  this.defaultStamperType = StamperType.Wallet;
6063
6066
  }
6067
+ else if (this.attestedStamper) {
6068
+ this.defaultStamperType = StamperType.Attested;
6069
+ }
6064
6070
  else {
6065
6071
  this.defaultStamperType = undefined;
6066
6072
  }
@@ -6078,6 +6084,8 @@ class TurnkeySDKClientBase {
6078
6084
  return this.passkeyStamper;
6079
6085
  case StamperType.Wallet:
6080
6086
  return this.walletStamper;
6087
+ case StamperType.Attested:
6088
+ return this.attestedStamper;
6081
6089
  default:
6082
6090
  return this.apiKeyStamper;
6083
6091
  }
@@ -6108,7 +6116,7 @@ class TurnkeySDKClientBase {
6108
6116
  */
6109
6117
  handleActivityResponse(activityData, resultKey) {
6110
6118
  const { result, status } = activityData.activity;
6111
- if (status === "ACTIVITY_STATUS_COMPLETED" && result) {
6119
+ if (status === ActivityStatus.COMPLETED && result) {
6112
6120
  // If a specific resultKey was provided, use it
6113
6121
  if (resultKey && result[resultKey]) {
6114
6122
  return {
@@ -6128,6 +6136,52 @@ class TurnkeySDKClientBase {
6128
6136
  }
6129
6137
  return activityData;
6130
6138
  }
6139
+ /**
6140
+ * If the activity requires MFA (AUTHENTICATORS_NEEDED) or consensus
6141
+ * (CONSENSUS_NEEDED) and an onMfaRequired callback is configured, fetch the
6142
+ * MFA statuses for the activity, invoke the callback, and then poll for
6143
+ * completion. Returns the (possibly updated) activity data.
6144
+ * @internal
6145
+ */
6146
+ async handleMfaIfNeeded(activityData, stampWith) {
6147
+ const AUTHENTICATORS_NEEDED = ActivityStatus.AUTHENTICATORS_NEEDED;
6148
+ // We need to check for CONSENSUS_NEEDED as well, since that can also involve MFA (user is NOT the proposer but has MFA).
6149
+ const CONSENSUS_NEEDED = ActivityStatus.CONSENSUS_NEEDED;
6150
+ const activityStatus = activityData.activity.status;
6151
+ // Only AUTHENTICATORS_NEEDED and CONSENSUS_NEEDED can involve MFA.
6152
+ // Anything else is returned as-is.
6153
+ if (activityStatus !== AUTHENTICATORS_NEEDED &&
6154
+ activityStatus !== CONSENSUS_NEEDED) {
6155
+ return activityData;
6156
+ }
6157
+ if (!this.config.onMfaRequired) {
6158
+ return activityData;
6159
+ }
6160
+ // Fetch the MFA statuses for this activity.
6161
+ const { mfaStatuses } = await this.getMfaStatus({
6162
+ activityId: activityData.activity.id,
6163
+ organizationId: activityData.activity.organizationId,
6164
+ }, stampWith);
6165
+ // For CONSENSUS_NEEDED there may be no MFA statuses.
6166
+ // In that case, return the activity as-is.
6167
+ if (activityStatus === CONSENSUS_NEEDED &&
6168
+ (!mfaStatuses || mfaStatuses.length === 0)) {
6169
+ return activityData;
6170
+ }
6171
+ const mfaContext = {
6172
+ activityId: activityData.activity.id,
6173
+ fingerprint: activityData.activity.fingerprint,
6174
+ organizationId: activityData.activity.organizationId,
6175
+ activityType: activityData.activity.type,
6176
+ activityStatus,
6177
+ mfaStatuses,
6178
+ };
6179
+ // Await the callback — it should resolve when MFA approval is complete
6180
+ await this.config.onMfaRequired(mfaContext);
6181
+ // After callback resolves, poll for the updated activity status
6182
+ activityData = await this.pollForCompletion(activityData.activity.id, stampWith);
6183
+ return activityData;
6184
+ }
6131
6185
  async request(url, body, stampWith) {
6132
6186
  const fullUrl = this.config.apiBaseUrl + url;
6133
6187
  const stringifiedBody = JSON.stringify(body);
@@ -6167,6 +6221,8 @@ class TurnkeySDKClientBase {
6167
6221
  if (!TERMINAL_ACTIVITY_STATUSES.includes(activityData.activity.status)) {
6168
6222
  activityData = await this.pollForCompletion(activityData.activity.id, stampWith);
6169
6223
  }
6224
+ // Handle MFA if needed (callback gate + re-poll)
6225
+ activityData = await this.handleMfaIfNeeded(activityData, stampWith);
6170
6226
  return this.handleActivityResponse(activityData, resultKey);
6171
6227
  }
6172
6228
  async activityDecision(url, body, stampWith) {
@@ -6252,6 +6308,8 @@ class TurnkeySDKClientBase {
6252
6308
  if (!TERMINAL_ACTIVITY_STATUSES.includes(activityData.activity.status)) {
6253
6309
  activityData = await this.pollForCompletion(activityData.activity.id);
6254
6310
  }
6311
+ // Handle MFA if needed (callback gate + re-poll)
6312
+ activityData = await this.handleMfaIfNeeded(activityData);
6255
6313
  return this.handleActivityResponse(activityData, options?.resultKey);
6256
6314
  }
6257
6315
  return data;