@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
@@ -6046,6 +6046,9 @@ class TurnkeySDKClientBase {
6046
6046
  if (config.walletStamper) {
6047
6047
  this.walletStamper = config.walletStamper;
6048
6048
  }
6049
+ if (config.attestedStamper) {
6050
+ this.attestedStamper = config.attestedStamper;
6051
+ }
6049
6052
  if (config.storageManager) {
6050
6053
  this.storageManager = config.storageManager;
6051
6054
  }
@@ -6063,6 +6066,9 @@ class TurnkeySDKClientBase {
6063
6066
  else if (this.walletStamper) {
6064
6067
  this.defaultStamperType = enums.StamperType.Wallet;
6065
6068
  }
6069
+ else if (this.attestedStamper) {
6070
+ this.defaultStamperType = enums.StamperType.Attested;
6071
+ }
6066
6072
  else {
6067
6073
  this.defaultStamperType = undefined;
6068
6074
  }
@@ -6080,6 +6086,8 @@ class TurnkeySDKClientBase {
6080
6086
  return this.passkeyStamper;
6081
6087
  case enums.StamperType.Wallet:
6082
6088
  return this.walletStamper;
6089
+ case enums.StamperType.Attested:
6090
+ return this.attestedStamper;
6083
6091
  default:
6084
6092
  return this.apiKeyStamper;
6085
6093
  }
@@ -6110,7 +6118,7 @@ class TurnkeySDKClientBase {
6110
6118
  */
6111
6119
  handleActivityResponse(activityData, resultKey) {
6112
6120
  const { result, status } = activityData.activity;
6113
- if (status === "ACTIVITY_STATUS_COMPLETED" && result) {
6121
+ if (status === sdkTypes.ActivityStatus.COMPLETED && result) {
6114
6122
  // If a specific resultKey was provided, use it
6115
6123
  if (resultKey && result[resultKey]) {
6116
6124
  return {
@@ -6130,6 +6138,52 @@ class TurnkeySDKClientBase {
6130
6138
  }
6131
6139
  return activityData;
6132
6140
  }
6141
+ /**
6142
+ * If the activity requires MFA (AUTHENTICATORS_NEEDED) or consensus
6143
+ * (CONSENSUS_NEEDED) and an onMfaRequired callback is configured, fetch the
6144
+ * MFA statuses for the activity, invoke the callback, and then poll for
6145
+ * completion. Returns the (possibly updated) activity data.
6146
+ * @internal
6147
+ */
6148
+ async handleMfaIfNeeded(activityData, stampWith) {
6149
+ const AUTHENTICATORS_NEEDED = sdkTypes.ActivityStatus.AUTHENTICATORS_NEEDED;
6150
+ // We need to check for CONSENSUS_NEEDED as well, since that can also involve MFA (user is NOT the proposer but has MFA).
6151
+ const CONSENSUS_NEEDED = sdkTypes.ActivityStatus.CONSENSUS_NEEDED;
6152
+ const activityStatus = activityData.activity.status;
6153
+ // Only AUTHENTICATORS_NEEDED and CONSENSUS_NEEDED can involve MFA.
6154
+ // Anything else is returned as-is.
6155
+ if (activityStatus !== AUTHENTICATORS_NEEDED &&
6156
+ activityStatus !== CONSENSUS_NEEDED) {
6157
+ return activityData;
6158
+ }
6159
+ if (!this.config.onMfaRequired) {
6160
+ return activityData;
6161
+ }
6162
+ // Fetch the MFA statuses for this activity.
6163
+ const { mfaStatuses } = await this.getMfaStatus({
6164
+ activityId: activityData.activity.id,
6165
+ organizationId: activityData.activity.organizationId,
6166
+ }, stampWith);
6167
+ // For CONSENSUS_NEEDED there may be no MFA statuses.
6168
+ // In that case, return the activity as-is.
6169
+ if (activityStatus === CONSENSUS_NEEDED &&
6170
+ (!mfaStatuses || mfaStatuses.length === 0)) {
6171
+ return activityData;
6172
+ }
6173
+ const mfaContext = {
6174
+ activityId: activityData.activity.id,
6175
+ fingerprint: activityData.activity.fingerprint,
6176
+ organizationId: activityData.activity.organizationId,
6177
+ activityType: activityData.activity.type,
6178
+ activityStatus,
6179
+ mfaStatuses,
6180
+ };
6181
+ // Await the callback — it should resolve when MFA approval is complete
6182
+ await this.config.onMfaRequired(mfaContext);
6183
+ // After callback resolves, poll for the updated activity status
6184
+ activityData = await this.pollForCompletion(activityData.activity.id, stampWith);
6185
+ return activityData;
6186
+ }
6133
6187
  async request(url, body, stampWith) {
6134
6188
  const fullUrl = this.config.apiBaseUrl + url;
6135
6189
  const stringifiedBody = JSON.stringify(body);
@@ -6169,6 +6223,8 @@ class TurnkeySDKClientBase {
6169
6223
  if (!sdkTypes.TERMINAL_ACTIVITY_STATUSES.includes(activityData.activity.status)) {
6170
6224
  activityData = await this.pollForCompletion(activityData.activity.id, stampWith);
6171
6225
  }
6226
+ // Handle MFA if needed (callback gate + re-poll)
6227
+ activityData = await this.handleMfaIfNeeded(activityData, stampWith);
6172
6228
  return this.handleActivityResponse(activityData, resultKey);
6173
6229
  }
6174
6230
  async activityDecision(url, body, stampWith) {
@@ -6254,6 +6310,8 @@ class TurnkeySDKClientBase {
6254
6310
  if (!sdkTypes.TERMINAL_ACTIVITY_STATUSES.includes(activityData.activity.status)) {
6255
6311
  activityData = await this.pollForCompletion(activityData.activity.id);
6256
6312
  }
6313
+ // Handle MFA if needed (callback gate + re-poll)
6314
+ activityData = await this.handleMfaIfNeeded(activityData);
6257
6315
  return this.handleActivityResponse(activityData, options?.resultKey);
6258
6316
  }
6259
6317
  return data;