@account-kit/signer 4.0.0-beta.8 → 4.0.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 (52) hide show
  1. package/dist/esm/base.d.ts +9 -4
  2. package/dist/esm/base.js +124 -30
  3. package/dist/esm/base.js.map +1 -1
  4. package/dist/esm/client/base.d.ts +7 -12
  5. package/dist/esm/client/base.js +11 -1
  6. package/dist/esm/client/base.js.map +1 -1
  7. package/dist/esm/client/index.d.ts +15 -6
  8. package/dist/esm/client/index.js +23 -12
  9. package/dist/esm/client/index.js.map +1 -1
  10. package/dist/esm/client/types.d.ts +6 -1
  11. package/dist/esm/client/types.js.map +1 -1
  12. package/dist/esm/metrics.d.ts +17 -0
  13. package/dist/esm/metrics.js +7 -0
  14. package/dist/esm/metrics.js.map +1 -0
  15. package/dist/esm/session/manager.js +1 -0
  16. package/dist/esm/session/manager.js.map +1 -1
  17. package/dist/esm/signer.d.ts +1 -0
  18. package/dist/esm/signer.js +46 -3
  19. package/dist/esm/signer.js.map +1 -1
  20. package/dist/esm/types.d.ts +8 -1
  21. package/dist/esm/types.js +3 -1
  22. package/dist/esm/types.js.map +1 -1
  23. package/dist/esm/version.d.ts +1 -1
  24. package/dist/esm/version.js +1 -1
  25. package/dist/esm/version.js.map +1 -1
  26. package/dist/types/base.d.ts +9 -4
  27. package/dist/types/base.d.ts.map +1 -1
  28. package/dist/types/client/base.d.ts +7 -12
  29. package/dist/types/client/base.d.ts.map +1 -1
  30. package/dist/types/client/index.d.ts +15 -6
  31. package/dist/types/client/index.d.ts.map +1 -1
  32. package/dist/types/client/types.d.ts +6 -1
  33. package/dist/types/client/types.d.ts.map +1 -1
  34. package/dist/types/metrics.d.ts +18 -0
  35. package/dist/types/metrics.d.ts.map +1 -0
  36. package/dist/types/session/manager.d.ts.map +1 -1
  37. package/dist/types/signer.d.ts +1 -0
  38. package/dist/types/signer.d.ts.map +1 -1
  39. package/dist/types/types.d.ts +8 -1
  40. package/dist/types/types.d.ts.map +1 -1
  41. package/dist/types/version.d.ts +1 -1
  42. package/dist/types/version.d.ts.map +1 -1
  43. package/package.json +6 -5
  44. package/src/base.ts +198 -62
  45. package/src/client/base.ts +19 -2
  46. package/src/client/index.ts +29 -11
  47. package/src/client/types.ts +7 -1
  48. package/src/metrics.ts +23 -0
  49. package/src/session/manager.ts +2 -1
  50. package/src/signer.ts +60 -5
  51. package/src/types.ts +9 -1
  52. package/src/version.ts +1 -1
