@campnetwork/origin 0.0.1 → 0.0.2
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/dist/core.cjs +54 -108
- package/dist/core.d.ts +1 -75
- package/dist/core.esm.d.ts +1 -75
- package/dist/core.esm.js +61 -115
- package/dist/react/index.esm.d.ts +232 -2
- package/dist/react/index.esm.js +1130 -449
- package/package.json +1 -1
package/dist/core.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import t from"axios";import{custom as e,createWalletClient as i,createPublicClient as n,http as
|
|
1
|
+
import t from"axios";import{custom as e,createWalletClient as i,createPublicClient as n,http as s,getAbiItem as r,encodeFunctionData as o}from"viem";import{toAccount as a}from"viem/accounts";import{createSiweMessage as d}from"viem/siwe";
|
|
2
2
|
/******************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
|
@@ -13,7 +13,7 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
15
|
***************************************************************************** */
|
|
16
|
-
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */function
|
|
16
|
+
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */function h(t,e,i,n){return new(i||(i=Promise))((function(s,r){function o(t){try{d(n.next(t))}catch(t){r(t)}}function a(t){try{d(n.throw(t))}catch(t){r(t)}}function d(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}d((n=n.apply(t,e||[])).next())}))}function c(t,e,i,n){if("a"===i&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?n:"a"===i?n.call(t):n?n.value:e.get(t)}function l(t,e,i,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,i):s?s.value=i:e.set(t,i),i}"function"==typeof SuppressedError&&SuppressedError;class u extends Error{constructor(t,e){super(t),this.name="APIError",this.statusCode=e||500,Error.captureStackTrace(this,this.constructor)}toJSON(){return{error:this.name,message:this.message,statusCode:this.statusCode||500}}}
|
|
17
17
|
/**
|
|
18
18
|
* Makes a GET request to the given URL with the provided headers.
|
|
19
19
|
*
|
|
@@ -21,7 +21,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
21
21
|
* @param {object} headers - The headers to include in the request.
|
|
22
22
|
* @returns {Promise<object>} - The response data.
|
|
23
23
|
* @throws {APIError} - Throws an error if the request fails.
|
|
24
|
-
*/function f(e){return
|
|
24
|
+
*/function f(e){return h(this,arguments,void 0,(function*(e,i={}){try{return(yield t.get(e,{headers:i})).data}catch(t){if(t.response)throw new u(t.response.data.message||"API request failed",t.response.status);throw new u("Network error or server is unavailable",500)}}))}
|
|
25
25
|
/**
|
|
26
26
|
* Constructs a query string from an object of query parameters.
|
|
27
27
|
*
|
|
@@ -35,7 +35,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
35
35
|
* @param {object} params - An object representing query parameters.
|
|
36
36
|
* @returns {string} - The complete URL with query string.
|
|
37
37
|
*/
|
|
38
|
-
function w(t,e={}){const i=function(t={}){return Object.keys(t).map((e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`)).join("&")}(e);return i?`${t}?${i}`:t}const
|
|
38
|
+
function w(t,e={}){const i=function(t={}){return Object.keys(t).map((e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`)).join("&")}(e);return i?`${t}?${i}`:t}const m="https://wv2h4to5qa.execute-api.us-east-2.amazonaws.com/dev/twitter",p="https://wv2h4to5qa.execute-api.us-east-2.amazonaws.com/dev/spotify";
|
|
39
39
|
/**
|
|
40
40
|
* The TwitterAPI class.
|
|
41
41
|
* @class
|
|
@@ -53,7 +53,7 @@ constructor({apiKey:t}){this.apiKey=t}
|
|
|
53
53
|
* @param {string} twitterUserName - The Twitter username.
|
|
54
54
|
* @returns {Promise<object>} - The user details.
|
|
55
55
|
* @throws {APIError} - Throws an error if the request fails.
|
|
56
|
-
*/fetchUserByUsername(t){return
|
|
56
|
+
*/fetchUserByUsername(t){return h(this,void 0,void 0,(function*(){const e=w(`${m}/user`,{twitterUserName:t});return this._fetchDataWithAuth(e)}))}
|
|
57
57
|
/**
|
|
58
58
|
* Fetch tweets by Twitter username.
|
|
59
59
|
* @param {string} twitterUserName - The Twitter username.
|
|
@@ -61,7 +61,7 @@ constructor({apiKey:t}){this.apiKey=t}
|
|
|
61
61
|
* @param {number} limit - The number of items per page.
|
|
62
62
|
* @returns {Promise<object>} - The tweets.
|
|
63
63
|
* @throws {APIError} - Throws an error if the request fails.
|
|
64
|
-
*/fetchTweetsByUsername(t){return
|
|
64
|
+
*/fetchTweetsByUsername(t){return h(this,arguments,void 0,(function*(t,e=1,i=10){const n=w(`${m}/tweets`,{twitterUserName:t,page:e,limit:i});return this._fetchDataWithAuth(n)}))}
|
|
65
65
|
/**
|
|
66
66
|
* Fetch followers by Twitter username.
|
|
67
67
|
* @param {string} twitterUserName - The Twitter username.
|
|
@@ -69,7 +69,7 @@ constructor({apiKey:t}){this.apiKey=t}
|
|
|
69
69
|
* @param {number} limit - The number of items per page.
|
|
70
70
|
* @returns {Promise<object>} - The followers.
|
|
71
71
|
* @throws {APIError} - Throws an error if the request fails.
|
|
72
|
-
*/fetchFollowersByUsername(t){return
|
|
72
|
+
*/fetchFollowersByUsername(t){return h(this,arguments,void 0,(function*(t,e=1,i=10){const n=w(`${m}/followers`,{twitterUserName:t,page:e,limit:i});return this._fetchDataWithAuth(n)}))}
|
|
73
73
|
/**
|
|
74
74
|
* Fetch following by Twitter username.
|
|
75
75
|
* @param {string} twitterUserName - The Twitter username.
|
|
@@ -77,13 +77,13 @@ constructor({apiKey:t}){this.apiKey=t}
|
|
|
77
77
|
* @param {number} limit - The number of items per page.
|
|
78
78
|
* @returns {Promise<object>} - The following.
|
|
79
79
|
* @throws {APIError} - Throws an error if the request fails.
|
|
80
|
-
*/fetchFollowingByUsername(t){return
|
|
80
|
+
*/fetchFollowingByUsername(t){return h(this,arguments,void 0,(function*(t,e=1,i=10){const n=w(`${m}/following`,{twitterUserName:t,page:e,limit:i});return this._fetchDataWithAuth(n)}))}
|
|
81
81
|
/**
|
|
82
82
|
* Fetch tweet by tweet ID.
|
|
83
83
|
* @param {string} tweetId - The tweet ID.
|
|
84
84
|
* @returns {Promise<object>} - The tweet.
|
|
85
85
|
* @throws {APIError} - Throws an error if the request fails.
|
|
86
|
-
*/fetchTweetById(t){return
|
|
86
|
+
*/fetchTweetById(t){return h(this,void 0,void 0,(function*(){const e=w(`${m}/getTweetById`,{tweetId:t});return this._fetchDataWithAuth(e)}))}
|
|
87
87
|
/**
|
|
88
88
|
* Fetch user by wallet address.
|
|
89
89
|
* @param {string} walletAddress - The wallet address.
|
|
@@ -91,7 +91,7 @@ constructor({apiKey:t}){this.apiKey=t}
|
|
|
91
91
|
* @param {number} limit - The number of items per page.
|
|
92
92
|
* @returns {Promise<object>} - The user data.
|
|
93
93
|
* @throws {APIError} - Throws an error if the request fails.
|
|
94
|
-
*/fetchUserByWalletAddress(t){return
|
|
94
|
+
*/fetchUserByWalletAddress(t){return h(this,arguments,void 0,(function*(t,e=1,i=10){const n=w(`${m}/wallet-twitter-data`,{walletAddress:t,page:e,limit:i});return this._fetchDataWithAuth(n)}))}
|
|
95
95
|
/**
|
|
96
96
|
* Fetch reposted tweets by Twitter username.
|
|
97
97
|
* @param {string} twitterUserName - The Twitter username.
|
|
@@ -99,7 +99,7 @@ constructor({apiKey:t}){this.apiKey=t}
|
|
|
99
99
|
* @param {number} limit - The number of items per page.
|
|
100
100
|
* @returns {Promise<object>} - The reposted tweets.
|
|
101
101
|
* @throws {APIError} - Throws an error if the request fails.
|
|
102
|
-
*/fetchRepostedByUsername(t){return
|
|
102
|
+
*/fetchRepostedByUsername(t){return h(this,arguments,void 0,(function*(t,e=1,i=10){const n=w(`${m}/reposted`,{twitterUserName:t,page:e,limit:i});return this._fetchDataWithAuth(n)}))}
|
|
103
103
|
/**
|
|
104
104
|
* Fetch replies by Twitter username.
|
|
105
105
|
* @param {string} twitterUserName - The Twitter username.
|
|
@@ -107,7 +107,7 @@ constructor({apiKey:t}){this.apiKey=t}
|
|
|
107
107
|
* @param {number} limit - The number of items per page.
|
|
108
108
|
* @returns {Promise<object>} - The replies.
|
|
109
109
|
* @throws {APIError} - Throws an error if the request fails.
|
|
110
|
-
*/fetchRepliesByUsername(t){return
|
|
110
|
+
*/fetchRepliesByUsername(t){return h(this,arguments,void 0,(function*(t,e=1,i=10){const n=w(`${m}/replies`,{twitterUserName:t,page:e,limit:i});return this._fetchDataWithAuth(n)}))}
|
|
111
111
|
/**
|
|
112
112
|
* Fetch likes by Twitter username.
|
|
113
113
|
* @param {string} twitterUserName - The Twitter username.
|
|
@@ -115,7 +115,7 @@ constructor({apiKey:t}){this.apiKey=t}
|
|
|
115
115
|
* @param {number} limit - The number of items per page.
|
|
116
116
|
* @returns {Promise<object>} - The likes.
|
|
117
117
|
* @throws {APIError} - Throws an error if the request fails.
|
|
118
|
-
*/fetchLikesByUsername(t){return
|
|
118
|
+
*/fetchLikesByUsername(t){return h(this,arguments,void 0,(function*(t,e=1,i=10){const n=w(`${m}/event/likes/${t}`,{page:e,limit:i});return this._fetchDataWithAuth(n)}))}
|
|
119
119
|
/**
|
|
120
120
|
* Fetch follows by Twitter username.
|
|
121
121
|
* @param {string} twitterUserName - The Twitter username.
|
|
@@ -123,7 +123,7 @@ constructor({apiKey:t}){this.apiKey=t}
|
|
|
123
123
|
* @param {number} limit - The number of items per page.
|
|
124
124
|
* @returns {Promise<object>} - The follows.
|
|
125
125
|
* @throws {APIError} - Throws an error if the request fails.
|
|
126
|
-
*/fetchFollowsByUsername(t){return
|
|
126
|
+
*/fetchFollowsByUsername(t){return h(this,arguments,void 0,(function*(t,e=1,i=10){const n=w(`${m}/event/follows/${t}`,{page:e,limit:i});return this._fetchDataWithAuth(n)}))}
|
|
127
127
|
/**
|
|
128
128
|
* Fetch viewed tweets by Twitter username.
|
|
129
129
|
* @param {string} twitterUserName - The Twitter username.
|
|
@@ -131,13 +131,13 @@ constructor({apiKey:t}){this.apiKey=t}
|
|
|
131
131
|
* @param {number} limit - The number of items per page.
|
|
132
132
|
* @returns {Promise<object>} - The viewed tweets.
|
|
133
133
|
* @throws {APIError} - Throws an error if the request fails.
|
|
134
|
-
*/fetchViewedTweetsByUsername(t){return
|
|
134
|
+
*/fetchViewedTweetsByUsername(t){return h(this,arguments,void 0,(function*(t,e=1,i=10){const n=w(`${m}/event/viewed-tweets/${t}`,{page:e,limit:i});return this._fetchDataWithAuth(n)}))}
|
|
135
135
|
/**
|
|
136
136
|
* Private method to fetch data with authorization header.
|
|
137
137
|
* @param {string} url - The URL to fetch.
|
|
138
138
|
* @returns {Promise<object>} - The response data.
|
|
139
139
|
* @throws {APIError} - Throws an error if the request fails.
|
|
140
|
-
*/_fetchDataWithAuth(t){return
|
|
140
|
+
*/_fetchDataWithAuth(t){return h(this,void 0,void 0,(function*(){if(!this.apiKey)throw new u("API key is required for fetching data",401);try{return yield f(t,{"x-api-key":this.apiKey})}catch(t){throw new u(t.message,t.statusCode)}}))}}
|
|
141
141
|
/**
|
|
142
142
|
* The SpotifyAPI class.
|
|
143
143
|
* @class
|
|
@@ -155,85 +155,85 @@ constructor(t){this.apiKey=t.apiKey}
|
|
|
155
155
|
* @param {string} spotifyId - The user's Spotify ID.
|
|
156
156
|
* @returns {Promise<object>} - The saved tracks.
|
|
157
157
|
* @throws {APIError} - Throws an error if the request fails.
|
|
158
|
-
*/fetchSavedTracksById(t){return
|
|
158
|
+
*/fetchSavedTracksById(t){return h(this,void 0,void 0,(function*(){const e=w(`${p}/save-tracks`,{spotifyId:t});return this._fetchDataWithAuth(e)}))}
|
|
159
159
|
/**
|
|
160
160
|
* Fetch the played tracks of a user by Spotify ID.
|
|
161
161
|
* @param {string} spotifyId - The user's Spotify ID.
|
|
162
162
|
* @returns {Promise<object>} - The played tracks.
|
|
163
163
|
* @throws {APIError} - Throws an error if the request fails.
|
|
164
|
-
*/fetchPlayedTracksById(t){return
|
|
164
|
+
*/fetchPlayedTracksById(t){return h(this,void 0,void 0,(function*(){const e=w(`${p}/played-tracks`,{spotifyId:t});return this._fetchDataWithAuth(e)}))}
|
|
165
165
|
/**
|
|
166
166
|
* Fetch the user's saved albums by Spotify user ID.
|
|
167
167
|
* @param {string} spotifyId - The user's Spotify ID.
|
|
168
168
|
* @returns {Promise<object>} - The saved albums.
|
|
169
169
|
* @throws {APIError} - Throws an error if the request fails.
|
|
170
|
-
*/fetchSavedAlbumsById(t){return
|
|
170
|
+
*/fetchSavedAlbumsById(t){return h(this,void 0,void 0,(function*(){const e=w(`${p}/saved-albums`,{spotifyId:t});return this._fetchDataWithAuth(e)}))}
|
|
171
171
|
/**
|
|
172
172
|
* Fetch the user's saved playlists by Spotify user ID.
|
|
173
173
|
* @param {string} spotifyId - The user's Spotify ID.
|
|
174
174
|
* @returns {Promise<object>} - The saved playlists.
|
|
175
175
|
* @throws {APIError} - Throws an error if the request fails.
|
|
176
|
-
*/fetchSavedPlaylistsById(t){return
|
|
176
|
+
*/fetchSavedPlaylistsById(t){return h(this,void 0,void 0,(function*(){const e=w(`${p}/saved-playlists`,{spotifyId:t});return this._fetchDataWithAuth(e)}))}
|
|
177
177
|
/**
|
|
178
178
|
* Fetch the tracks of an album by album ID.
|
|
179
179
|
* @param {string} spotifyId - The Spotify ID of the user.
|
|
180
180
|
* @param {string} albumId - The album ID.
|
|
181
181
|
* @returns {Promise<object>} - The tracks in the album.
|
|
182
182
|
* @throws {APIError} - Throws an error if the request fails.
|
|
183
|
-
*/fetchTracksInAlbum(t,e){return
|
|
183
|
+
*/fetchTracksInAlbum(t,e){return h(this,void 0,void 0,(function*(){const i=w(`${p}/album/tracks`,{spotifyId:t,albumId:e});return this._fetchDataWithAuth(i)}))}
|
|
184
184
|
/**
|
|
185
185
|
* Fetch the tracks in a playlist by playlist ID.
|
|
186
186
|
* @param {string} spotifyId - The Spotify ID of the user.
|
|
187
187
|
* @param {string} playlistId - The playlist ID.
|
|
188
188
|
* @returns {Promise<object>} - The tracks in the playlist.
|
|
189
189
|
* @throws {APIError} - Throws an error if the request fails.
|
|
190
|
-
*/fetchTracksInPlaylist(t,e){return
|
|
190
|
+
*/fetchTracksInPlaylist(t,e){return h(this,void 0,void 0,(function*(){const i=w(`${p}/playlist/tracks`,{spotifyId:t,playlistId:e});return this._fetchDataWithAuth(i)}))}
|
|
191
191
|
/**
|
|
192
192
|
* Fetch the user's Spotify data by wallet address.
|
|
193
193
|
* @param {string} walletAddress - The wallet address.
|
|
194
194
|
* @returns {Promise<object>} - The user's Spotify data.
|
|
195
195
|
* @throws {APIError} - Throws an error if the request fails.
|
|
196
|
-
*/fetchUserByWalletAddress(t){return
|
|
196
|
+
*/fetchUserByWalletAddress(t){return h(this,void 0,void 0,(function*(){const e=w(`${p}/wallet-spotify-data`,{walletAddress:t});return this._fetchDataWithAuth(e)}))}
|
|
197
197
|
/**
|
|
198
198
|
* Private method to fetch data with authorization header.
|
|
199
199
|
* @param {string} url - The URL to fetch.
|
|
200
200
|
* @returns {Promise<object>} - The response data.
|
|
201
201
|
* @throws {APIError} - Throws an error if the request fails.
|
|
202
|
-
*/_fetchDataWithAuth(t){return
|
|
202
|
+
*/_fetchDataWithAuth(t){return h(this,void 0,void 0,(function*(){if(!this.apiKey)throw new u("API key is required for fetching data",401);try{return yield f(t,{"x-api-key":this.apiKey})}catch(t){throw new u(t.message,t.statusCode)}}))}}const g={id:123420001114,name:"Basecamp",nativeCurrency:{decimals:18,name:"Camp",symbol:"CAMP"},rpcUrls:{default:{http:["https://rpc-campnetwork.xyz","https://rpc.basecamp.t.raas.gelato.cloud"]}},blockExplorers:{default:{name:"Explorer",url:"https://basecamp.cloud.blockscout.com/"}}};
|
|
203
203
|
// @ts-ignore
|
|
204
|
-
let I=null,
|
|
204
|
+
let I=null,k=null;const T=(t,n="window.ethereum",s)=>{var r;if(!t&&!I)return console.warn("Provider is required to create a client."),null;if(!I||I.transport.name!==n&&t||s!==(null===(r=I.account)||void 0===r?void 0:r.address)&&t){const r={chain:g,transport:e(t,{name:n})};s&&(r.account=a(s)),I=i(r)}return I},A=()=>(k||(k=n({chain:g,transport:s()})),k);var E="Connect with Camp Network",b="https://wv2h4to5qa.execute-api.us-east-2.amazonaws.com/dev",$={USER_CONNECTED:"ed42542d-b676-4112-b6d9-6db98048b2e0",USER_DISCONNECTED:"20af31ac-e602-442e-9e0e-b589f4dd4016",TWITTER_LINKED:"7fbea086-90ef-4679-ba69-f47f9255b34c",DISCORD_LINKED:"d73f5ae3-a8e8-48f2-8532-85e0c7780d6a",SPOTIFY_LINKED:"fc1788b4-c984-42c8-96f4-c87f6bb0b8f7",TIKTOK_LINKED:"4a2ffdd3-f0e9-4784-8b49-ff76ec1c0a6a",TELEGRAM_LINKED:"9006bc5d-bcc9-4d01-a860-4f1a201e8e47"};let S=[];const j=()=>S,C=t=>{function e(e){S.some((t=>t.info.uuid===e.detail.info.uuid))||(S=[...S,e.detail],t(S))}if("undefined"!=typeof window)return window.addEventListener("eip6963:announceProvider",e),window.dispatchEvent(new Event("eip6963:requestProvider")),()=>window.removeEventListener("eip6963:announceProvider",e)};var U,O,N,P,_,D,B,W,x,F,q,K,z,L;
|
|
205
205
|
/**
|
|
206
206
|
* The Origin class
|
|
207
207
|
* Handles the upload of files to Origin, as well as querying the user's stats
|
|
208
|
-
*/class J{constructor(
|
|
208
|
+
*/class J{constructor(e){U.set(this,(t=>h(this,void 0,void 0,(function*(){const e=yield fetch(`${b}/auth/origin/upload-url`,{method:"POST",body:JSON.stringify({name:t.name,type:t.type}),headers:{Authorization:`Bearer ${this.jwt}`}}),i=yield e.json();return i.isError?i.message:i.data})))),O.set(this,((t,e)=>h(this,void 0,void 0,(function*(){(yield fetch(`${b}/auth/origin/update-status`,{method:"PATCH",body:JSON.stringify({status:e,fileKey:t}),headers:{Authorization:`Bearer ${this.jwt}`,"Content-Type":"application/json"}})).ok||console.error("Failed to update origin status")})))),this.uploadFile=(e,i)=>h(this,void 0,void 0,(function*(){const n=yield c(this,U,"f").call(this,e);if(n){try{yield((e,i,n)=>new Promise(((s,r)=>{t.put(i,e,Object.assign({headers:{"Content-Type":e.type}},"undefined"!=typeof window&&"function"==typeof n?{onUploadProgress:t=>{if(t.total){const e=t.loaded/t.total*100;n(e)}}}:{})).then((t=>{s(t.data)})).catch((t=>{var e;const i=(null===(e=null==t?void 0:t.response)||void 0===e?void 0:e.data)||(null==t?void 0:t.message)||"Upload failed";r(i)}))})))(e,n.url,(null==i?void 0:i.progressCallback)||(()=>{}))}catch(t){throw yield c(this,O,"f").call(this,n.key,"failed"),new Error("Failed to upload file: "+t)}yield c(this,O,"f").call(this,n.key,"success")}else console.error("Failed to generate upload URL")})),this.getOriginUploads=()=>h(this,void 0,void 0,(function*(){const t=yield fetch(`${b}/auth/origin/files`,{method:"GET",headers:{Authorization:`Bearer ${this.jwt}`}});if(!t.ok)return console.error("Failed to get origin uploads"),null;return(yield t.json()).data})),this.jwt=e}
|
|
209
209
|
/**
|
|
210
210
|
* Get the user's Origin stats (multiplier, consent, usage, etc.).
|
|
211
211
|
* @returns {Promise<OriginUsageReturnType>} A promise that resolves with the user's Origin stats.
|
|
212
|
-
*/getOriginUsage(){return
|
|
212
|
+
*/getOriginUsage(){return h(this,void 0,void 0,(function*(){const t=yield fetch(`${b}/auth/origin/usage`,{method:"GET",headers:{Authorization:`Bearer ${this.jwt}`,
|
|
213
213
|
// "x-client-id": this.clientId,
|
|
214
|
-
"Content-Type":"application/json"}}).then((t=>t.json()));if(!t.isError&&t.data.user)return t;throw new
|
|
214
|
+
"Content-Type":"application/json"}}).then((t=>t.json()));if(!t.isError&&t.data.user)return t;throw new u(t.message||"Failed to fetch Origin usage")}))}
|
|
215
215
|
/**
|
|
216
216
|
* Set the user's consent for Origin usage.
|
|
217
217
|
* @param {boolean} consent The user's consent.
|
|
218
218
|
* @returns {Promise<void>}
|
|
219
219
|
* @throws {Error|APIError} - Throws an error if the user is not authenticated. Also throws an error if the consent is not provided.
|
|
220
|
-
*/setOriginConsent(t){return
|
|
220
|
+
*/setOriginConsent(t){return h(this,void 0,void 0,(function*(){if(void 0===t)throw new u("Consent is required");const e=yield fetch(`${b}/auth/origin/status`,{method:"PATCH",headers:{Authorization:`Bearer ${this.jwt}`,
|
|
221
221
|
// "x-client-id": this.clientId,
|
|
222
|
-
"Content-Type":"application/json"},body:JSON.stringify({active:t})}).then((t=>t.json()));if(e.isError)throw new
|
|
222
|
+
"Content-Type":"application/json"},body:JSON.stringify({active:t})}).then((t=>t.json()));if(e.isError)throw new u(e.message||"Failed to set Origin consent")}))}
|
|
223
223
|
/**
|
|
224
224
|
* Set the user's Origin multiplier.
|
|
225
225
|
* @param {number} multiplier The user's Origin multiplier.
|
|
226
226
|
* @returns {Promise<void>}
|
|
227
227
|
* @throws {Error|APIError} - Throws an error if the user is not authenticated. Also throws an error if the multiplier is not provided.
|
|
228
|
-
*/setOriginMultiplier(t){return
|
|
228
|
+
*/setOriginMultiplier(t){return h(this,void 0,void 0,(function*(){if(void 0===t)throw new u("Multiplier is required");const e=yield fetch(`${b}/auth/origin/multiplier`,{method:"PATCH",headers:{Authorization:`Bearer ${this.jwt}`,
|
|
229
229
|
// "x-client-id": this.clientId,
|
|
230
|
-
"Content-Type":"application/json"},body:JSON.stringify({multiplier:t})}).then((t=>t.json()));if(e.isError)throw new
|
|
230
|
+
"Content-Type":"application/json"},body:JSON.stringify({multiplier:t})}).then((t=>t.json()));if(e.isError)throw new u(e.message||"Failed to set Origin multiplier")}))}}U=new WeakMap,O=new WeakMap;
|
|
231
231
|
/**
|
|
232
232
|
* The Auth class.
|
|
233
233
|
* @class
|
|
234
234
|
* @classdesc The Auth class is used to authenticate the user.
|
|
235
235
|
*/
|
|
236
|
-
class
|
|
236
|
+
class R{
|
|
237
237
|
/**
|
|
238
238
|
* Constructor for the Auth class.
|
|
239
239
|
* @param {object} options The options object.
|
|
@@ -243,11 +243,11 @@ class M{
|
|
|
243
243
|
* @param {object} [options.ackeeInstance] The Ackee instance.
|
|
244
244
|
* @throws {APIError} - Throws an error if the clientId is not provided.
|
|
245
245
|
*/
|
|
246
|
-
constructor({clientId:t,redirectUri:e,allowAnalytics:i=!0,ackeeInstance:n}){if(
|
|
246
|
+
constructor({clientId:t,redirectUri:e,allowAnalytics:i=!0,ackeeInstance:n}){if(N.add(this),P.set(this,void 0),_.set(this,void 0),!t)throw new Error("clientId is required");this.viem=null,
|
|
247
247
|
// if (typeof window !== "undefined") {
|
|
248
248
|
// if (window.ethereum) this.viem = getClient(window.ethereum);
|
|
249
249
|
// }
|
|
250
|
-
this.redirectUri=(t=>{const e=["twitter","discord","spotify"];return"object"==typeof t?e.reduce(((e,i)=>(e[i]=t[i]||("undefined"!=typeof window?window.location.href:""),e)),{}):"string"==typeof t?e.reduce(((e,i)=>(e[i]=t,e)),{}):t?{}:e.reduce(((t,e)=>(t[e]="undefined"!=typeof window?window.location.href:"",t)),{})})(e),n&&
|
|
250
|
+
this.redirectUri=(t=>{const e=["twitter","discord","spotify"];return"object"==typeof t?e.reduce(((e,i)=>(e[i]=t[i]||("undefined"!=typeof window?window.location.href:""),e)),{}):"string"==typeof t?e.reduce(((e,i)=>(e[i]=t,e)),{}):t?{}:e.reduce(((t,e)=>(t[e]="undefined"!=typeof window?window.location.href:"",t)),{})})(e),n&&l(this,_,n,"f"),i&&c(this,_,"f"),this.clientId=t,this.isAuthenticated=!1,this.jwt=null,this.origin=null,this.walletAddress=null,this.userId=null,l(this,P,{},"f"),C((t=>{c(this,N,"m",D).call(this,"providers",t)})),c(this,N,"m",B).call(this)}
|
|
251
251
|
/**
|
|
252
252
|
* Subscribe to an event. Possible events are "state", "provider", "providers", and "viem".
|
|
253
253
|
* @param {("state"|"provider"|"providers"|"viem")} event The event.
|
|
@@ -257,21 +257,18 @@ this.redirectUri=(t=>{const e=["twitter","discord","spotify"];return"object"==ty
|
|
|
257
257
|
* auth.on("state", (state) => {
|
|
258
258
|
* console.log(state);
|
|
259
259
|
* });
|
|
260
|
-
*/on(t,e){
|
|
260
|
+
*/on(t,e){c(this,P,"f")[t]||(c(this,P,"f")[t]=[]),c(this,P,"f")[t].push(e),"providers"===t&&e(j())}
|
|
261
261
|
/**
|
|
262
262
|
* Set the loading state.
|
|
263
263
|
* @param {boolean} loading The loading state.
|
|
264
264
|
* @returns {void}
|
|
265
|
-
*/setLoading(t){
|
|
265
|
+
*/setLoading(t){c(this,N,"m",D).call(this,"state",t?"loading":this.isAuthenticated?"authenticated":"unauthenticated")}
|
|
266
266
|
/**
|
|
267
267
|
* Set the provider. This is useful for setting the provider when the user selects a provider from the UI or when dApp wishes to use a specific provider.
|
|
268
268
|
* @param {object} options The options object. Includes the provider and the provider info.
|
|
269
269
|
* @returns {void}
|
|
270
270
|
* @throws {APIError} - Throws an error if the provider is not provided.
|
|
271
|
-
*/setProvider({provider:t,info:e,address:i}){if(!t)throw new
|
|
272
|
-
// const addr = provider.selectedAddress || provider.accounts[0];
|
|
273
|
-
// TOFIX: the address can be the leftover address, make sure it resets after disconnection
|
|
274
|
-
this.viem=k(t,e.name,i),h(this,D,"m",W).call(this,"viem",this.viem),h(this,D,"m",W).call(this,"provider",{provider:t,info:e})}
|
|
271
|
+
*/setProvider({provider:t,info:e,address:i}){if(!t)throw new u("provider is required");this.viem=T(t,e.name,i),c(this,N,"m",D).call(this,"viem",this.viem),c(this,N,"m",D).call(this,"provider",{provider:t,info:e})}
|
|
275
272
|
/**
|
|
276
273
|
* Set the wallet address. This is useful for edge cases where the provider can't return the wallet address. Don't use this unless you know what you're doing.
|
|
277
274
|
* @param {string} walletAddress The wallet address.
|
|
@@ -280,13 +277,12 @@ this.viem=k(t,e.name,i),h(this,D,"m",W).call(this,"viem",this.viem),h(this,D,"m"
|
|
|
280
277
|
/**
|
|
281
278
|
* Disconnect the user.
|
|
282
279
|
* @returns {Promise<void>}
|
|
283
|
-
*/disconnect(){return
|
|
280
|
+
*/disconnect(){return h(this,void 0,void 0,(function*(){this.isAuthenticated&&(this.isAuthenticated=!1,this.walletAddress=null,this.userId=null,this.jwt=null,this.origin=null,localStorage.removeItem("camp-sdk:wallet-address"),localStorage.removeItem("camp-sdk:user-id"),localStorage.removeItem("camp-sdk:jwt"),c(this,N,"m",D).call(this,"state","unauthenticated"),yield c(this,N,"m",K).call(this,$.USER_DISCONNECTED,"User Disconnected"))}))}
|
|
284
281
|
/**
|
|
285
282
|
* Connect the user's wallet and sign the message.
|
|
286
283
|
* @returns {Promise<{ success: boolean; message: string; walletAddress: string }>} A promise that resolves with the authentication result.
|
|
287
284
|
* @throws {APIError} - Throws an error if the user cannot be authenticated.
|
|
288
|
-
*/connect(){return
|
|
289
|
-
// ORIGIN
|
|
285
|
+
*/connect(){return h(this,void 0,void 0,(function*(){c(this,N,"m",D).call(this,"state","loading");try{this.walletAddress||(yield c(this,N,"m",W).call(this));const t=yield c(this,N,"m",x).call(this),e=c(this,N,"m",q).call(this,t),i=yield this.viem.signMessage({account:this.walletAddress,message:e}),n=yield c(this,N,"m",F).call(this,e,i);if(n.success)return this.isAuthenticated=!0,this.userId=n.userId,this.jwt=n.token,this.origin=new J(this.jwt),localStorage.setItem("camp-sdk:jwt",this.jwt),localStorage.setItem("camp-sdk:wallet-address",this.walletAddress),localStorage.setItem("camp-sdk:user-id",this.userId),c(this,N,"m",D).call(this,"state","authenticated"),yield c(this,N,"m",K).call(this,$.USER_CONNECTED,"User Connected"),{success:!0,message:"Successfully authenticated",walletAddress:this.walletAddress};throw this.isAuthenticated=!1,c(this,N,"m",D).call(this,"state","unauthenticated"),new u("Failed to authenticate")}catch(t){throw this.isAuthenticated=!1,c(this,N,"m",D).call(this,"state","unauthenticated"),new u(t)}}))}
|
|
290
286
|
/**
|
|
291
287
|
* Get the user's linked social accounts.
|
|
292
288
|
* @returns {Promise<Record<string, boolean>>} A promise that resolves with the user's linked social accounts.
|
|
@@ -295,50 +291,49 @@ this.viem=k(t,e.name,i),h(this,D,"m",W).call(this,"viem",this.viem),h(this,D,"m"
|
|
|
295
291
|
* const auth = new Auth({ clientId: "your-client-id" });
|
|
296
292
|
* const socials = await auth.getLinkedSocials();
|
|
297
293
|
* console.log(socials);
|
|
298
|
-
*/
|
|
299
|
-
getLinkedSocials(){return c(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");const t=yield fetch(`${$}/auth/client-user/connections-sdk`,{method:"GET",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"}}).then((t=>t.json()));if(t.isError)throw new l(t.message||"Failed to fetch connections");{const e={};return Object.keys(t.data.data).forEach((i=>{e[i.split("User")[0]]=t.data.data[i]})),e}}))}
|
|
294
|
+
*/getLinkedSocials(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");const t=yield fetch(`${b}/auth/client-user/connections-sdk`,{method:"GET",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"}}).then((t=>t.json()));if(t.isError)throw new u(t.message||"Failed to fetch connections");{const e={};return Object.keys(t.data.data).forEach((i=>{e[i.split("User")[0]]=t.data.data[i]})),e}}))}
|
|
300
295
|
/**
|
|
301
296
|
* Link the user's Twitter account.
|
|
302
297
|
* @returns {Promise<void>}
|
|
303
298
|
* @throws {Error} - Throws an error if the user is not authenticated.
|
|
304
|
-
*/linkTwitter(){return
|
|
299
|
+
*/linkTwitter(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");
|
|
305
300
|
// await this.#sendAnalyticsEvent(
|
|
306
301
|
// constants.ACKEE_EVENTS.TWITTER_LINKED,
|
|
307
302
|
// "Twitter Linked"
|
|
308
303
|
// );
|
|
309
|
-
window.location.href=`${
|
|
304
|
+
window.location.href=`${b}/twitter/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri.twitter}`}))}
|
|
310
305
|
/**
|
|
311
306
|
* Link the user's Discord account.
|
|
312
307
|
* @returns {Promise<void>}
|
|
313
308
|
* @throws {Error} - Throws an error if the user is not authenticated.
|
|
314
|
-
*/linkDiscord(){return
|
|
309
|
+
*/linkDiscord(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");
|
|
315
310
|
// await this.#sendAnalyticsEvent(
|
|
316
311
|
// constants.ACKEE_EVENTS.DISCORD_LINKED,
|
|
317
312
|
// "Discord Linked"
|
|
318
313
|
// );
|
|
319
|
-
window.location.href=`${
|
|
314
|
+
window.location.href=`${b}/discord/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri.discord}`}))}
|
|
320
315
|
/**
|
|
321
316
|
* Link the user's Spotify account.
|
|
322
317
|
* @returns {Promise<void>}
|
|
323
318
|
* @throws {Error} - Throws an error if the user is not authenticated.
|
|
324
|
-
*/linkSpotify(){return
|
|
319
|
+
*/linkSpotify(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");
|
|
325
320
|
// await this.#sendAnalyticsEvent(
|
|
326
321
|
// constants.ACKEE_EVENTS.SPOTIFY_LINKED,
|
|
327
322
|
// "Spotify Linked"
|
|
328
323
|
// );
|
|
329
|
-
window.location.href=`${
|
|
324
|
+
window.location.href=`${b}/spotify/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri.spotify}`}))}
|
|
330
325
|
/**
|
|
331
326
|
* Link the user's TikTok account.
|
|
332
327
|
* @param {string} handle The user's TikTok handle.
|
|
333
328
|
* @returns {Promise<any>} A promise that resolves with the TikTok account data.
|
|
334
329
|
* @throws {Error|APIError} - Throws an error if the user is not authenticated.
|
|
335
|
-
*/linkTikTok(t){return
|
|
330
|
+
*/linkTikTok(t){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");const e=yield fetch(`${b}/tiktok/connect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({userHandle:t,clientId:this.clientId,userId:this.userId})}).then((t=>t.json()));if(e.isError)throw"Request failed with status code 502"===e.message?new u("TikTok service is currently unavailable, try again later"):new u(e.message||"Failed to link TikTok account");return c(this,N,"m",K).call(this,$.TIKTOK_LINKED,"TikTok Linked"),e.data}))}
|
|
336
331
|
/**
|
|
337
332
|
* Send an OTP to the user's Telegram account.
|
|
338
333
|
* @param {string} phoneNumber The user's phone number.
|
|
339
334
|
* @returns {Promise<any>} A promise that resolves with the OTP data.
|
|
340
335
|
* @throws {Error|APIError} - Throws an error if the user is not authenticated.
|
|
341
|
-
*/sendTelegramOTP(t){return
|
|
336
|
+
*/sendTelegramOTP(t){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");if(!t)throw new u("Phone number is required");yield this.unlinkTelegram();const e=yield fetch(`${b}/telegram/sendOTP-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({phone:t})}).then((t=>t.json()));if(e.isError)throw new u(e.message||"Failed to send Telegram OTP");return e.data}))}
|
|
342
337
|
/**
|
|
343
338
|
* Link the user's Telegram account.
|
|
344
339
|
* @param {string} phoneNumber The user's phone number.
|
|
@@ -346,37 +341,37 @@ window.location.href=`${$}/spotify/connect?clientId=${this.clientId}&userId=${th
|
|
|
346
341
|
* @param {string} phoneCodeHash The phone code hash.
|
|
347
342
|
* @returns {Promise<object>} A promise that resolves with the Telegram account data.
|
|
348
343
|
* @throws {APIError|Error} - Throws an error if the user is not authenticated. Also throws an error if the phone number, OTP, and phone code hash are not provided.
|
|
349
|
-
*/linkTelegram(t,e,i){return
|
|
344
|
+
*/linkTelegram(t,e,i){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");if(!t||!e||!i)throw new u("Phone number, OTP, and phone code hash are required");const n=yield fetch(`${b}/telegram/signIn-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({phone:t,code:e,phone_code_hash:i,userId:this.userId,clientId:this.clientId})}).then((t=>t.json()));if(n.isError)throw new u(n.message||"Failed to link Telegram account");return c(this,N,"m",K).call(this,$.TELEGRAM_LINKED,"Telegram Linked"),n.data}))}
|
|
350
345
|
/**
|
|
351
346
|
* Unlink the user's Twitter account.
|
|
352
347
|
* @returns {Promise<any>} A promise that resolves with the unlink result.
|
|
353
348
|
* @throws {Error} - Throws an error if the user is not authenticated.
|
|
354
349
|
* @throws {APIError} - Throws an error if the request fails.
|
|
355
|
-
*/unlinkTwitter(){return
|
|
350
|
+
*/unlinkTwitter(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");const t=yield fetch(`${b}/twitter/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({id:this.userId})}).then((t=>t.json()));if(t.isError)throw new u(t.message||"Failed to unlink Twitter account");return t.data}))}
|
|
356
351
|
/**
|
|
357
352
|
* Unlink the user's Discord account.
|
|
358
353
|
* @returns {Promise<any>} A promise that resolves with the unlink result.
|
|
359
354
|
* @throws {Error} - Throws an error if the user is not authenticated.
|
|
360
355
|
* @throws {APIError} - Throws an error if the request fails.
|
|
361
|
-
*/unlinkDiscord(){return
|
|
356
|
+
*/unlinkDiscord(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new u("User needs to be authenticated");const t=yield fetch(`${b}/discord/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({id:this.userId})}).then((t=>t.json()));if(t.isError)throw new u(t.message||"Failed to unlink Discord account");return t.data}))}
|
|
362
357
|
/**
|
|
363
358
|
* Unlink the user's Spotify account.
|
|
364
359
|
* @returns {Promise<any>} A promise that resolves with the unlink result.
|
|
365
360
|
* @throws {Error} - Throws an error if the user is not authenticated.
|
|
366
361
|
* @throws {APIError} - Throws an error if the request fails.
|
|
367
|
-
*/unlinkSpotify(){return
|
|
362
|
+
*/unlinkSpotify(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new u("User needs to be authenticated");const t=yield fetch(`${b}/spotify/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({id:this.userId})}).then((t=>t.json()));if(t.isError)throw new u(t.message||"Failed to unlink Spotify account");return t.data}))}
|
|
368
363
|
/**
|
|
369
364
|
* Unlink the user's TikTok account.
|
|
370
365
|
* @returns {Promise<any>} A promise that resolves with the unlink result.
|
|
371
366
|
* @throws {Error} - Throws an error if the user is not authenticated.
|
|
372
367
|
* @throws {APIError} - Throws an error if the request fails.
|
|
373
|
-
*/unlinkTikTok(){return
|
|
368
|
+
*/unlinkTikTok(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new u("User needs to be authenticated");const t=yield fetch(`${b}/tiktok/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({userId:this.userId})}).then((t=>t.json()));if(t.isError)throw new u(t.message||"Failed to unlink TikTok account");return t.data}))}
|
|
374
369
|
/**
|
|
375
370
|
* Unlink the user's Telegram account.
|
|
376
371
|
* @returns {Promise<any>} A promise that resolves with the unlink result.
|
|
377
372
|
* @throws {Error} - Throws an error if the user is not authenticated.
|
|
378
373
|
* @throws {APIError} - Throws an error if the request fails.
|
|
379
|
-
*/unlinkTelegram(){return
|
|
374
|
+
*/unlinkTelegram(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new u("User needs to be authenticated");const t=yield fetch(`${b}/telegram/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({userId:this.userId})}).then((t=>t.json()));if(t.isError)throw new u(t.message||"Failed to unlink Telegram account");return t.data}))}
|
|
380
375
|
/**
|
|
381
376
|
* Call a contract method.
|
|
382
377
|
* @param {string} contractAddress The contract address.
|
|
@@ -386,61 +381,12 @@ window.location.href=`${$}/spotify/connect?clientId=${this.clientId}&userId=${th
|
|
|
386
381
|
* @param {CallOptions} [options] The call options.
|
|
387
382
|
* @returns {Promise<any>} A promise that resolves with the result of the contract call or transaction hash.
|
|
388
383
|
* @throws {Error} - Throws an error if the wallet client is not connected or if the method is not a view function.
|
|
389
|
-
*/callContractMethod(t,e,i,n){return
|
|
384
|
+
*/callContractMethod(t,e,i,n){return h(this,arguments,void 0,(function*(t,e,i,n,s={}){const a=r({abi:e,name:i}),d=a&&"stateMutability"in a&&("view"===a.stateMutability||"pure"===a.stateMutability);if(!d&&!this.viem)throw new Error("WalletClient not connected.");if(d){const s=A();return(yield s.readContract({address:t,abi:e,functionName:i,args:n}))||null}{const[r]=yield this.viem.getAddresses(),a=o({abi:e,functionName:i,args:n});yield c(this,N,"m",L).call(this,g);const d=yield this.viem.sendTransaction({to:t,data:a,account:r,value:s.value,gas:s.gas});if(s.waitForReceipt){return yield c(this,N,"m",z).call(this,d)}return d}}))}}P=new WeakMap,_=new WeakMap,N=new WeakSet,D=function(t,e){c(this,P,"f")[t]&&c(this,P,"f")[t].forEach((t=>t(e)))},B=function(t){return h(this,void 0,void 0,(function*(){var e,i;if("undefined"==typeof localStorage)return;const n=null===localStorage||void 0===localStorage?void 0:localStorage.getItem("camp-sdk:wallet-address"),s=null===localStorage||void 0===localStorage?void 0:localStorage.getItem("camp-sdk:user-id"),r=null===localStorage||void 0===localStorage?void 0:localStorage.getItem("camp-sdk:jwt");if(n&&s&&r){this.walletAddress=n,this.userId=s,this.jwt=r,this.origin=new J(this.jwt),this.isAuthenticated=!0;let o=t;if(!o){const t=null!==(e=j())&&void 0!==e?e:[];for(const e of t)try{if((null===(i=(yield e.provider.request({method:"eth_accounts"}))[0])||void 0===i?void 0:i.toLowerCase())===n.toLowerCase()){o=e.provider;break}}catch(t){console.warn("Failed to fetch accounts from provider:",t)}}o&&(this.viem=T(o,(new Date).getTime().toString(),n),c(this,N,"m",D).call(this,"viem",this.viem))}else this.isAuthenticated=!1}))},W=function(){return h(this,void 0,void 0,(function*(){try{const[t]=yield this.viem.requestAddresses();return this.walletAddress=t,t}catch(t){throw new u(t)}}))},x=function(){return h(this,void 0,void 0,(function*(){try{const t=yield fetch(`${b}/auth/client-user/nonce`,{method:"POST",headers:{"Content-Type":"application/json","x-client-id":this.clientId},body:JSON.stringify({walletAddress:this.walletAddress})}),e=yield t.json();return 200!==t.status?Promise.reject(e.message||"Failed to fetch nonce"):e.data}catch(t){throw new Error(t)}}))},F=function(t,e){return h(this,void 0,void 0,(function*(){try{const i=yield fetch(`${b}/auth/client-user/verify`,{method:"POST",headers:{"Content-Type":"application/json","x-client-id":this.clientId},body:JSON.stringify({message:t,signature:e,walletAddress:this.walletAddress})}),n=yield i.json(),s=n.data.split(".")[1],r=JSON.parse(atob(s));return{success:!n.isError,userId:r.id,token:n.data}}catch(t){throw new u(t)}}))},q=function(t){return d({domain:window.location.host,address:this.walletAddress,statement:E,uri:window.location.origin,version:"1",chainId:this.viem.chain.id,nonce:t})},K=function(t,e){return h(this,arguments,void 0,(function*(t,e,i=1){
|
|
385
|
+
// if (this.#ackeeInstance)
|
|
386
|
+
// await sendAnalyticsEvent(this.#ackeeInstance, event, message, count);
|
|
387
|
+
// else return;
|
|
388
|
+
}))},z=function(t){return h(this,void 0,void 0,(function*(){if(!this.viem)throw new Error("WalletClient not connected.");for(;;){const e=yield this.viem.request({method:"eth_getTransactionReceipt",params:[t]});if(e&&e.blockNumber)return e;yield new Promise((t=>setTimeout(t,1e3)))}}))},L=function(t){return h(this,void 0,void 0,(function*(){
|
|
390
389
|
// return;
|
|
391
390
|
if(!this.viem)throw new Error("WalletClient not connected.");let e=yield this.viem.request({method:"eth_chainId",params:[]});if("string"==typeof e&&(e=parseInt(e,16)),e!==t.id)try{yield this.viem.request({method:"wallet_switchEthereumChain",params:[{chainId:"0x"+BigInt(t.id).toString(16)}]})}catch(e){
|
|
392
391
|
// Unrecognized chain
|
|
393
|
-
if(4902!==e.code)throw e;yield this.viem.request({method:"wallet_addEthereumChain",params:[{chainId:"0x"+BigInt(t.id).toString(16),chainName:t.name,rpcUrls:t.rpcUrls.default.http,nativeCurrency:t.nativeCurrency}]}),yield this.viem.request({method:"wallet_switchEthereumChain",params:[{chainId:"0x"+BigInt(t.id).toString(16)}]})}}))};
|
|
394
|
-
/**
|
|
395
|
-
The MIT License (MIT)
|
|
396
|
-
|
|
397
|
-
Copyright (c) Tobias Reich
|
|
398
|
-
|
|
399
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
400
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
401
|
-
in the Software without restriction, including without limitation the rights
|
|
402
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
403
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
404
|
-
furnished to do so, subject to the following conditions:
|
|
405
|
-
|
|
406
|
-
The above copyright notice and this permission notice shall be included in
|
|
407
|
-
all copies or substantial portions of the Software.
|
|
408
|
-
|
|
409
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
410
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
411
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
412
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
413
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
414
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
415
|
-
THE SOFTWARE.
|
|
416
|
-
*/
|
|
417
|
-
const H="undefined"!=typeof window,G=H?null===window||void 0===window?void 0:window.navigator:{userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",language:"en",languages:[],platform:"",vendor:"",maxTouchPoints:0,hardwareConcurrency:0,deviceMemory:0},V=H?null===window||void 0===window?void 0:window.location:{href:"",protocol:"",host:"",hostname:"",port:"",pathname:"",search:"",hash:""},X=function(t){return"88888888-8888-8888-8888-888888888888"===t},Y=function(){return"hidden"===document.visibilityState},Q=function(){const t=(V.search.split("source=")[1]||"").split("&")[0];return""===t?void 0:t},Z=function(t=!1){var e;const i={siteLocation:null===(e=null===window||void 0===window?void 0:window.location)||void 0===e?void 0:e.href,siteReferrer:document.referrer,source:Q()},n={siteLanguage:G?((null==G?void 0:G.language)||(null==G?void 0:G.language)||"").substr(0,2):"",screenWidth:screen.width,screenHeight:screen.height,screenColorDepth:screen.colorDepth,browserWidth:null===window||void 0===window?void 0:window.outerWidth,browserHeight:null===window||void 0===window?void 0:window.outerHeight};return Object.assign(Object.assign({},i),!0===t?n:{})},tt=function(t){return{query:"\n\t\t\tmutation updateRecord($recordId: ID!) {\n\t\t\t\tupdateRecord(id: $recordId) {\n\t\t\t\t\tsuccess\n\t\t\t\t}\n\t\t\t}\n\t\t",variables:{recordId:t}}},et=function(t,e,i,n){const r=new XMLHttpRequest;r.open("POST",t),r.onload=()=>{if(200!==r.status)throw new Error("Server returned with an unhandled status");let t=null;try{t=JSON.parse(r.responseText)}catch(t){throw new Error("Failed to parse response from server")}if(null!=t.errors)throw new Error(t.errors[0].message);if("function"==typeof n)return n(t)},r.setRequestHeader("Content-Type","application/json;charset=UTF-8"),
|
|
418
|
-
// xhr.withCredentials = opts.ignoreOwnVisits ?? false;
|
|
419
|
-
r.withCredentials=!1,r.send(JSON.stringify(e))},it=function(){const t=document.querySelector("[data-ackee-domain-id]");if(null==t)return;const e=t.getAttribute("data-ackee-server")||"",i=t.getAttribute("data-ackee-domain-id")||"",n=t.getAttribute("data-ackee-opts")||"{}";nt(e,JSON.parse(n)).record(i)},nt=function(t,e){e=function(t={}){
|
|
420
|
-
// Create new object to avoid changes by reference
|
|
421
|
-
const e={};
|
|
422
|
-
// Defaults to false
|
|
423
|
-
return e.detailed=!0===t.detailed,
|
|
424
|
-
// Defaults to true
|
|
425
|
-
e.ignoreLocalhost=!1!==t.ignoreLocalhost,
|
|
426
|
-
// Defaults to true
|
|
427
|
-
e.ignoreOwnVisits=!1!==t.ignoreOwnVisits,e}(e);const i=function(t){const e="/"===t.substr(-1);return t+(!0===e?"":"/")+"api"}(t),n=()=>{},r={record:()=>({stop:n}),updateRecord:()=>({stop:n}),action:n,updateAction:n};if(!0===e.ignoreLocalhost&&!0==(""===(o=V.hostname)||"localhost"===o||"127.0.0.1"===o||"::1"===o)&&!0===H)
|
|
428
|
-
// console.warn("Ackee ignores you because you are on localhost");
|
|
429
|
-
return r;var o,s;if(!0===(s=G?G.userAgent:"",/bot|crawler|spider|crawling/i.test(s)))
|
|
430
|
-
// console.warn("Ackee ignores you because you are a bot");
|
|
431
|
-
return r;
|
|
432
|
-
// Creates a new record on the server and updates the record
|
|
433
|
-
// very x seconds to track the duration of the visit. Tries to use
|
|
434
|
-
// the default attributes when there're no custom attributes defined.
|
|
435
|
-
// Return the real instance
|
|
436
|
-
return{record:(t,n=Z(e.detailed),r)=>{
|
|
437
|
-
// Function to stop updating the record
|
|
438
|
-
let o=!1;return et(i,function(t,e){return{query:"\n\t\t\tmutation createRecord($domainId: ID!, $input: CreateRecordInput!) {\n\t\t\t\tcreateRecord(domainId: $domainId, input: $input) {\n\t\t\t\t\tpayload {\n\t\t\t\t\t\tid\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t",variables:{domainId:t,input:e}}}(t,n),0,(t=>{const e=t.data.createRecord.payload.id;if(!0===X(e))
|
|
439
|
-
// return console.warn("Ackee ignores you because this is your own site");
|
|
440
|
-
return;const n=setInterval((()=>{!0!==o?!0!==Y()&&et(i,tt(e)):clearInterval(n)}),15e3);return"function"==typeof r?r(e):void 0})),{stop:()=>{o=!0}}},updateRecord:t=>{
|
|
441
|
-
// Function to stop updating the record
|
|
442
|
-
let e=!1;const n=()=>{e=!0};if(!0===X(t))
|
|
443
|
-
// console.warn("Ackee ignores you because this is your own site");
|
|
444
|
-
return{stop:n};const r=setInterval((()=>{!0!==e?!0!==Y()&&et(i,tt(t)):clearInterval(r)}),15e3);return{stop:n}},action:(t,e,n)=>{et(i,function(t,e){return{query:"\n\t\t\tmutation createAction($eventId: ID!, $input: CreateActionInput!) {\n\t\t\t\tcreateAction(eventId: $eventId, input: $input) {\n\t\t\t\t\tpayload {\n\t\t\t\t\t\tid\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t",variables:{eventId:t,input:e}}}(t,e),0,(t=>{const e=t.data.createAction.payload.id;if(!0!==X(e))return"function"==typeof n?n(e):void 0}))},updateAction:(t,e)=>{!0!==X(t)&&et(i,function(t,e){return{query:"\n\t\t\tmutation updateAction($actionId: ID!, $input: UpdateActionInput!) {\n\t\t\t\tupdateAction(id: $actionId, input: $input) {\n\t\t\t\t\tsuccess\n\t\t\t\t}\n\t\t\t}\n\t\t",variables:{actionId:t,input:e}}}(t,e))}}};
|
|
445
|
-
// Only run Ackee automatically when executed in a browser environment
|
|
446
|
-
!0===H&&it();var rt=Object.freeze({__proto__:null,attributes:Z,create:nt,detect:it});export{rt as Ackee,M as Auth,y as SpotifyAPI,v as TwitterAPI};
|
|
392
|
+
if(4902!==e.code)throw e;yield this.viem.request({method:"wallet_addEthereumChain",params:[{chainId:"0x"+BigInt(t.id).toString(16),chainName:t.name,rpcUrls:t.rpcUrls.default.http,nativeCurrency:t.nativeCurrency}]}),yield this.viem.request({method:"wallet_switchEthereumChain",params:[{chainId:"0x"+BigInt(t.id).toString(16)}]})}}))};export{R as Auth,y as SpotifyAPI,v as TwitterAPI};
|