@magic-ext/farcaster 0.2.0 → 0.2.1-canary.d6e6d29.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.
package/dist/cjs/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var l=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var A=(r,n)=>{for(var e in n)l(r,e,{get:n[e],enumerable:!0})},E=(r,n,e,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of C(n))!v.call(r,t)&&t!==e&&l(r,t,{get:()=>n[t],enumerable:!(a=f(n,t))||a.enumerable});return r};var b=r=>E(l({},"__esModule",{value:!0}),r);var d=(r,n,e)=>new Promise((a,t)=>{var h=o=>{try{i(e.next(o))}catch(s){t(s)}},p=o=>{try{i(e.throw(o))}catch(s){t(s)}},i=o=>o.done?a(o.value):Promise.resolve(o.value).then(h,p);i((e=e.apply(r,n)).next())});var O={};A(O,{FarcasterExtension:()=>u,isMobile:()=>c});module.exports=b(O);var g=require("@magic-sdk/commons");function m(){return typeof navigator!="undefined"&&/android/i.test(navigator.userAgent)}function y(){return typeof navigator!="undefined"&&/iPhone|iPod/.test(navigator.userAgent)}function R(){return typeof navigator!="undefined"&&(/iPad/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1)}function x(){return y()||R()}function c(){return m()||x()}var w=!0;var I="https://relay.farcaster.xyz",u=class extends g.Extension.Internal{constructor(){super();this.name="farcaster";this.config={};this.channel=null;this.login=e=>{var t;if(!this.channel)throw new Error("Channel not created yet.");let a=this.utils.createJsonRpcRequestPayload("farcaster_show_QR",[{data:{showUI:(t=e==null?void 0:e.showUI)!=null?t:w,domain:window.location.origin,isMobile:c(),channel:this.channel}}]);return this.request(a)};d(this,null,function*(){this.channel=yield fetch(`${I}/v1/channel`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:window.location.host,siweUri:window.location.origin})}).then(e=>e.json())})}};
1
+ "use strict";var d=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var w=Object.prototype.hasOwnProperty;var m=(t,n)=>{for(var e in n)d(t,e,{get:n[e],enumerable:!0})},A=(t,n,e,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of v(n))!w.call(t,r)&&r!==e&&d(t,r,{get:()=>n[r],enumerable:!(a=C(n,r))||a.enumerable});return t};var b=t=>A(d({},"__esModule",{value:!0}),t);var h=(t,n,e)=>new Promise((a,r)=>{var i=o=>{try{l(e.next(o))}catch(c){r(c)}},f=o=>{try{l(e.throw(o))}catch(c){r(c)}},l=o=>o.done?a(o.value):Promise.resolve(o.value).then(i,f);l((e=e.apply(t,n)).next())});var P={};m(P,{FarcasterExtension:()=>u,isMobile:()=>s});module.exports=b(P);var p=require("@magic-sdk/commons");function E(){return typeof navigator!="undefined"&&/android/i.test(navigator.userAgent)}function y(){return typeof navigator!="undefined"&&/iPhone|iPod/.test(navigator.userAgent)}function x(){return typeof navigator!="undefined"&&(/iPad/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1)}function R(){return y()||x()}function s(){return E()||R()}function g(){return typeof window!="undefined"&&window===window.top}var I=!0;var O="https://relay.farcaster.xyz",u=class extends p.Extension.Internal{constructor(){super();this.name="farcaster";this.config={};this.channel=null;this.login=e=>{var i;if(!this.channel)throw new Error("Channel not created yet.");let a=this.utils.createJsonRpcRequestPayload("farcaster_show_QR",[{data:{showUI:(i=e==null?void 0:e.showUI)!=null?i:I,domain:window.location.origin,isMobile:s(),channel:this.channel}}]),r=this.request(a);return s()&&g()&&(window.location.href=this.channel.url),r};h(this,null,function*(){this.channel=yield fetch(`${O}/v1/channel`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:window.location.host,siweUri:window.location.origin})}).then(e=>e.json())})}};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts", "../../src/utils.ts"],
4
- "sourcesContent": ["import { Extension } from '@magic-sdk/commons';\nimport { FarcasterPayloadMethod } from './types';\nimport { isMobile } from './utils';\n\nconst DEFAULT_SHOW_UI = true;\n\ntype LoginParams = {\n showUI: boolean;\n};\n\nconst FarcasterLoginEventOnReceived = {\n OpenChannel: 'channel',\n Success: 'success',\n Failed: 'failed',\n} as const;\n\ninterface CreateChannelAPIResponse {\n channelToken: string;\n url: string;\n nonce: string;\n}\n\ntype Hex = `0x${string}`;\n\ninterface StatusAPIResponse {\n state: 'pending' | 'completed';\n nonce: string;\n url: string;\n message?: string;\n signature?: `0x${string}`;\n fid?: number;\n username?: string;\n bio?: string;\n displayName?: string;\n pfpUrl?: string;\n verifications?: Hex[];\n custody?: Hex;\n}\n\ntype AuthClientErrorCode =\n | 'unauthenticated'\n | 'unauthorized'\n | 'bad_request'\n | 'bad_request.validation_failure'\n | 'not_found'\n | 'not_implemented'\n | 'unavailable'\n | 'unknown';\n\ninterface AuthClientErrorOpts {\n message: string;\n cause: Error | AuthClientError;\n presentable: boolean;\n}\n\ndeclare class AuthClientError extends Error {\n readonly errCode: AuthClientErrorCode;\n readonly presentable: boolean;\n /**\n * @param errCode - the AuthClientError code for this message\n * @param context - a message, another Error, or a AuthClientErrorOpts\n */\n constructor(errCode: AuthClientErrorCode, context: Partial<AuthClientErrorOpts> | string | Error);\n}\n\ntype FarcasterLoginEventHandlers = {\n [FarcasterLoginEventOnReceived.OpenChannel]: (channel: CreateChannelAPIResponse) => void;\n [FarcasterLoginEventOnReceived.Success]: (data: StatusAPIResponse) => void;\n [FarcasterLoginEventOnReceived.Failed]: (error: AuthClientError) => void;\n};\n\nconst FARCASTER_RELAY_URL = 'https://relay.farcaster.xyz';\n\nexport class FarcasterExtension extends Extension.Internal<'farcaster'> {\n name = 'farcaster' as const;\n config = {};\n channel: CreateChannelAPIResponse | null = null;\n\n constructor() {\n super();\n\n (async () => {\n this.channel = await fetch(`${FARCASTER_RELAY_URL}/v1/channel`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n domain: window.location.host,\n siweUri: window.location.origin,\n }),\n }).then<CreateChannelAPIResponse>((r) => r.json());\n })();\n }\n\n public login = (params?: LoginParams) => {\n if (!this.channel) {\n throw new Error('Channel not created yet.');\n }\n\n const payload = this.utils.createJsonRpcRequestPayload(FarcasterPayloadMethod.FarcasterShowQR, [\n {\n data: {\n showUI: params?.showUI ?? DEFAULT_SHOW_UI,\n domain: window.location.origin,\n isMobile: isMobile(),\n channel: this.channel,\n },\n },\n ]);\n\n return this.request<string, FarcasterLoginEventHandlers>(payload);\n };\n}\n\nexport { isMobile };\n", "// https://github.com/farcasterxyz/auth-monorepo/blob/main/packages/auth-kit/src/utils.ts\n\nexport function isAndroid(): boolean {\n return typeof navigator !== 'undefined' && /android/i.test(navigator.userAgent);\n}\n\nexport function isSmallIOS(): boolean {\n return typeof navigator !== 'undefined' && /iPhone|iPod/.test(navigator.userAgent);\n}\n\nexport function isLargeIOS(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n (/iPad/.test(navigator.userAgent) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1))\n );\n}\n\nexport function isIOS(): boolean {\n return isSmallIOS() || isLargeIOS();\n}\n\nexport function isMobile(): boolean {\n return isAndroid() || isIOS();\n}\n"],
5
- "mappings": "snBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,EAAA,aAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAA0B,8BCEnB,SAASC,GAAqB,CACnC,OAAO,OAAO,WAAc,aAAe,WAAW,KAAK,UAAU,SAAS,CAChF,CAEO,SAASC,GAAsB,CACpC,OAAO,OAAO,WAAc,aAAe,cAAc,KAAK,UAAU,SAAS,CACnF,CAEO,SAASC,GAAsB,CACpC,OACE,OAAO,WAAc,cACpB,OAAO,KAAK,UAAU,SAAS,GAAM,UAAU,WAAa,YAAc,UAAU,eAAiB,EAE1G,CAEO,SAASC,GAAiB,CAC/B,OAAOF,EAAW,GAAKC,EAAW,CACpC,CAEO,SAASE,GAAoB,CAClC,OAAOJ,EAAU,GAAKG,EAAM,CAC9B,CDnBA,IAAME,EAAkB,GAmExB,IAAMC,EAAsB,8BAEfC,EAAN,cAAiC,YAAU,QAAsB,CAKtE,aAAc,CACZ,MAAM,EALR,UAAO,YACP,YAAS,CAAC,EACV,aAA2C,KAmB3C,KAAO,MAASC,GAAyB,CA/F3C,IAAAC,EAgGI,GAAI,CAAC,KAAK,QACR,MAAM,IAAI,MAAM,0BAA0B,EAG5C,IAAMC,EAAU,KAAK,MAAM,gDAAoE,CAC7F,CACE,KAAM,CACJ,QAAQD,EAAAD,GAAA,YAAAA,EAAQ,SAAR,KAAAC,EAAkBE,EAC1B,OAAQ,OAAO,SAAS,OACxB,SAAUC,EAAS,EACnB,QAAS,KAAK,OAChB,CACF,CACF,CAAC,EAED,OAAO,KAAK,QAA6CF,CAAO,CAClE,EA/BeG,EAAA,sBACX,KAAK,QAAU,MAAM,MAAM,GAAGP,eAAkC,CAC9D,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,CACnB,OAAQ,OAAO,SAAS,KACxB,QAAS,OAAO,SAAS,MAC3B,CAAC,CACH,CAAC,EAAE,KAAgCQ,GAAMA,EAAE,KAAK,CAAC,CACnD,EACF,CAoBF",
6
- "names": ["src_exports", "__export", "FarcasterExtension", "isMobile", "__toCommonJS", "import_commons", "isAndroid", "isSmallIOS", "isLargeIOS", "isIOS", "isMobile", "DEFAULT_SHOW_UI", "FARCASTER_RELAY_URL", "FarcasterExtension", "params", "_a", "payload", "DEFAULT_SHOW_UI", "isMobile", "__async", "r"]
4
+ "sourcesContent": ["import { Extension } from '@magic-sdk/commons';\nimport { FarcasterPayloadMethod } from './types';\nimport { isMainFrame, isMobile } from './utils';\n\nconst DEFAULT_SHOW_UI = true;\n\ntype LoginParams = {\n showUI: boolean;\n};\n\nconst FarcasterLoginEventOnReceived = {\n OpenChannel: 'channel',\n Success: 'success',\n Failed: 'failed',\n} as const;\n\ninterface CreateChannelAPIResponse {\n channelToken: string;\n url: string;\n nonce: string;\n}\n\ntype Hex = `0x${string}`;\n\ninterface StatusAPIResponse {\n state: 'pending' | 'completed';\n nonce: string;\n url: string;\n message?: string;\n signature?: `0x${string}`;\n fid?: number;\n username?: string;\n bio?: string;\n displayName?: string;\n pfpUrl?: string;\n verifications?: Hex[];\n custody?: Hex;\n}\n\ntype AuthClientErrorCode =\n | 'unauthenticated'\n | 'unauthorized'\n | 'bad_request'\n | 'bad_request.validation_failure'\n | 'not_found'\n | 'not_implemented'\n | 'unavailable'\n | 'unknown';\n\ninterface AuthClientErrorOpts {\n message: string;\n cause: Error | AuthClientError;\n presentable: boolean;\n}\n\ndeclare class AuthClientError extends Error {\n readonly errCode: AuthClientErrorCode;\n readonly presentable: boolean;\n /**\n * @param errCode - the AuthClientError code for this message\n * @param context - a message, another Error, or a AuthClientErrorOpts\n */\n constructor(errCode: AuthClientErrorCode, context: Partial<AuthClientErrorOpts> | string | Error);\n}\n\ntype FarcasterLoginEventHandlers = {\n [FarcasterLoginEventOnReceived.OpenChannel]: (channel: CreateChannelAPIResponse) => void;\n [FarcasterLoginEventOnReceived.Success]: (data: StatusAPIResponse) => void;\n [FarcasterLoginEventOnReceived.Failed]: (error: AuthClientError) => void;\n};\n\nconst FARCASTER_RELAY_URL = 'https://relay.farcaster.xyz';\n\nexport class FarcasterExtension extends Extension.Internal<'farcaster'> {\n name = 'farcaster' as const;\n config = {};\n channel: CreateChannelAPIResponse | null = null;\n\n constructor() {\n super();\n\n (async () => {\n this.channel = await fetch(`${FARCASTER_RELAY_URL}/v1/channel`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n domain: window.location.host,\n siweUri: window.location.origin,\n }),\n }).then<CreateChannelAPIResponse>((r) => r.json());\n })();\n }\n\n public login = (params?: LoginParams) => {\n if (!this.channel) {\n throw new Error('Channel not created yet.');\n }\n\n const payload = this.utils.createJsonRpcRequestPayload(FarcasterPayloadMethod.FarcasterShowQR, [\n {\n data: {\n showUI: params?.showUI ?? DEFAULT_SHOW_UI,\n domain: window.location.origin,\n isMobile: isMobile(),\n channel: this.channel,\n },\n },\n ]);\n\n const handle = this.request<string, FarcasterLoginEventHandlers>(payload);\n\n if (isMobile() && isMainFrame()) {\n window.location.href = this.channel.url;\n }\n\n return handle;\n };\n}\n\nexport { isMobile };\n", "// https://github.com/farcasterxyz/auth-monorepo/blob/main/packages/auth-kit/src/utils.ts\n\nexport function isAndroid(): boolean {\n return typeof navigator !== 'undefined' && /android/i.test(navigator.userAgent);\n}\n\nexport function isSmallIOS(): boolean {\n return typeof navigator !== 'undefined' && /iPhone|iPod/.test(navigator.userAgent);\n}\n\nexport function isLargeIOS(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n (/iPad/.test(navigator.userAgent) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1))\n );\n}\n\nexport function isIOS(): boolean {\n return isSmallIOS() || isLargeIOS();\n}\n\nexport function isMobile(): boolean {\n return isAndroid() || isIOS();\n}\n\nexport function isMainFrame(): boolean {\n return typeof window !== 'undefined' && window === window.top;\n}\n"],
5
+ "mappings": "snBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,EAAA,aAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAA0B,8BCEnB,SAASC,GAAqB,CACnC,OAAO,OAAO,WAAc,aAAe,WAAW,KAAK,UAAU,SAAS,CAChF,CAEO,SAASC,GAAsB,CACpC,OAAO,OAAO,WAAc,aAAe,cAAc,KAAK,UAAU,SAAS,CACnF,CAEO,SAASC,GAAsB,CACpC,OACE,OAAO,WAAc,cACpB,OAAO,KAAK,UAAU,SAAS,GAAM,UAAU,WAAa,YAAc,UAAU,eAAiB,EAE1G,CAEO,SAASC,GAAiB,CAC/B,OAAOF,EAAW,GAAKC,EAAW,CACpC,CAEO,SAASE,GAAoB,CAClC,OAAOJ,EAAU,GAAKG,EAAM,CAC9B,CAEO,SAASE,GAAuB,CACrC,OAAO,OAAO,QAAW,aAAe,SAAW,OAAO,GAC5D,CDvBA,IAAMC,EAAkB,GAmExB,IAAMC,EAAsB,8BAEfC,EAAN,cAAiC,YAAU,QAAsB,CAKtE,aAAc,CACZ,MAAM,EALR,UAAO,YACP,YAAS,CAAC,EACV,aAA2C,KAmB3C,KAAO,MAASC,GAAyB,CA/F3C,IAAAC,EAgGI,GAAI,CAAC,KAAK,QACR,MAAM,IAAI,MAAM,0BAA0B,EAG5C,IAAMC,EAAU,KAAK,MAAM,gDAAoE,CAC7F,CACE,KAAM,CACJ,QAAQD,EAAAD,GAAA,YAAAA,EAAQ,SAAR,KAAAC,EAAkBE,EAC1B,OAAQ,OAAO,SAAS,OACxB,SAAUC,EAAS,EACnB,QAAS,KAAK,OAChB,CACF,CACF,CAAC,EAEKC,EAAS,KAAK,QAA6CH,CAAO,EAExE,OAAIE,EAAS,GAAKE,EAAY,IAC5B,OAAO,SAAS,KAAO,KAAK,QAAQ,KAG/BD,CACT,EArCeE,EAAA,sBACX,KAAK,QAAU,MAAM,MAAM,GAAGT,eAAkC,CAC9D,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,CACnB,OAAQ,OAAO,SAAS,KACxB,QAAS,OAAO,SAAS,MAC3B,CAAC,CACH,CAAC,EAAE,KAAgCU,GAAMA,EAAE,KAAK,CAAC,CACnD,EACF,CA0BF",
6
+ "names": ["src_exports", "__export", "FarcasterExtension", "isMobile", "__toCommonJS", "import_commons", "isAndroid", "isSmallIOS", "isLargeIOS", "isIOS", "isMobile", "isMainFrame", "DEFAULT_SHOW_UI", "FARCASTER_RELAY_URL", "FarcasterExtension", "params", "_a", "payload", "DEFAULT_SHOW_UI", "isMobile", "handle", "isMainFrame", "__async", "r"]
7
7
  }
