@zerodev/wallet-react 0.0.1-alpha.14 → 0.0.1-alpha.16

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/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @zerodev/wallet-react
2
2
 
3
+ ## 0.0.1-alpha.16
4
+
5
+ ### Patch Changes
6
+
7
+ - feat: switch signing to validated backend endpoints
8
+ - Updated dependencies
9
+ - @zerodev/wallet-core@0.0.1-alpha.15
10
+
11
+ ## 0.0.1-alpha.15
12
+
13
+ ### Patch Changes
14
+
15
+ - feat: replace cookie-based OAuth with server-side session ID
16
+ - Updated dependencies
17
+ - @zerodev/wallet-core@0.0.1-alpha.14
18
+
3
19
  ## 0.0.1-alpha.14
4
20
 
5
21
  ### Patch Changes
@@ -83,11 +83,12 @@ async function authenticateOAuth(config, parameters) {
83
83
  throw new Error(`Failed to open ${parameters.provider} login window.`);
84
84
  }
85
85
  return new Promise((resolve, reject) => {
86
- const cleanup = (0, oauth_js_1.listenForOAuthMessage)(authWindow, window.location.origin, async () => {
86
+ const cleanup = (0, oauth_js_1.listenForOAuthMessage)(authWindow, window.location.origin, async (sessionId) => {
87
87
  try {
88
88
  await wallet.auth({
89
89
  type: 'oauth',
90
90
  provider: parameters.provider,
91
+ sessionId,
91
92
  });
92
93
  const [session, eoaAccount] = await Promise.all([
93
94
  wallet.getSession(),
@@ -12,6 +12,7 @@ const store_js_1 = require("./store.js");
12
12
  const aaUtils_js_1 = require("./utils/aaUtils.js");
13
13
  const OAUTH_SUCCESS_PARAM = 'oauth_success';
14
14
  const OAUTH_PROVIDER_PARAM = 'oauth_provider';
15
+ const OAUTH_SESSION_ID_PARAM = 'session_id';
15
16
  async function detectAndHandleOAuthCallback(wallet, store) {
16
17
  if (typeof window === 'undefined')
17
18
  return false;
@@ -26,8 +27,9 @@ async function detectAndHandleOAuthCallback(wallet, store) {
26
27
  console.log('OAuth callback detected, completing authentication...');
27
28
  const provider = (params.get(OAUTH_PROVIDER_PARAM) ||
28
29
  'google');
30
+ const sessionId = params.get(OAUTH_SESSION_ID_PARAM) || '';
29
31
  try {
30
- await wallet.auth({ type: 'oauth', provider });
32
+ await wallet.auth({ type: 'oauth', provider, sessionId });
31
33
  const [session, eoaAccount] = await Promise.all([
32
34
  wallet.getSession(),
33
35
  wallet.toAccount(),
@@ -36,6 +38,7 @@ async function detectAndHandleOAuthCallback(wallet, store) {
36
38
  store.getState().setSession(session || null);
37
39
  params.delete(OAUTH_SUCCESS_PARAM);
38
40
  params.delete(OAUTH_PROVIDER_PARAM);
41
+ params.delete(OAUTH_SESSION_ID_PARAM);
39
42
  const newUrl = params.toString()
40
43
  ? `${window.location.pathname}?${params.toString()}`
41
44
  : window.location.pathname;
@@ -46,7 +46,7 @@ function listenForOAuthMessage(authWindow, expectedOrigin, onSuccess, onError) {
46
46
  return;
47
47
  if (event.data.type === 'oauth_success') {
48
48
  cleanup();
49
- onSuccess();
49
+ onSuccess(event.data.sessionId || '');
50
50
  }
51
51
  else if (event.data.type === 'oauth_error') {
52
52
  cleanup();
@@ -73,9 +73,13 @@ function handleOAuthCallback(successParam = 'oauth_success') {
73
73
  const urlParams = new URLSearchParams(window.location.search);
74
74
  const isSuccess = urlParams.get(successParam) === 'true';
75
75
  const error = urlParams.get('error');
76
+ const sessionId = urlParams.get('session_id') ?? undefined;
76
77
  if (window.opener) {
77
78
  if (isSuccess) {
78
- window.opener.postMessage({ type: 'oauth_success' }, window.location.origin);
79
+ const message = { type: 'oauth_success' };
80
+ if (sessionId)
81
+ message.sessionId = sessionId;
82
+ window.opener.postMessage(message, window.location.origin);
79
83
  window.close();
80
84
  return true;
81
85
  }
@@ -130,7 +130,9 @@ function createProvider({ store, config, }) {
130
130
  }
131
131
  if (!account)
132
132
  throw new Error('Not authenticated');
133
- return await account.signMessage({ message });
133
+ return await account.signMessage({
134
+ message: { raw: message },
135
+ });
134
136
  }
135
137
  case 'eth_signTypedData_v4': {
136
138
  if (!params || params.length < 2) {
@@ -93,13 +93,13 @@ export async function authenticateOAuth(config, parameters) {
93
93
  }
94
94
  // Listen for OAuth completion via postMessage
95
95
  return new Promise((resolve, reject) => {
96
- const cleanup = listenForOAuthMessage(authWindow, window.location.origin, async () => {
96
+ const cleanup = listenForOAuthMessage(authWindow, window.location.origin, async (sessionId) => {
97
97
  try {
98
98
  // Complete OAuth authentication with wallet-core
99
- // The backend has stored the OAuth session in a cookie
100
99
  await wallet.auth({
101
100
  type: 'oauth',
102
101
  provider: parameters.provider,
102
+ sessionId,
103
103
  });
104
104
  const [session, eoaAccount] = await Promise.all([
105
105
  wallet.getSession(),
@@ -10,6 +10,7 @@ import { getAAUrl } from './utils/aaUtils.js';
10
10
  // OAuth URL parameter used to detect callback
11
11
  const OAUTH_SUCCESS_PARAM = 'oauth_success';
12
12
  const OAUTH_PROVIDER_PARAM = 'oauth_provider';
13
+ const OAUTH_SESSION_ID_PARAM = 'session_id';
13
14
  /**
14
15
  * Detect OAuth callback from URL params and handle it.
15
16
  * - If in popup: sends postMessage to opener and closes
@@ -31,8 +32,9 @@ async function detectAndHandleOAuthCallback(wallet, store) {
31
32
  console.log('OAuth callback detected, completing authentication...');
32
33
  const provider = (params.get(OAUTH_PROVIDER_PARAM) ||
33
34
  'google');
35
+ const sessionId = params.get(OAUTH_SESSION_ID_PARAM) || '';
34
36
  try {
35
- await wallet.auth({ type: 'oauth', provider });
37
+ await wallet.auth({ type: 'oauth', provider, sessionId });
36
38
  const [session, eoaAccount] = await Promise.all([
37
39
  wallet.getSession(),
38
40
  wallet.toAccount(),
@@ -42,6 +44,7 @@ async function detectAndHandleOAuthCallback(wallet, store) {
42
44
  // Clean up URL params
43
45
  params.delete(OAUTH_SUCCESS_PARAM);
44
46
  params.delete(OAUTH_PROVIDER_PARAM);
47
+ params.delete(OAUTH_SESSION_ID_PARAM);
45
48
  const newUrl = params.toString()
46
49
  ? `${window.location.pathname}?${params.toString()}`
47
50
  : window.location.pathname;
@@ -47,7 +47,7 @@ export function listenForOAuthMessage(authWindow, expectedOrigin, onSuccess, onE
47
47
  return;
48
48
  if (event.data.type === 'oauth_success') {
49
49
  cleanup();
50
- onSuccess();
50
+ onSuccess(event.data.sessionId || '');
51
51
  }
52
52
  else if (event.data.type === 'oauth_error') {
53
53
  cleanup();
@@ -79,9 +79,13 @@ export function handleOAuthCallback(successParam = 'oauth_success') {
79
79
  const urlParams = new URLSearchParams(window.location.search);
80
80
  const isSuccess = urlParams.get(successParam) === 'true';
81
81
  const error = urlParams.get('error');
82
+ const sessionId = urlParams.get('session_id') ?? undefined;
82
83
  if (window.opener) {
83
84
  if (isSuccess) {
84
- window.opener.postMessage({ type: 'oauth_success' }, window.location.origin);
85
+ const message = { type: 'oauth_success' };
86
+ if (sessionId)
87
+ message.sessionId = sessionId;
88
+ window.opener.postMessage(message, window.location.origin);
85
89
  window.close();
86
90
  return true;
87
91
  }
@@ -135,7 +135,9 @@ export function createProvider({ store, config, }) {
135
135
  }
136
136
  if (!account)
137
137
  throw new Error('Not authenticated');
138
- return await account.signMessage({ message });
138
+ return await account.signMessage({
139
+ message: { raw: message },
140
+ });
139
141
  }
140
142
  case 'eth_signTypedData_v4': {
141
143
  if (!params || params.length < 2) {
@@ -1 +1 @@
1
- {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../src/connector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,aAAa,CAAA;AAOrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,EAAE,KAAK,KAAK,EAA4B,MAAM,MAAM,CAAA;AAgE3D,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC,CAAA;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,4BAA4B,GACnC,iBAAiB,CA2TnB"}
1
+ {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../src/connector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,aAAa,CAAA;AAOrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,EAAE,KAAK,KAAK,EAA4B,MAAM,MAAM,CAAA;AAmE3D,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC,CAAA;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,4BAA4B,GACnC,iBAAiB,CA2TnB"}
@@ -18,13 +18,14 @@ export declare function generateOAuthNonce(publicKey: string): string;
18
18
  export declare function buildBackendOAuthUrl(params: BackendOAuthFlowParams): string;
19
19
  export type OAuthMessageData = {
20
20
  type: 'oauth_success' | 'oauth_error';
21
+ sessionId?: string;
21
22
  error?: string;
22
23
  };
23
24
  /**
24
25
  * Listen for OAuth completion via postMessage from popup
25
26
  * The popup sends a message when it detects a successful redirect
26
27
  */
27
- export declare function listenForOAuthMessage(authWindow: Window, expectedOrigin: string, onSuccess: () => void, onError: (error: Error) => void): () => void;
28
+ export declare function listenForOAuthMessage(authWindow: Window, expectedOrigin: string, onSuccess: (sessionId: string) => void, onError: (error: Error) => void): () => void;
28
29
  /**
29
30
  * Handle OAuth callback on the return page
30
31
  * Call this on the page that receives the OAuth redirect
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/oauth.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe;;CAElB,CAAA;AAEV,MAAM,MAAM,aAAa,GACvB,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAA;AAExD,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,aAAa,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAKD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBzD;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAa3E;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,eAAe,GAAG,aAAa,CAAA;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,IAAI,EACrB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC9B,MAAM,IAAI,CAkCZ;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,SAAkB,GAAG,OAAO,CAyB3E"}
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/oauth.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe;;CAElB,CAAA;AAEV,MAAM,MAAM,aAAa,GACvB,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAA;AAExD,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,aAAa,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAKD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBzD;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAa3E;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,eAAe,GAAG,aAAa,CAAA;IACrC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,EACtC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC9B,MAAM,IAAI,CAkCZ;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,SAAkB,GAAG,OAAO,CAyB3E"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAC7B,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,MAAM,CAAA;AAE/C,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAI1D,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAA;IAClD,MAAM,EAAE,4BAA4B,CAAA;IACpC,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,aAAa,CAAC,GAAG;IACxE,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACvE,OAAO,IAAI,IAAI,CAAA;CAChB,CAAA;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,MAAM,GACP,EAAE,oBAAoB,GAAG,eAAe,CAsNxC"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAC7B,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,MAAM,CAAA;AAE/C,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAI1D,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAA;IAClD,MAAM,EAAE,4BAA4B,CAAA;IACpC,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,aAAa,CAAC,GAAG;IACxE,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACvE,OAAO,IAAI,IAAI,CAAA;CAChB,CAAA;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,MAAM,GACP,EAAE,oBAAoB,GAAG,eAAe,CAwNxC"}