@@ -8,8 +8,8 @@ import {
8
8
  import { createStore, type Mutate, type StoreApi } from "zustand/vanilla";
9
9
  import type { BaseSignerClient } from "../client/base";
10
10
  import type { User } from "../client/types";
11
- import type { Session, SessionManagerEvents } from "./types";
12
11
  import { assertNever } from "../utils/typeAssertions.js";
12
+ import type { Session, SessionManagerEvents } from "./types";
13
13
 
14
14
  export const DEFAULT_SESSION_MS = 15 * 60 * 1000; // 15 minutes
15
15
 
@@ -93,6 +93,7 @@ export class SessionManager {
93
93
  .completeAuthWithBundle({
94
94
  bundle: existingSession.bundle,
95
95
  orgId: existingSession.user.orgId,
96
+ authenticatingType: existingSession.type,
96
97
  connectedEventName,
97
98
  })
98
99
  .catch((e) => {
package/src/signer.ts CHANGED
@@ -31,7 +31,12 @@ export type AuthParams =
31
31
  claims?: string;
32
32
  } & OauthProviderConfig &
33
33
  OauthRedirectConfig)
34
- | { type: "oauthReturn"; bundle: string; orgId: string };
34
+ | {
35
+ type: "oauthReturn";
36
+ bundle: string;
37
+ orgId: string;
38
+ idToken: string;
39
+ };
35
40
 
36
41
  export type OauthProviderConfig =
37
42
  | {
@@ -105,9 +110,59 @@ export class AlchemyWebSigner extends BaseAlchemySigner<AlchemySignerWebClient>
105
110
  } else {
106
111
  client = params_.client;
107
112
  }
108
- super({
109
- client,
110
- sessionConfig,
111
- });
113
+ const { emailBundle, oauthBundle, oauthOrgId, oauthError, idToken } =
114
+ getAndRemoveQueryParams({
115
+ emailBundle: "bundle",
116
+ // We don't need this, but we still want to remove it from the URL.
117
+ emailOrgId: "orgId",
118
+ oauthBundle: "alchemy-bundle",
119
+ oauthOrgId: "alchemy-org-id",
120
+ oauthError: "alchemy-error",
121
+ idToken: "alchemy-id-token",
122
+ });
123
+
124
+ const initialError =
125
+ oauthError != null
126
+ ? { name: "OauthError", message: oauthError }
127
+ : undefined;
128
+
129
+ super({ client, sessionConfig, initialError });
130
+
131
+ if (emailBundle) {
132
+ this.authenticate({ type: "email", bundle: emailBundle });
133
+ } else if (oauthBundle && oauthOrgId && idToken) {
134
+ this.authenticate({
135
+ type: "oauthReturn",
136
+ bundle: oauthBundle,
137
+ orgId: oauthOrgId,
138
+ idToken,
139
+ });
140
+ }
141
+ }
142
+ }
143
+
144
+ /**
145
+ * Reads and removes the specified query params from the URL.
146
+ *
147
+ * @param {T} keys object whose values are the query parameter keys to read and
148
+ * remove
149
+ * @returns {{ [K in keyof T]: string | undefined }} object with the same keys
150
+ * as the input whose values are the values of the query params.
151
+ */
152
+ function getAndRemoveQueryParams<T extends Record<string, string>>(
153
+ keys: T
154
+ ): { [K in keyof T]: string | undefined } {
155
+ const url = new URL(window.location.href);
156
+ const result: Record<string, string | undefined> = {};
157
+ let foundQueryParam = false;
158
+ for (const [key, param] of Object.entries(keys)) {
159
+ const value = url.searchParams.get(param) ?? undefined;
160
+ foundQueryParam ||= value != null;
161
+ result[key] = value;
162
+ url.searchParams.delete(param);
163
+ }
164
+ if (foundQueryParam) {
165
+ window.history.replaceState(window.history.state, "", url.toString());
112
166
  }
167
+ return result as { [K in keyof T]: string | undefined };
113
168
  }
package/src/types.ts CHANGED
@@ -4,6 +4,7 @@ export type AlchemySignerEvents = {
4
4
  connected(user: User): void;
5
5
  disconnected(): void;
6
6
  statusChanged(status: AlchemySignerStatus): void;
7
+ errorChanged(error: ErrorInfo | undefined): void;
7
8
  };
8
9
 
9
10
  export type AlchemySignerEvent = keyof AlchemySignerEvents;
@@ -12,6 +13,13 @@ export enum AlchemySignerStatus {
12
13
  INITIALIZING = "INITIALIZING",
13
14
  CONNECTED = "CONNECTED",
14
15
  DISCONNECTED = "DISCONNECTED",
15
- AUTHENTICATING = "AUTHENTICATING",
16
+ AUTHENTICATING_PASSKEY = "AUTHENTICATING_PASSKEY",
17
+ AUTHENTICATING_EMAIL = "AUTHENTICATING_EMAIL",
18
+ AUTHENTICATING_OAUTH = "AUTHENTICATING_OAUTH",
16
19
  AWAITING_EMAIL_AUTH = "AWAITING_EMAIL_AUTH",
17
20
  }
21
+
22
+ export interface ErrorInfo {
23
+ name: string;
24
+ message: string;
25
+ }
package/src/version.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  // This file is autogenerated by inject-version.ts. Any changes will be
2
2
  // overwritten on commit!
3
- export const VERSION = "4.0.0-beta.8";
3
+ export const VERSION = "4.0.0-beta.10";