package/dist/es/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var l=(i,s,e)=>new Promise((r,t)=>{var d=n=>{try{o(e.next(n))}catch(a){t(a)}},g=n=>{try{o(e.throw(n))}catch(a){t(a)}},o=n=>n.done?r(n.value):Promise.resolve(n.value).then(d,g);o((e=e.apply(i,s)).next())});import{Extension as v}from"@magic-sdk/commons";function h(){return typeof navigator!="undefined"&&/android/i.test(navigator.userAgent)}function p(){return typeof navigator!="undefined"&&/iPhone|iPod/.test(navigator.userAgent)}function f(){return typeof navigator!="undefined"&&(/iPad/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1)}function C(){return p()||f()}function c(){return h()||C()}var A=!0;var E="https://relay.farcaster.xyz",u=class extends v.Internal{constructor(){super();this.name="farcaster";this.config={};this.channel=null;this.login=e=>{var t;if(!this.channel)throw new Error("Channel not created yet.");let r=this.utils.createJsonRpcRequestPayload("farcaster_show_QR",[{data:{showUI:(t=e==null?void 0:e.showUI)!=null?t:A,domain:window.location.origin,isMobile:c(),channel:this.channel}}]);return this.request(r)};l(this,null,function*(){this.channel=yield fetch(`${E}/v1/channel`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:window.location.host,siweUri:window.location.origin})}).then(e=>e.json())})}};export{u as FarcasterExtension,c as isMobile};
1
+ var d=(l,c,e)=>new Promise((o,t)=>{var r=n=>{try{a(e.next(n))}catch(i){t(i)}},g=n=>{try{a(e.throw(n))}catch(i){t(i)}},a=n=>n.done?o(n.value):Promise.resolve(n.value).then(r,g);a((e=e.apply(l,c)).next())});import{Extension as w}from"@magic-sdk/commons";function p(){return typeof navigator!="undefined"&&/android/i.test(navigator.userAgent)}function f(){return typeof navigator!="undefined"&&/iPhone|iPod/.test(navigator.userAgent)}function C(){return typeof navigator!="undefined"&&(/iPad/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1)}function v(){return f()||C()}function s(){return p()||v()}function u(){return typeof window!="undefined"&&window===window.top}var m=!0;var A="https://relay.farcaster.xyz",h=class extends w.Internal{constructor(){super();this.name="farcaster";this.config={};this.channel=null;this.login=e=>{var r;if(!this.channel)throw new Error("Channel not created yet.");let o=this.utils.createJsonRpcRequestPayload("farcaster_show_QR",[{data:{showUI:(r=e==null?void 0:e.showUI)!=null?r:m,domain:window.location.origin,isMobile:s(),channel:this.channel}}]),t=this.request(o);return s()&&u()&&(window.location.href=this.channel.url),t};d(this,null,function*(){this.channel=yield fetch(`${A}/v1/channel`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:window.location.host,siweUri:window.location.origin})}).then(e=>e.json())})}};export{h as FarcasterExtension,s as isMobile};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts", "../../src/utils.ts"],
4
- "sourcesContent": ["import { Extension } from '@magic-sdk/commons';\nimport { FarcasterPayloadMethod } from './types';\nimport { isMobile } from './utils';\n\nconst DEFAULT_SHOW_UI = true;\n\ntype LoginParams = {\n showUI: boolean;\n};\n\nconst FarcasterLoginEventOnReceived = {\n OpenChannel: 'channel',\n Success: 'success',\n Failed: 'failed',\n} as const;\n\ninterface CreateChannelAPIResponse {\n channelToken: string;\n url: string;\n nonce: string;\n}\n\ntype Hex = `0x${string}`;\n\ninterface StatusAPIResponse {\n state: 'pending' | 'completed';\n nonce: string;\n url: string;\n message?: string;\n signature?: `0x${string}`;\n fid?: number;\n username?: string;\n bio?: string;\n displayName?: string;\n pfpUrl?: string;\n verifications?: Hex[];\n custody?: Hex;\n}\n\ntype AuthClientErrorCode =\n | 'unauthenticated'\n | 'unauthorized'\n | 'bad_request'\n | 'bad_request.validation_failure'\n | 'not_found'\n | 'not_implemented'\n | 'unavailable'\n | 'unknown';\n\ninterface AuthClientErrorOpts {\n message: string;\n cause: Error | AuthClientError;\n presentable: boolean;\n}\n\ndeclare class AuthClientError extends Error {\n readonly errCode: AuthClientErrorCode;\n readonly presentable: boolean;\n /**\n * @param errCode - the AuthClientError code for this message\n * @param context - a message, another Error, or a AuthClientErrorOpts\n */\n constructor(errCode: AuthClientErrorCode, context: Partial<AuthClientErrorOpts> | string | Error);\n}\n\ntype FarcasterLoginEventHandlers = {\n [FarcasterLoginEventOnReceived.OpenChannel]: (channel: CreateChannelAPIResponse) => void;\n [FarcasterLoginEventOnReceived.Success]: (data: StatusAPIResponse) => void;\n [FarcasterLoginEventOnReceived.Failed]: (error: AuthClientError) => void;\n};\n\nconst FARCASTER_RELAY_URL = 'https://relay.farcaster.xyz';\n\nexport class FarcasterExtension extends Extension.Internal<'farcaster'> {\n name = 'farcaster' as const;\n config = {};\n channel: CreateChannelAPIResponse | null = null;\n\n constructor() {\n super();\n\n (async () => {\n this.channel = await fetch(`${FARCASTER_RELAY_URL}/v1/channel`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n domain: window.location.host,\n siweUri: window.location.origin,\n }),\n }).then<CreateChannelAPIResponse>((r) => r.json());\n })();\n }\n\n public login = (params?: LoginParams) => {\n if (!this.channel) {\n throw new Error('Channel not created yet.');\n }\n\n const payload = this.utils.createJsonRpcRequestPayload(FarcasterPayloadMethod.FarcasterShowQR, [\n {\n data: {\n showUI: params?.showUI ?? DEFAULT_SHOW_UI,\n domain: window.location.origin,\n isMobile: isMobile(),\n channel: this.channel,\n },\n },\n ]);\n\n return this.request<string, FarcasterLoginEventHandlers>(payload);\n };\n}\n\nexport { isMobile };\n", "// https://github.com/farcasterxyz/auth-monorepo/blob/main/packages/auth-kit/src/utils.ts\n\nexport function isAndroid(): boolean {\n return typeof navigator !== 'undefined' && /android/i.test(navigator.userAgent);\n}\n\nexport function isSmallIOS(): boolean {\n return typeof navigator !== 'undefined' && /iPhone|iPod/.test(navigator.userAgent);\n}\n\nexport function isLargeIOS(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n (/iPad/.test(navigator.userAgent) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1))\n );\n}\n\nexport function isIOS(): boolean {\n return isSmallIOS() || isLargeIOS();\n}\n\nexport function isMobile(): boolean {\n return isAndroid() || isIOS();\n}\n"],
5
- "mappings": "6MAAA,OAAS,aAAAA,MAAiB,qBCEnB,SAASC,GAAqB,CACnC,OAAO,OAAO,WAAc,aAAe,WAAW,KAAK,UAAU,SAAS,CAChF,CAEO,SAASC,GAAsB,CACpC,OAAO,OAAO,WAAc,aAAe,cAAc,KAAK,UAAU,SAAS,CACnF,CAEO,SAASC,GAAsB,CACpC,OACE,OAAO,WAAc,cACpB,OAAO,KAAK,UAAU,SAAS,GAAM,UAAU,WAAa,YAAc,UAAU,eAAiB,EAE1G,CAEO,SAASC,GAAiB,CAC/B,OAAOF,EAAW,GAAKC,EAAW,CACpC,CAEO,SAASE,GAAoB,CAClC,OAAOJ,EAAU,GAAKG,EAAM,CAC9B,CDnBA,IAAME,EAAkB,GAmExB,IAAMC,EAAsB,8BAEfC,EAAN,cAAiCC,EAAU,QAAsB,CAKtE,aAAc,CACZ,MAAM,EALR,UAAO,YACP,YAAS,CAAC,EACV,aAA2C,KAmB3C,KAAO,MAASC,GAAyB,CA/F3C,IAAAC,EAgGI,GAAI,CAAC,KAAK,QACR,MAAM,IAAI,MAAM,0BAA0B,EAG5C,IAAMC,EAAU,KAAK,MAAM,gDAAoE,CAC7F,CACE,KAAM,CACJ,QAAQD,EAAAD,GAAA,YAAAA,EAAQ,SAAR,KAAAC,EAAkBE,EAC1B,OAAQ,OAAO,SAAS,OACxB,SAAUC,EAAS,EACnB,QAAS,KAAK,OAChB,CACF,CACF,CAAC,EAED,OAAO,KAAK,QAA6CF,CAAO,CAClE,EA/BeG,EAAA,sBACX,KAAK,QAAU,MAAM,MAAM,GAAGR,eAAkC,CAC9D,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,CACnB,OAAQ,OAAO,SAAS,KACxB,QAAS,OAAO,SAAS,MAC3B,CAAC,CACH,CAAC,EAAE,KAAgCS,GAAMA,EAAE,KAAK,CAAC,CACnD,EACF,CAoBF",
6
- "names": ["Extension", "isAndroid", "isSmallIOS", "isLargeIOS", "isIOS", "isMobile", "DEFAULT_SHOW_UI", "FARCASTER_RELAY_URL", "FarcasterExtension", "Extension", "params", "_a", "payload", "DEFAULT_SHOW_UI", "isMobile", "__async", "r"]
4
+ "sourcesContent": ["import { Extension } from '@magic-sdk/commons';\nimport { FarcasterPayloadMethod } from './types';\nimport { isMainFrame, isMobile } from './utils';\n\nconst DEFAULT_SHOW_UI = true;\n\ntype LoginParams = {\n showUI: boolean;\n};\n\nconst FarcasterLoginEventOnReceived = {\n OpenChannel: 'channel',\n Success: 'success',\n Failed: 'failed',\n} as const;\n\ninterface CreateChannelAPIResponse {\n channelToken: string;\n url: string;\n nonce: string;\n}\n\ntype Hex = `0x${string}`;\n\ninterface StatusAPIResponse {\n state: 'pending' | 'completed';\n nonce: string;\n url: string;\n message?: string;\n signature?: `0x${string}`;\n fid?: number;\n username?: string;\n bio?: string;\n displayName?: string;\n pfpUrl?: string;\n verifications?: Hex[];\n custody?: Hex;\n}\n\ntype AuthClientErrorCode =\n | 'unauthenticated'\n | 'unauthorized'\n | 'bad_request'\n | 'bad_request.validation_failure'\n | 'not_found'\n | 'not_implemented'\n | 'unavailable'\n | 'unknown';\n\ninterface AuthClientErrorOpts {\n message: string;\n cause: Error | AuthClientError;\n presentable: boolean;\n}\n\ndeclare class AuthClientError extends Error {\n readonly errCode: AuthClientErrorCode;\n readonly presentable: boolean;\n /**\n * @param errCode - the AuthClientError code for this message\n * @param context - a message, another Error, or a AuthClientErrorOpts\n */\n constructor(errCode: AuthClientErrorCode, context: Partial<AuthClientErrorOpts> | string | Error);\n}\n\ntype FarcasterLoginEventHandlers = {\n [FarcasterLoginEventOnReceived.OpenChannel]: (channel: CreateChannelAPIResponse) => void;\n [FarcasterLoginEventOnReceived.Success]: (data: StatusAPIResponse) => void;\n [FarcasterLoginEventOnReceived.Failed]: (error: AuthClientError) => void;\n};\n\nconst FARCASTER_RELAY_URL = 'https://relay.farcaster.xyz';\n\nexport class FarcasterExtension extends Extension.Internal<'farcaster'> {\n name = 'farcaster' as const;\n config = {};\n channel: CreateChannelAPIResponse | null = null;\n\n constructor() {\n super();\n\n (async () => {\n this.channel = await fetch(`${FARCASTER_RELAY_URL}/v1/channel`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n domain: window.location.host,\n siweUri: window.location.origin,\n }),\n }).then<CreateChannelAPIResponse>((r) => r.json());\n })();\n }\n\n public login = (params?: LoginParams) => {\n if (!this.channel) {\n throw new Error('Channel not created yet.');\n }\n\n const payload = this.utils.createJsonRpcRequestPayload(FarcasterPayloadMethod.FarcasterShowQR, [\n {\n data: {\n showUI: params?.showUI ?? DEFAULT_SHOW_UI,\n domain: window.location.origin,\n isMobile: isMobile(),\n channel: this.channel,\n },\n },\n ]);\n\n const handle = this.request<string, FarcasterLoginEventHandlers>(payload);\n\n if (isMobile() && isMainFrame()) {\n window.location.href = this.channel.url;\n }\n\n return handle;\n };\n}\n\nexport { isMobile };\n", "// https://github.com/farcasterxyz/auth-monorepo/blob/main/packages/auth-kit/src/utils.ts\n\nexport function isAndroid(): boolean {\n return typeof navigator !== 'undefined' && /android/i.test(navigator.userAgent);\n}\n\nexport function isSmallIOS(): boolean {\n return typeof navigator !== 'undefined' && /iPhone|iPod/.test(navigator.userAgent);\n}\n\nexport function isLargeIOS(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n (/iPad/.test(navigator.userAgent) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1))\n );\n}\n\nexport function isIOS(): boolean {\n return isSmallIOS() || isLargeIOS();\n}\n\nexport function isMobile(): boolean {\n return isAndroid() || isIOS();\n}\n\nexport function isMainFrame(): boolean {\n return typeof window !== 'undefined' && window === window.top;\n}\n"],
5
+ "mappings": "6MAAA,OAAS,aAAAA,MAAiB,qBCEnB,SAASC,GAAqB,CACnC,OAAO,OAAO,WAAc,aAAe,WAAW,KAAK,UAAU,SAAS,CAChF,CAEO,SAASC,GAAsB,CACpC,OAAO,OAAO,WAAc,aAAe,cAAc,KAAK,UAAU,SAAS,CACnF,CAEO,SAASC,GAAsB,CACpC,OACE,OAAO,WAAc,cACpB,OAAO,KAAK,UAAU,SAAS,GAAM,UAAU,WAAa,YAAc,UAAU,eAAiB,EAE1G,CAEO,SAASC,GAAiB,CAC/B,OAAOF,EAAW,GAAKC,EAAW,CACpC,CAEO,SAASE,GAAoB,CAClC,OAAOJ,EAAU,GAAKG,EAAM,CAC9B,CAEO,SAASE,GAAuB,CACrC,OAAO,OAAO,QAAW,aAAe,SAAW,OAAO,GAC5D,CDvBA,IAAMC,EAAkB,GAmExB,IAAMC,EAAsB,8BAEfC,EAAN,cAAiCC,EAAU,QAAsB,CAKtE,aAAc,CACZ,MAAM,EALR,UAAO,YACP,YAAS,CAAC,EACV,aAA2C,KAmB3C,KAAO,MAASC,GAAyB,CA/F3C,IAAAC,EAgGI,GAAI,CAAC,KAAK,QACR,MAAM,IAAI,MAAM,0BAA0B,EAG5C,IAAMC,EAAU,KAAK,MAAM,gDAAoE,CAC7F,CACE,KAAM,CACJ,QAAQD,EAAAD,GAAA,YAAAA,EAAQ,SAAR,KAAAC,EAAkBE,EAC1B,OAAQ,OAAO,SAAS,OACxB,SAAUC,EAAS,EACnB,QAAS,KAAK,OAChB,CACF,CACF,CAAC,EAEKC,EAAS,KAAK,QAA6CH,CAAO,EAExE,OAAIE,EAAS,GAAKE,EAAY,IAC5B,OAAO,SAAS,KAAO,KAAK,QAAQ,KAG/BD,CACT,EArCeE,EAAA,sBACX,KAAK,QAAU,MAAM,MAAM,GAAGV,eAAkC,CAC9D,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,CACnB,OAAQ,OAAO,SAAS,KACxB,QAAS,OAAO,SAAS,MAC3B,CAAC,CACH,CAAC,EAAE,KAAgCW,GAAMA,EAAE,KAAK,CAAC,CACnD,EACF,CA0BF",
6
+ "names": ["Extension", "isAndroid", "isSmallIOS", "isLargeIOS", "isIOS", "isMobile", "isMainFrame", "DEFAULT_SHOW_UI", "FARCASTER_RELAY_URL", "FarcasterExtension", "Extension", "params", "_a", "payload", "DEFAULT_SHOW_UI", "isMobile", "handle", "isMainFrame", "__async", "r"]
7
7
  }
package/dist/es/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var l=(i,s,e)=>new Promise((r,t)=>{var d=n=>{try{o(e.next(n))}catch(a){t(a)}},g=n=>{try{o(e.throw(n))}catch(a){t(a)}},o=n=>n.done?r(n.value):Promise.resolve(n.value).then(d,g);o((e=e.apply(i,s)).next())});import{Extension as v}from"@magic-sdk/commons";function h(){return typeof navigator!="undefined"&&/android/i.test(navigator.userAgent)}function p(){return typeof navigator!="undefined"&&/iPhone|iPod/.test(navigator.userAgent)}function f(){return typeof navigator!="undefined"&&(/iPad/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1)}function C(){return p()||f()}function c(){return h()||C()}var A=!0;var E="https://relay.farcaster.xyz",u=class extends v.Internal{constructor(){super();this.name="farcaster";this.config={};this.channel=null;this.login=e=>{var t;if(!this.channel)throw new Error("Channel not created yet.");let r=this.utils.createJsonRpcRequestPayload("farcaster_show_QR",[{data:{showUI:(t=e==null?void 0:e.showUI)!=null?t:A,domain:window.location.origin,isMobile:c(),channel:this.channel}}]);return this.request(r)};l(this,null,function*(){this.channel=yield fetch(`${E}/v1/channel`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:window.location.host,siweUri:window.location.origin})}).then(e=>e.json())})}};export{u as FarcasterExtension,c as isMobile};
1
+ var d=(l,c,e)=>new Promise((o,t)=>{var r=n=>{try{a(e.next(n))}catch(i){t(i)}},g=n=>{try{a(e.throw(n))}catch(i){t(i)}},a=n=>n.done?o(n.value):Promise.resolve(n.value).then(r,g);a((e=e.apply(l,c)).next())});import{Extension as w}from"@magic-sdk/commons";function p(){return typeof navigator!="undefined"&&/android/i.test(navigator.userAgent)}function f(){return typeof navigator!="undefined"&&/iPhone|iPod/.test(navigator.userAgent)}function C(){return typeof navigator!="undefined"&&(/iPad/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1)}function v(){return f()||C()}function s(){return p()||v()}function u(){return typeof window!="undefined"&&window===window.top}var m=!0;var A="https://relay.farcaster.xyz",h=class extends w.Internal{constructor(){super();this.name="farcaster";this.config={};this.channel=null;this.login=e=>{var r;if(!this.channel)throw new Error("Channel not created yet.");let o=this.utils.createJsonRpcRequestPayload("farcaster_show_QR",[{data:{showUI:(r=e==null?void 0:e.showUI)!=null?r:m,domain:window.location.origin,isMobile:s(),channel:this.channel}}]),t=this.request(o);return s()&&u()&&(window.location.href=this.channel.url),t};d(this,null,function*(){this.channel=yield fetch(`${A}/v1/channel`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:window.location.host,siweUri:window.location.origin})}).then(e=>e.json())})}};export{h as FarcasterExtension,s as isMobile};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts", "../../src/utils.ts"],
4
- "sourcesContent": ["import { Extension } from '@magic-sdk/commons';\nimport { FarcasterPayloadMethod } from './types';\nimport { isMobile } from './utils';\n\nconst DEFAULT_SHOW_UI = true;\n\ntype LoginParams = {\n showUI: boolean;\n};\n\nconst FarcasterLoginEventOnReceived = {\n OpenChannel: 'channel',\n Success: 'success',\n Failed: 'failed',\n} as const;\n\ninterface CreateChannelAPIResponse {\n channelToken: string;\n url: string;\n nonce: string;\n}\n\ntype Hex = `0x${string}`;\n\ninterface StatusAPIResponse {\n state: 'pending' | 'completed';\n nonce: string;\n url: string;\n message?: string;\n signature?: `0x${string}`;\n fid?: number;\n username?: string;\n bio?: string;\n displayName?: string;\n pfpUrl?: string;\n verifications?: Hex[];\n custody?: Hex;\n}\n\ntype AuthClientErrorCode =\n | 'unauthenticated'\n | 'unauthorized'\n | 'bad_request'\n | 'bad_request.validation_failure'\n | 'not_found'\n | 'not_implemented'\n | 'unavailable'\n | 'unknown';\n\ninterface AuthClientErrorOpts {\n message: string;\n cause: Error | AuthClientError;\n presentable: boolean;\n}\n\ndeclare class AuthClientError extends Error {\n readonly errCode: AuthClientErrorCode;\n readonly presentable: boolean;\n /**\n * @param errCode - the AuthClientError code for this message\n * @param context - a message, another Error, or a AuthClientErrorOpts\n */\n constructor(errCode: AuthClientErrorCode, context: Partial<AuthClientErrorOpts> | string | Error);\n}\n\ntype FarcasterLoginEventHandlers = {\n [FarcasterLoginEventOnReceived.OpenChannel]: (channel: CreateChannelAPIResponse) => void;\n [FarcasterLoginEventOnReceived.Success]: (data: StatusAPIResponse) => void;\n [FarcasterLoginEventOnReceived.Failed]: (error: AuthClientError) => void;\n};\n\nconst FARCASTER_RELAY_URL = 'https://relay.farcaster.xyz';\n\nexport class FarcasterExtension extends Extension.Internal<'farcaster'> {\n name = 'farcaster' as const;\n config = {};\n channel: CreateChannelAPIResponse | null = null;\n\n constructor() {\n super();\n\n (async () => {\n this.channel = await fetch(`${FARCASTER_RELAY_URL}/v1/channel`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n domain: window.location.host,\n siweUri: window.location.origin,\n }),\n }).then<CreateChannelAPIResponse>((r) => r.json());\n })();\n }\n\n public login = (params?: LoginParams) => {\n if (!this.channel) {\n throw new Error('Channel not created yet.');\n }\n\n const payload = this.utils.createJsonRpcRequestPayload(FarcasterPayloadMethod.FarcasterShowQR, [\n {\n data: {\n showUI: params?.showUI ?? DEFAULT_SHOW_UI,\n domain: window.location.origin,\n isMobile: isMobile(),\n channel: this.channel,\n },\n },\n ]);\n\n return this.request<string, FarcasterLoginEventHandlers>(payload);\n };\n}\n\nexport { isMobile };\n", "// https://github.com/farcasterxyz/auth-monorepo/blob/main/packages/auth-kit/src/utils.ts\n\nexport function isAndroid(): boolean {\n return typeof navigator !== 'undefined' && /android/i.test(navigator.userAgent);\n}\n\nexport function isSmallIOS(): boolean {\n return typeof navigator !== 'undefined' && /iPhone|iPod/.test(navigator.userAgent);\n}\n\nexport function isLargeIOS(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n (/iPad/.test(navigator.userAgent) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1))\n );\n}\n\nexport function isIOS(): boolean {\n return isSmallIOS() || isLargeIOS();\n}\n\nexport function isMobile(): boolean {\n return isAndroid() || isIOS();\n}\n"],
5
- "mappings": "6MAAA,OAAS,aAAAA,MAAiB,qBCEnB,SAASC,GAAqB,CACnC,OAAO,OAAO,WAAc,aAAe,WAAW,KAAK,UAAU,SAAS,CAChF,CAEO,SAASC,GAAsB,CACpC,OAAO,OAAO,WAAc,aAAe,cAAc,KAAK,UAAU,SAAS,CACnF,CAEO,SAASC,GAAsB,CACpC,OACE,OAAO,WAAc,cACpB,OAAO,KAAK,UAAU,SAAS,GAAM,UAAU,WAAa,YAAc,UAAU,eAAiB,EAE1G,CAEO,SAASC,GAAiB,CAC/B,OAAOF,EAAW,GAAKC,EAAW,CACpC,CAEO,SAASE,GAAoB,CAClC,OAAOJ,EAAU,GAAKG,EAAM,CAC9B,CDnBA,IAAME,EAAkB,GAmExB,IAAMC,EAAsB,8BAEfC,EAAN,cAAiCC,EAAU,QAAsB,CAKtE,aAAc,CACZ,MAAM,EALR,UAAO,YACP,YAAS,CAAC,EACV,aAA2C,KAmB3C,KAAO,MAASC,GAAyB,CA/F3C,IAAAC,EAgGI,GAAI,CAAC,KAAK,QACR,MAAM,IAAI,MAAM,0BAA0B,EAG5C,IAAMC,EAAU,KAAK,MAAM,gDAAoE,CAC7F,CACE,KAAM,CACJ,QAAQD,EAAAD,GAAA,YAAAA,EAAQ,SAAR,KAAAC,EAAkBE,EAC1B,OAAQ,OAAO,SAAS,OACxB,SAAUC,EAAS,EACnB,QAAS,KAAK,OAChB,CACF,CACF,CAAC,EAED,OAAO,KAAK,QAA6CF,CAAO,CAClE,EA/BeG,EAAA,sBACX,KAAK,QAAU,MAAM,MAAM,GAAGR,eAAkC,CAC9D,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,CACnB,OAAQ,OAAO,SAAS,KACxB,QAAS,OAAO,SAAS,MAC3B,CAAC,CACH,CAAC,EAAE,KAAgCS,GAAMA,EAAE,KAAK,CAAC,CACnD,EACF,CAoBF",
6
- "names": ["Extension", "isAndroid", "isSmallIOS", "isLargeIOS", "isIOS", "isMobile", "DEFAULT_SHOW_UI", "FARCASTER_RELAY_URL", "FarcasterExtension", "Extension", "params", "_a", "payload", "DEFAULT_SHOW_UI", "isMobile", "__async", "r"]
4
+ "sourcesContent": ["import { Extension } from '@magic-sdk/commons';\nimport { FarcasterPayloadMethod } from './types';\nimport { isMainFrame, isMobile } from './utils';\n\nconst DEFAULT_SHOW_UI = true;\n\ntype LoginParams = {\n showUI: boolean;\n};\n\nconst FarcasterLoginEventOnReceived = {\n OpenChannel: 'channel',\n Success: 'success',\n Failed: 'failed',\n} as const;\n\ninterface CreateChannelAPIResponse {\n channelToken: string;\n url: string;\n nonce: string;\n}\n\ntype Hex = `0x${string}`;\n\ninterface StatusAPIResponse {\n state: 'pending' | 'completed';\n nonce: string;\n url: string;\n message?: string;\n signature?: `0x${string}`;\n fid?: number;\n username?: string;\n bio?: string;\n displayName?: string;\n pfpUrl?: string;\n verifications?: Hex[];\n custody?: Hex;\n}\n\ntype AuthClientErrorCode =\n | 'unauthenticated'\n | 'unauthorized'\n | 'bad_request'\n | 'bad_request.validation_failure'\n | 'not_found'\n | 'not_implemented'\n | 'unavailable'\n | 'unknown';\n\ninterface AuthClientErrorOpts {\n message: string;\n cause: Error | AuthClientError;\n presentable: boolean;\n}\n\ndeclare class AuthClientError extends Error {\n readonly errCode: AuthClientErrorCode;\n readonly presentable: boolean;\n /**\n * @param errCode - the AuthClientError code for this message\n * @param context - a message, another Error, or a AuthClientErrorOpts\n */\n constructor(errCode: AuthClientErrorCode, context: Partial<AuthClientErrorOpts> | string | Error);\n}\n\ntype FarcasterLoginEventHandlers = {\n [FarcasterLoginEventOnReceived.OpenChannel]: (channel: CreateChannelAPIResponse) => void;\n [FarcasterLoginEventOnReceived.Success]: (data: StatusAPIResponse) => void;\n [FarcasterLoginEventOnReceived.Failed]: (error: AuthClientError) => void;\n};\n\nconst FARCASTER_RELAY_URL = 'https://relay.farcaster.xyz';\n\nexport class FarcasterExtension extends Extension.Internal<'farcaster'> {\n name = 'farcaster' as const;\n config = {};\n channel: CreateChannelAPIResponse | null = null;\n\n constructor() {\n super();\n\n (async () => {\n this.channel = await fetch(`${FARCASTER_RELAY_URL}/v1/channel`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n domain: window.location.host,\n siweUri: window.location.origin,\n }),\n }).then<CreateChannelAPIResponse>((r) => r.json());\n })();\n }\n\n public login = (params?: LoginParams) => {\n if (!this.channel) {\n throw new Error('Channel not created yet.');\n }\n\n const payload = this.utils.createJsonRpcRequestPayload(FarcasterPayloadMethod.FarcasterShowQR, [\n {\n data: {\n showUI: params?.showUI ?? DEFAULT_SHOW_UI,\n domain: window.location.origin,\n isMobile: isMobile(),\n channel: this.channel,\n },\n },\n ]);\n\n const handle = this.request<string, FarcasterLoginEventHandlers>(payload);\n\n if (isMobile() && isMainFrame()) {\n window.location.href = this.channel.url;\n }\n\n return handle;\n };\n}\n\nexport { isMobile };\n", "// https://github.com/farcasterxyz/auth-monorepo/blob/main/packages/auth-kit/src/utils.ts\n\nexport function isAndroid(): boolean {\n return typeof navigator !== 'undefined' && /android/i.test(navigator.userAgent);\n}\n\nexport function isSmallIOS(): boolean {\n return typeof navigator !== 'undefined' && /iPhone|iPod/.test(navigator.userAgent);\n}\n\nexport function isLargeIOS(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n (/iPad/.test(navigator.userAgent) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1))\n );\n}\n\nexport function isIOS(): boolean {\n return isSmallIOS() || isLargeIOS();\n}\n\nexport function isMobile(): boolean {\n return isAndroid() || isIOS();\n}\n\nexport function isMainFrame(): boolean {\n return typeof window !== 'undefined' && window === window.top;\n}\n"],
5
+ "mappings": "6MAAA,OAAS,aAAAA,MAAiB,qBCEnB,SAASC,GAAqB,CACnC,OAAO,OAAO,WAAc,aAAe,WAAW,KAAK,UAAU,SAAS,CAChF,CAEO,SAASC,GAAsB,CACpC,OAAO,OAAO,WAAc,aAAe,cAAc,KAAK,UAAU,SAAS,CACnF,CAEO,SAASC,GAAsB,CACpC,OACE,OAAO,WAAc,cACpB,OAAO,KAAK,UAAU,SAAS,GAAM,UAAU,WAAa,YAAc,UAAU,eAAiB,EAE1G,CAEO,SAASC,GAAiB,CAC/B,OAAOF,EAAW,GAAKC,EAAW,CACpC,CAEO,SAASE,GAAoB,CAClC,OAAOJ,EAAU,GAAKG,EAAM,CAC9B,CAEO,SAASE,GAAuB,CACrC,OAAO,OAAO,QAAW,aAAe,SAAW,OAAO,GAC5D,CDvBA,IAAMC,EAAkB,GAmExB,IAAMC,EAAsB,8BAEfC,EAAN,cAAiCC,EAAU,QAAsB,CAKtE,aAAc,CACZ,MAAM,EALR,UAAO,YACP,YAAS,CAAC,EACV,aAA2C,KAmB3C,KAAO,MAASC,GAAyB,CA/F3C,IAAAC,EAgGI,GAAI,CAAC,KAAK,QACR,MAAM,IAAI,MAAM,0BAA0B,EAG5C,IAAMC,EAAU,KAAK,MAAM,gDAAoE,CAC7F,CACE,KAAM,CACJ,QAAQD,EAAAD,GAAA,YAAAA,EAAQ,SAAR,KAAAC,EAAkBE,EAC1B,OAAQ,OAAO,SAAS,OACxB,SAAUC,EAAS,EACnB,QAAS,KAAK,OAChB,CACF,CACF,CAAC,EAEKC,EAAS,KAAK,QAA6CH,CAAO,EAExE,OAAIE,EAAS,GAAKE,EAAY,IAC5B,OAAO,SAAS,KAAO,KAAK,QAAQ,KAG/BD,CACT,EArCeE,EAAA,sBACX,KAAK,QAAU,MAAM,MAAM,GAAGV,eAAkC,CAC9D,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,CACnB,OAAQ,OAAO,SAAS,KACxB,QAAS,OAAO,SAAS,MAC3B,CAAC,CACH,CAAC,EAAE,KAAgCW,GAAMA,EAAE,KAAK,CAAC,CACnD,EACF,CA0BF",
6
+ "names": ["Extension", "isAndroid", "isSmallIOS", "isLargeIOS", "isIOS", "isMobile", "isMainFrame", "DEFAULT_SHOW_UI", "FARCASTER_RELAY_URL", "FarcasterExtension", "Extension", "params", "_a", "payload", "DEFAULT_SHOW_UI", "isMobile", "handle", "isMainFrame", "__async", "r"]
7
7
  }
package/dist/extension.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var MagicFarcasterExtension=(()=>{var A=Object.create;var i=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var m=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var y=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),R=(e,n)=>{for(var t in n)i(e,t,{get:n[t],enumerable:!0})},d=(e,n,t,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of b(n))!x.call(e,r)&&r!==t&&i(e,r,{get:()=>n[r],enumerable:!(a=E(n,r))||a.enumerable});return e};var w=(e,n,t)=>(t=e!=null?A(m(e)):{},d(n||!e||!e.__esModule?i(t,"default",{value:e,enumerable:!0}):t,e)),I=e=>d(i({},"__esModule",{value:!0}),e);var g=(e,n,t)=>new Promise((a,r)=>{var C=o=>{try{s(t.next(o))}catch(l){r(l)}},v=o=>{try{s(t.throw(o))}catch(l){r(l)}},s=o=>o.done?a(o.value):Promise.resolve(o.value).then(C,v);s((t=t.apply(e,n)).next())});var p=y((T,h)=>{h.exports=Magic});var U={};R(U,{FarcasterExtension:()=>u,isMobile:()=>c});var f=w(p());function O(){return typeof navigator!="undefined"&&/android/i.test(navigator.userAgent)}function P(){return typeof navigator!="undefined"&&/iPhone|iPod/.test(navigator.userAgent)}function S(){return typeof navigator!="undefined"&&(/iPad/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1)}function L(){return P()||S()}function c(){return O()||L()}var _=!0;var F="https://relay.farcaster.xyz",u=class extends f.Extension.Internal{constructor(){super();this.name="farcaster";this.config={};this.channel=null;this.login=t=>{var r;if(!this.channel)throw new Error("Channel not created yet.");let a=this.utils.createJsonRpcRequestPayload("farcaster_show_QR",[{data:{showUI:(r=t==null?void 0:t.showUI)!=null?r:_,domain:window.location.origin,isMobile:c(),channel:this.channel}}]);return this.request(a)};g(this,null,function*(){this.channel=yield fetch(`${F}/v1/channel`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:window.location.host,siweUri:window.location.origin})}).then(t=>t.json())})}};return I(U);})();
1
+ "use strict";var MagicFarcasterExtension=(()=>{var m=Object.create;var s=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var y=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),R=(e,n)=>{for(var t in n)s(e,t,{get:n[t],enumerable:!0})},h=(e,n,t,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of b(n))!x.call(e,r)&&r!==t&&s(e,r,{get:()=>n[r],enumerable:!(a=A(n,r))||a.enumerable});return e};var I=(e,n,t)=>(t=e!=null?m(E(e)):{},h(n||!e||!e.__esModule?s(t,"default",{value:e,enumerable:!0}):t,e)),O=e=>h(s({},"__esModule",{value:!0}),e);var g=(e,n,t)=>new Promise((a,r)=>{var i=o=>{try{c(t.next(o))}catch(d){r(d)}},w=o=>{try{c(t.throw(o))}catch(d){r(d)}},c=o=>o.done?a(o.value):Promise.resolve(o.value).then(i,w);c((t=t.apply(e,n)).next())});var f=y((T,p)=>{p.exports=Magic});var H={};R(H,{FarcasterExtension:()=>u,isMobile:()=>l});var v=I(f());function P(){return typeof navigator!="undefined"&&/android/i.test(navigator.userAgent)}function S(){return typeof navigator!="undefined"&&/iPhone|iPod/.test(navigator.userAgent)}function F(){return typeof navigator!="undefined"&&(/iPad/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1)}function L(){return S()||F()}function l(){return P()||L()}function C(){return typeof window!="undefined"&&window===window.top}var _=!0;var U="https://relay.farcaster.xyz",u=class extends v.Extension.Internal{constructor(){super();this.name="farcaster";this.config={};this.channel=null;this.login=t=>{var i;if(!this.channel)throw new Error("Channel not created yet.");let a=this.utils.createJsonRpcRequestPayload("farcaster_show_QR",[{data:{showUI:(i=t==null?void 0:t.showUI)!=null?i:_,domain:window.location.origin,isMobile:l(),channel:this.channel}}]),r=this.request(a);return l()&&C()&&(window.location.href=this.channel.url),r};g(this,null,function*(){this.channel=yield fetch(`${U}/v1/channel`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:window.location.host,siweUri:window.location.origin})}).then(t=>t.json())})}};return O(H);})();
2
2
  if (MagicFarcasterExtension && MagicFarcasterExtension.default != null) { MagicFarcasterExtension = Object.assign(MagicFarcasterExtension.default, MagicFarcasterExtension); delete MagicFarcasterExtension.default; }
@@ -3,3 +3,4 @@ export declare function isSmallIOS(): boolean;
3
3
  export declare function isLargeIOS(): boolean;
4
4
  export declare function isIOS(): boolean;
5
5
  export declare function isMobile(): boolean;
6
+ export declare function isMainFrame(): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magic-ext/farcaster",
3
- "version": "0.2.0",
3
+ "version": "0.2.1-canary.d6e6d29.0",
4
4
  "description": "magic farcaster extension",
5
5
  "author": "Magic <team@magic.link> (https://magic.link/)",
6
6
  "license": "MIT",
@@ -30,5 +30,5 @@
30
30
  "devDependencies": {
31
31
  "@magic-sdk/commons": "^24.2.0"
32
32
  },
33
- "gitHead": "7ae3e9df5e3a71ad7238c4d25fd09f960f30ce6e"
33
+ "gitHead": "d6e6d2994b896d3447f2661b9bb5a83e0c4548af"
34
34
  }