better-near-auth 1.10.0 → 1.10.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/README.md CHANGED
@@ -51,38 +51,36 @@ npm install better-near-auth
51
51
  });
52
52
  ```
53
53
 
54
- **Relayer Configuration Options:**
55
-
56
- ```ts
57
- // Ephemeral mode (simplest) - auto-generated keypair
58
- relayer: true
59
-
60
- // Ephemeral mode (explicit) - same as above with custom settings
61
- relayer: {
62
- ephemeral: true,
63
- whitelistedContracts: ["myapp.near"],
64
- maxGasPerTransaction: "300000000000000",
65
- maxDepositPerTransaction: "0",
66
- }
67
-
68
- // Explicit mode - bring your own key
69
- relayer: {
70
- accountId: "relayer.myapp.near",
71
- privateKey: process.env.RELAYER_PRIVATE_KEY,
72
- whitelistedContracts: ["myapp.near"],
73
- }
74
-
75
- // Per-network configuration
76
- relayer: {
77
- mainnet: {
78
- whitelistedContracts: ["myapp.near"],
79
- },
80
- testnet: {
81
- whitelistedContracts: ["myapp.testnet"],
82
- maxGasPerTransaction: "100000000000000", // lower for testing
83
- },
84
- }
85
- ```
54
+ **Relayer Configuration Options:**
55
+
56
+ ```ts
57
+ // Ephemeral mode - omit accountId to auto-generate a keypair on first startup
58
+ relayer: {
59
+ whitelistedContracts: ["myapp.near"],
60
+ maxGasPerTransaction: "300000000000000",
61
+ }
62
+
63
+ // Explicit mode - provide accountId and privateKey
64
+ relayer: {
65
+ accountId: "relayer.myapp.near",
66
+ privateKey: process.env.RELAYER_PRIVATE_KEY,
67
+ whitelistedContracts: ["myapp.near"],
68
+ }
69
+
70
+ // Per-network configuration
71
+ relayer: {
72
+ mainnet: {
73
+ accountId: "relayer.myapp.near",
74
+ privateKey: process.env.RELAYER_PRIVATE_KEY_MAINNET,
75
+ },
76
+ testnet: {
77
+ accountId: "relayer.myapp.testnet",
78
+ privateKey: process.env.RELAYER_PRIVATE_KEY_TESTNET,
79
+ },
80
+ }
81
+ ```
82
+
83
+ If `accountId` is set but no `privateKey` is provided, the SIWN plugin logs a warning and falls back to ephemeral mode.
86
84
 
87
85
  3. Generate the schema to add the necessary fields and tables to the database.
88
86
 
@@ -214,42 +212,30 @@ await authClient.near.disconnect();
214
212
 
215
213
  #### Relayer Configuration
216
214
 
217
- The relayer can be configured in several ways:
218
-
219
- | Value | Mode | Description |
220
- |---|---|---|
221
- | `true` | Ephemeral | Auto-generated ED25519 keypair (default) |
222
- | `RelayerEphemeralConfig` | Ephemeral | Ephemeral with custom settings |
223
- | `RelayerExplicitConfig` | Explicit | Bring your own key |
224
- | `RelayerDualNetworkConfig` | Mixed | Per-network configuration |
225
-
226
- **Ephemeral Config (`RelayerEphemeralConfig`):**
215
+ The relayer takes a single flat object (`RelayerConfig`) — `accountId` is the only runtime discriminator. If `accountId` is set, the relayer runs in explicit mode using the resolved `privateKey`. Otherwise, an ED25519 keypair is generated on first startup (ephemeral mode).
227
216
 
228
217
  | Option | Type | Default | Description |
229
218
  |---|---|---|---|
219
+ | `accountId` | `string` | — | Named relayer account. If set, the relayer runs in explicit mode using `privateKey`. |
220
+ | `privateKey` | `string` | — | Base64 / ed25519-format private key. Only used in explicit mode (`accountId` set). |
230
221
  | `whitelistedContracts` | `string[]` | — | Restrict relay to these contracts |
231
222
  | `maxGasPerTransaction` | `string` | — | Max gas per relayed tx |
232
223
  | `maxDepositPerTransaction` | `string` | — | Max deposit per relayed tx |
233
224
 
234
- **Explicit Config (`RelayerExplicitConfig`):**
225
+ To configure mainnet and testnet independently, pass a `RelayerDualNetworkConfig`:
235
226
 
236
- | Option | Type | Default | Description |
237
- |---|---|---|---|
238
- | `accountId` | `string` | — | Named relayer account (required) |
239
- | `privateKey` | `string` | — | Base64 private key (required) |
240
- | `privateKeys` | `string[]` | — | Multiple keys for rotation |
241
- | `whitelistedContracts` | `string[]` | — | Restrict relay to these contracts |
242
- | `maxGasPerTransaction` | `string` | — | Max gas per relayed tx |
243
- | `maxDepositPerTransaction` | `string` | — | Max deposit per relayed tx |
244
-
245
- **Dual Network Config (`RelayerDualNetworkConfig`):**
227
+ ```ts
228
+ siwn({
229
+ relayer: {
230
+ mainnet: { accountId: "relayer.near" },
231
+ testnet: { accountId: "relayer.testnet" },
232
+ },
233
+ });
234
+ ```
246
235
 
247
- | Option | Type | Default | Description |
248
- |---|---|---|---|
249
- | `mainnet` | `RelayerEphemeralConfig \| RelayerExplicitConfig` | — | Mainnet relayer config |
250
- | `testnet` | `RelayerEphemeralConfig \| RelayerExplicitConfig` | — | Testnet relayer config |
236
+ When `accountId` is not set, an ED25519 keypair is generated on first startup, the implicit account ID is derived from the public key, and the private key is encrypted with AES-256-GCM (using `BETTER_AUTH_SECRET` as KEK via HKDF-SHA256) and stored in the database. The same keypair is recovered on restart.
251
237
 
252
- When using `relayer: true` or ephemeral config (no `accountId`/`privateKey`), an ED25519 keypair is generated on first startup, the implicit account ID is derived from the public key, and the private key is encrypted with AES-256-GCM (using `BETTER_AUTH_SECRET` as KEK via HKDF-SHA256) and stored in the database. The same keypair is recovered on restart.
238
+ If `accountId` is set but no `privateKey` is provided, the SIWN plugin logs a warning and falls back to ephemeral mode.
253
239
 
254
240
  ### Client Options
255
241
 
@@ -393,7 +379,7 @@ export const auth = betterAuth({
393
379
  // Ephemeral mode (simplest)
394
380
  relayer: true,
395
381
 
396
- // OR explicit mode
382
+ // OR explicit mode (privateKey provided directly)
397
383
  relayer: {
398
384
  accountId: "relayer.myapp.near",
399
385
  privateKey: process.env.RELAYER_PRIVATE_KEY,
@@ -405,9 +391,13 @@ export const auth = betterAuth({
405
391
  // OR per-network configuration
406
392
  relayer: {
407
393
  mainnet: {
394
+ accountId: "relayer.myapp.near",
395
+ privateKey: process.env.RELAYER_PRIVATE_KEY_MAINNET,
408
396
  whitelistedContracts: ["myapp.near"],
409
397
  },
410
398
  testnet: {
399
+ accountId: "relayer.myapp.testnet",
400
+ privateKey: process.env.RELAYER_PRIVATE_KEY_TESTNET,
411
401
  whitelistedContracts: ["myapp.testnet"],
412
402
  maxGasPerTransaction: "100000000000000",
413
403
  },
@@ -452,8 +442,9 @@ The plugin detects the network from the account ID:
452
442
  | Relay fails with "insufficient balance" | Fund the relayer account with NEAR |
453
443
  | Relay fails with "contract not whitelisted" | Add `receiverId` to `whitelistedContracts` |
454
444
  | Relayer not initializing (ephemeral mode) | Ensure `BETTER_AUTH_SECRET` is set; check startup logs for `[siwn] Relayer initialized` |
455
- | Empty `relayer_key` table | Relayer config not being passed; use `relayer: true` or provide config object |
445
+ | Empty `relayer_key` table | Relayer config not being passed; omit `accountId` to use ephemeral mode |
456
446
  | "BETTER_AUTH_SECRET required" error | Required for ephemeral mode encryption; generate a secure random string |
447
+ | `accountId` set but mode shows `ephemeral` | Your `privateKey` was not passed to the SIWN plugin — provide it directly or via the host's per-network private key secret |
457
448
 
458
449
  ## Examples
459
450
 
package/dist/client.js CHANGED
@@ -117,6 +117,17 @@ const RelayedTransactionSchema = z.object({
117
117
  updatedAt: z.string().optional()
118
118
  });
119
119
  z.object({ transactions: z.array(RelayedTransactionSchema) });
120
+ const relayerConfigSchema = z.object({
121
+ accountId: z.string().optional(),
122
+ privateKey: z.string().optional(),
123
+ whitelistedContracts: z.array(z.string()).optional(),
124
+ maxGasPerTransaction: z.string().regex(/^\d+$/, "must be a non-negative integer string of gas units").optional(),
125
+ maxDepositPerTransaction: z.string().regex(/^\d+$/, "must be a non-negative integer string of yoctoNEAR").optional()
126
+ }).strict();
127
+ z.object({
128
+ mainnet: relayerConfigSchema.optional(),
129
+ testnet: relayerConfigSchema.optional()
130
+ }).strict();
120
131
  z.object({ network: z.enum(["mainnet", "testnet"]).optional() });
121
132
  const SUB_ACCOUNT_LABEL_REGEX = /^([a-z\d]+[-_])*[a-z\d]+$/;
122
133
  const SubAccountNameSchema = z.string().min(2, "Sub-account name must be at least 2 characters").max(64, "Sub-account name must be at most 64 characters").regex(SUB_ACCOUNT_LABEL_REGEX, "Sub-account name must contain only lowercase alphanumeric characters, hyphens, and underscores (no leading/trailing hyphens or underscores)");
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","names":[],"sources":["../src/types.ts","../src/client.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { AccountIdSchema, type AccountId } from \"near-kit/schemas\";\nimport type { AccountState, Near, TransactionBuilder } from \"near-kit\";\n\nexport type { AccountId };\n\nexport interface NearAccount {\n\tid: string;\n\tuserId: string;\n\taccountId: string;\n\tnetwork: \"mainnet\" | \"testnet\";\n\tpublicKey: string;\n\tisPrimary: boolean;\n\tcreatedAt: Date;\n}\n\nexport interface ListedNearAccount extends NearAccount {\n\tproviderId: \"siwn\";\n\tisActive: boolean;\n\tisAvailable: boolean;\n}\n\nexport interface ListAccountsResponseT {\n\taccounts: ListedNearAccount[];\n\tactiveAccount: ListedNearAccount | null;\n\tavailableAccounts: ListedNearAccount[];\n}\n\nexport interface SetPrimaryAccountResponseT extends ListAccountsResponseT {\n\tsuccess: boolean;\n\taccountId: string;\n\tnetwork: \"mainnet\" | \"testnet\";\n\tmessage: string;\n}\n\nexport const socialImageSchema = z.object({\n\turl: z.string().optional(),\n\tipfs_cid: z.string().optional(),\n});\n\nexport const profileSchema = z.object({\n\tname: z.string().optional(),\n\tdescription: z.string().optional(),\n\timage: socialImageSchema.optional(),\n\tbackgroundImage: socialImageSchema.optional(),\n\tlinktree: z.record(z.string(), z.string()).optional(),\n});\n\nexport type SocialImage = z.infer<typeof socialImageSchema>;\nexport type Profile = z.infer<typeof profileSchema>;\n\nconst signedMessageSchema = z.object({\n\taccountId: z.string(),\n\tpublicKey: z.string(),\n\tsignature: z.string(),\n\tstate: z.string().optional(),\n});\n\nexport const LinkAccountRequest = z.object({\n\tsignedMessage: signedMessageSchema,\n\tmessage: z.string(),\n\trecipient: z.string(),\n\tnonce: z.string(),\n\taccountId: AccountIdSchema,\n\tcallbackUrl: z.string().optional(),\n});\n\nexport const SetPrimaryAccountRequest = z.object({\n\taccountId: AccountIdSchema,\n\tnetwork: z.enum([\"mainnet\", \"testnet\"]).optional(),\n});\n\nexport const NonceRequest = z.object({\n\taccountId: AccountIdSchema,\n\tnetworkId: z.union([z.literal(\"mainnet\"), z.literal(\"testnet\")])\n});\n\nexport const VerifyRequest = z.object({\n\tsignedMessage: signedMessageSchema,\n\tmessage: z.string(),\n\trecipient: z.string(),\n\tnonce: z.string(),\n\taccountId: AccountIdSchema,\n\tcallbackUrl: z.string().optional(),\n});\n\nexport const RelayRequest = z.object({\n\tpayload: z.string(),\n});\nexport type RelayRequestT = z.infer<typeof RelayRequest>;\n\nexport const RelayResponse = z.object({\n\ttxHash: z.string(),\n\tstatus: z.enum([\"pending\", \"completed\", \"failed\"]),\n});\nexport type RelayResponseT = z.infer<typeof RelayResponse>;\n\nexport const RelayStatusResponse = z.object({\n\tstatus: z.enum([\"pending\", \"completed\", \"failed\"]),\n\tgasUsed: z.string().optional(),\n\toutcome: z.unknown().optional(),\n});\nexport type RelayStatusResponseT = z.infer<typeof RelayStatusResponse>;\n\nexport const ViewContractRequest = z.object({\n\tcontractId: z.string(),\n\tmethodName: z.string(),\n\targs: z.record(z.string(), z.any()).optional(),\n});\nexport type ViewContractRequestT = z.infer<typeof ViewContractRequest>;\n\nexport const NonceResponse = z.object({ nonce: z.string() });\nexport const VerifyResponse = z.object({\n\ttoken: z.string(),\n\tsuccess: z.literal(true),\n\tuser: z.object({\n\t\tid: z.string(),\n\t\taccountId: AccountIdSchema,\n\t\tnetwork: z.union([z.literal(\"mainnet\"), z.literal(\"testnet\")]),\n\t}),\n});\nexport const ProfileResponse = profileSchema.nullable();\nexport const ViewContractResponse = z.object({ result: z.unknown() });\n\nexport const ProfileRequest = z.object({\n\taccountId: AccountIdSchema.optional(),\n});\nexport type ProfileRequestT = z.infer<typeof ProfileRequest>;\n\nexport type NonceRequestT = z.infer<typeof NonceRequest>;\nexport type NonceResponseT = z.infer<typeof NonceResponse>;\nexport type SetPrimaryAccountRequestT = z.infer<typeof SetPrimaryAccountRequest>;\nexport type VerifyRequestT = z.infer<typeof VerifyRequest>;\nexport type VerifyResponseT = z.infer<typeof VerifyResponse>;\nexport type ProfileResponseT = z.infer<typeof ProfileResponse>;\nexport type ViewContractResponseT = z.infer<typeof ViewContractResponse>;\n\nexport const RelayedTransactionSchema = z.object({\n\tid: z.string(),\n\tuserId: z.string(),\n\ttxHash: z.string(),\n\tsenderId: z.string(),\n\treceiverId: z.string(),\n\tnetwork: z.string(),\n\tstatus: z.string(),\n\tgasUsed: z.string().optional(),\n\tcreatedAt: z.string(),\n\tupdatedAt: z.string().optional(),\n});\nexport type RelayedTransactionT = z.infer<typeof RelayedTransactionSchema>;\n\nexport const RelayHistoryResponse = z.object({\n\ttransactions: z.array(RelayedTransactionSchema),\n});\nexport type RelayHistoryResponseT = z.infer<typeof RelayHistoryResponse>;\n\nexport interface RelayedTransactionRecord {\n\tid: string;\n\tuserId: string;\n\ttxHash: string;\n\tsenderId: string;\n\treceiverId: string;\n\tnetwork: \"mainnet\" | \"testnet\";\n\tstatus: string;\n\tgasUsed?: string;\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n}\n\nexport interface RelayerInfo extends AccountState {\n\taccountId: string;\n\tmode: \"ephemeral\" | \"explicit\";\n\tnetwork: \"mainnet\" | \"testnet\";\n\tpublicKey: string;\n\thasKey: boolean;\n\tcreatedAt?: Date;\n\tlastUsedAt?: Date;\n\tparentAccount?: string;\n\tsubAccountAvailable?: boolean;\n}\n\nexport interface DualNetworkConfig<T> {\n\tmainnet: T;\n\ttestnet: T;\n}\n\nexport const GetRelayerInfoRequest = z.object({\n\tnetwork: z.enum([\"mainnet\", \"testnet\"]).optional(),\n});\nexport type GetRelayerInfoRequestT = z.infer<typeof GetRelayerInfoRequest>;\n\nexport interface SubAccountRelayerFCAKConfig {\n\treceiverId: string;\n\tmethodNames?: string[];\n\tallowance?: string;\n}\n\nexport interface SubAccountTxCtx {\n\tnewAccountId: string;\n\tparentAccount: string;\n\tuserPublicKey: string;\n\tuserAccountId: string;\n\tuserId: string;\n\tnetwork: \"mainnet\" | \"testnet\";\n}\n\nexport interface SubAccountLifecycleCtx extends SubAccountTxCtx {\n\tnear: Near;\n}\n\nexport interface SubAccountConfig {\n\tparentAccount?: string;\n\tminDeposit?: string;\n\tparentHasFullAccess?: boolean;\n\tdeploy?:\n\t\t| { wasm: Uint8Array }\n\t\t| { fromPublished: { accountId?: string; codeHash?: string } };\n\tinit?: {\n\t\tmethodName: string;\n\t\targs: object | ((ctx: SubAccountTxCtx) => object);\n\t};\n\textendTx?: (tx: TransactionBuilder, ctx: SubAccountTxCtx) => TransactionBuilder;\n\tonCreated?: (ctx: SubAccountLifecycleCtx) => Promise<void>;\n\tonRollback?: (ctx: SubAccountLifecycleCtx) => Promise<void>;\n\taddRelayerFCAK?: boolean;\n\trelayerFCAK?: SubAccountRelayerFCAKConfig;\n}\n\nexport const SUB_ACCOUNT_LABEL_REGEX = /^([a-z\\d]+[-_])*[a-z\\d]+$/;\n\nexport const SubAccountNameSchema = z\n\t.string()\n\t.min(2, \"Sub-account name must be at least 2 characters\")\n\t.max(64, \"Sub-account name must be at most 64 characters\")\n\t.regex(SUB_ACCOUNT_LABEL_REGEX, \"Sub-account name must contain only lowercase alphanumeric characters, hyphens, and underscores (no leading/trailing hyphens or underscores)\");\n\nexport const CreateSubAccountRequest = z.object({\n\tsubAccountName: SubAccountNameSchema,\n\tnetwork: z.enum([\"mainnet\", \"testnet\"]).optional(),\n\tpublicKey: z.string(),\n});\nexport type CreateSubAccountRequestT = z.infer<typeof CreateSubAccountRequest>;\n\nexport const CreateSubAccountResponse = z.object({\n\tsuccess: z.literal(true),\n\taccountId: z.string(),\n\tnetwork: z.enum([\"mainnet\", \"testnet\"]),\n\tpublicKey: z.string(),\n\tmessage: z.string(),\n});\nexport type CreateSubAccountResponseT = z.infer<typeof CreateSubAccountResponse>;\n\nexport const CheckSubAccountAvailabilityRequest = z.object({\n\tsubAccountName: SubAccountNameSchema,\n\tnetwork: z.enum([\"mainnet\", \"testnet\"]).optional(),\n});\nexport type CheckSubAccountAvailabilityRequestT = z.infer<typeof CheckSubAccountAvailabilityRequest>;\n\nexport const CheckSubAccountAvailabilityResponse = z.object({\n\tavailable: z.boolean(),\n\taccountId: z.string(),\n\tparentAccount: z.string().optional(),\n\treason: z.enum([\"taken\", \"invalid\", \"too-long\", \"not-configured\"]).optional(),\n});\nexport type CheckSubAccountAvailabilityResponseT = z.infer<typeof CheckSubAccountAvailabilityResponse>;\n","import { Near, fromNearConnect, generateNonce, TransactionBuilder } from \"near-kit\";\nimport type { Near as NearType, SignedMessage } from \"near-kit\";\nimport type { EventMap } from \"@hot-labs/near-connect\";\nimport { hex } from \"@scure/base\";\nimport type { BetterFetch, BetterFetchOption, BetterFetchResponse, ClientStore } from \"better-auth/client\";\nimport { atom } from \"nanostores\";\nimport { type AccountId, type DualNetworkConfig, type NonceRequestT, type NonceResponseT, type ProfileResponseT, type VerifyRequestT, type VerifyResponseT, type RelayResponseT, type RelayStatusResponseT, type NearAccount, type ListAccountsResponseT, type SetPrimaryAccountRequestT, type SetPrimaryAccountResponseT, type ViewContractRequestT, type ViewContractResponseT, type RelayerInfo, type RelayHistoryResponseT, type GetRelayerInfoRequestT, type CreateSubAccountRequestT, type CreateSubAccountResponseT, type CheckSubAccountAvailabilityRequestT, type CheckSubAccountAvailabilityResponseT, SUB_ACCOUNT_LABEL_REGEX } from \"./types.js\";\n\nexport interface AuthCallbacks {\n\tonSuccess?: () => void;\n\tonError?: (error: Error & { status?: number; code?: string }) => void;\n}\n\nexport interface SIWNClientConfig {\n\trecipient?: string;\n\trecipients?: DualNetworkConfig<string>;\n\tnetworkId?: \"mainnet\" | \"testnet\";\n\tcspNonce?: string;\n}\n\ninterface SignWithWalletResult {\n\tsignedMessage: SignedMessage;\n\taccountId: string;\n\tpublicKey: string;\n\tnonceHex: string;\n}\n\nexport interface SIWNClientActions {\n\tnear: {\n\t\tnonce: (params: NonceRequestT) => Promise<BetterFetchResponse<NonceResponseT>>;\n\t\tverify: (params: VerifyRequestT) => Promise<BetterFetchResponse<VerifyResponseT>>;\n\t\tgetProfile: (accountId?: AccountId) => Promise<BetterFetchResponse<ProfileResponseT>>;\n\t\tview: (params: ViewContractRequestT) => Promise<BetterFetchResponse<ViewContractResponseT>>;\n\t\tgetAccountId: () => string | null;\n\t\tgetState: () => { accountId: string | null; publicKey: string | null; networkId: string } | null;\n\t\tisWalletConnected: () => boolean;\n\t\tdetectNearAccount: () => Promise<{ accountId: string; publicKey: string | null; networkId: string } | null>;\n\t\tensureConnected: () => Promise<boolean>;\n\t\tdisconnect: () => Promise<void>;\n\t\tlink: (callbacks?: AuthCallbacks) => Promise<void>;\n\t\tunlink: (params: { accountId: string; network?: \"mainnet\" | \"testnet\" }) => Promise<BetterFetchResponse<{ success: boolean; message: string }>>;\n\t\tlistAccounts: () => Promise<BetterFetchResponse<ListAccountsResponseT>>;\n\t\tsetPrimaryAccount: (params: SetPrimaryAccountRequestT) => Promise<BetterFetchResponse<SetPrimaryAccountResponseT>>;\n\t\tbuildSignedDelegateAction: (receiverId: string, buildActions: (builder: TransactionBuilder, receiverId: string) => TransactionBuilder) => Promise<string>;\n\t\trelayTransaction: (params: { payload: string }) => Promise<BetterFetchResponse<RelayResponseT>>;\n\t\tgetRelayStatus: (txHash: string) => Promise<BetterFetchResponse<RelayStatusResponseT>>;\n\t\tgetRelayerInfo: (params?: GetRelayerInfoRequestT) => Promise<BetterFetchResponse<RelayerInfo & { enabled: boolean }>>;\n\t\trelayHistory: () => Promise<BetterFetchResponse<RelayHistoryResponseT>>;\n\t\tcreateSubAccount: (params: CreateSubAccountRequestT) => Promise<BetterFetchResponse<CreateSubAccountResponseT>>;\n\t\tcheckSubAccountAvailability: (params: CheckSubAccountAvailabilityRequestT) => Promise<BetterFetchResponse<CheckSubAccountAvailabilityResponseT>>;\n\t\tsetNetwork: (network: \"mainnet\" | \"testnet\") => void;\n\t\tgetNetwork: () => \"mainnet\" | \"testnet\";\n\t\tgetSupportedNetworks: () => (\"mainnet\" | \"testnet\")[];\n\t\tgetRecipient: (network?: \"mainnet\" | \"testnet\") => string;\n\t\tgetNearClient: () => NearType;\n\t};\n\tsignIn: {\n\t\tnear: (callbacks?: AuthCallbacks) => Promise<void>;\n\t};\n}\n\ntype NearState = { accountId: string | null; publicKey: string | null; networkId: string } | null;\n\nexport const siwnClient = (config: SIWNClientConfig) => {\n\tconst nearState = atom<NearState>(null);\n\tconst walletConnected = atom<boolean>(false);\n\tconst activeNetwork = atom<\"mainnet\" | \"testnet\">(config.networkId || \"mainnet\");\n\n\tconst getRecipient = (network?: \"mainnet\" | \"testnet\"): string => {\n\t\tconst net = network || activeNetwork.get();\n\t\tif (config.recipients) return config.recipients[net];\n\t\treturn config.recipient ?? \"\";\n\t};\n\n\tconst getSupportedNetworks = (): (\"mainnet\" | \"testnet\")[] => {\n\t\tif (config.recipients) return [\"mainnet\", \"testnet\"];\n\t\tif (config.recipient) return [config.recipient.endsWith(\".testnet\") ? \"testnet\" : \"mainnet\"];\n\t\treturn [\"mainnet\"];\n\t};\n\n\tlet connectors = new Map<\"mainnet\" | \"testnet\", InstanceType<typeof import(\"@hot-labs/near-connect\").NearConnector>>();\n\tlet nearClients = new Map<\"mainnet\" | \"testnet\", Near>();\n\tlet initializedNetworks = new Set<\"mainnet\" | \"testnet\">();\n\tlet connectorModulePromise: Promise<typeof import(\"@hot-labs/near-connect\")> | null = null;\n\tlet initPromises = new Map<\"mainnet\" | \"testnet\", Promise<boolean>>();\n\n\tconst loadConnector = async () => {\n\t\tconnectorModulePromise ??= import(\"@hot-labs/near-connect\");\n\t\tconst { NearConnector } = await connectorModulePromise;\n\t\treturn NearConnector;\n\t};\n\n\tconst handleAccountConnection = async (accountId: string, publicKey?: string | null, network?: \"mainnet\" | \"testnet\") => {\n\t\tif (!accountId) return;\n\t\tconst net = network || activeNetwork.get();\n\t\tnearState.set({\n\t\t\taccountId,\n\t\t\tpublicKey: publicKey || null,\n\t\t\tnetworkId: net,\n\t\t});\n\t\twalletConnected.set(true);\n\t};\n\n\tconst initClientForNetwork = async (network: \"mainnet\" | \"testnet\", $fetch?: BetterFetch): Promise<boolean> => {\n\t\tif (initializedNetworks.has(network)) return true;\n\t\tif (initPromises.has(network)) return initPromises.get(network)!;\n\t\tif (typeof (globalThis as any).window === \"undefined\") return false;\n\n\t\tconst initPromise = (async () => {\n\t\t\tconst NearConnector = await loadConnector();\n\t\t\tconst connector = new NearConnector({ network, cspNonce: config.cspNonce });\n\t\t\tconnectors.set(network, connector);\n\n\t\t\tconst near = new Near({\n\t\t\t\tnetwork,\n\t\t\t\twallet: fromNearConnect(connector),\n\t\t\t});\n\t\t\tnearClients.set(network, near);\n\n\t\t\tconnector.on(\"wallet:signIn\", async (data: EventMap[\"wallet:signIn\"]) => {\n\t\t\t\tconst accountId = data.accounts?.[0]?.accountId;\n\t\t\t\tconst publicKey = data.accounts?.[0]?.publicKey;\n\t\t\t\tif (accountId) {\n\t\t\t\t\tawait handleAccountConnection(accountId, publicKey, network);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconnector.on(\"wallet:signOut\", () => {\n\t\t\t\twalletConnected.set(false);\n\t\t\t\tconst state = nearState.get();\n\t\t\t\tif (state) {\n\t\t\t\t\tnearState.set({ accountId: state.accountId, publicKey: null, networkId: state.networkId });\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvoid connector.getConnectedWallet().then(({ accounts }) => {\n\t\t\t\tconst account = accounts?.[0];\n\t\t\t\tconst net = activeNetwork.get();\n\t\t\t\tif (account?.accountId && !nearState.get()) {\n\t\t\t\t\tnearState.set({\n\t\t\t\t\t\taccountId: account.accountId,\n\t\t\t\t\t\tpublicKey: account.publicKey ?? null,\n\t\t\t\t\t\tnetworkId: net,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (account?.accountId) {\n\t\t\t\t\twalletConnected.set(true);\n\t\t\t\t}\n\t\t\t}).catch(() => {});\n\n\t\t\tinitializedNetworks.add(network);\n\n\t\t\tif ($fetch) {\n\t\t\t\tvoid restoreFromSession($fetch);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t})();\n\n\t\tinitPromises.set(network, initPromise);\n\n\t\ttry {\n\t\t\treturn await initPromise;\n\t\t} finally {\n\t\t\tinitPromises.delete(network);\n\t\t}\n\t};\n\n\tconst initClient = async ($fetch?: BetterFetch): Promise<boolean> => {\n\t\tconst network = activeNetwork.get();\n\t\treturn initClientForNetwork(network, $fetch);\n\t};\n\n\tlet sessionRestored = false;\n\n\tconst restoreFromSession = async ($fetch: BetterFetch) => {\n\t\tif (sessionRestored) return;\n\t\tconst state = nearState.get();\n\t\tif (state?.accountId) {\n\t\t\tsessionRestored = true;\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst res = await $fetch<ListAccountsResponseT>(\"/near/list-accounts\", { method: \"GET\" });\n\t\t\tconst accounts = res.data?.accounts;\n\t\t\tif (accounts?.length) {\n\t\t\t\tconst primary = res.data?.activeAccount || accounts.find((a: NearAccount) => a.isPrimary) || accounts[0];\n\t\t\t\tif (primary) {\n\t\t\t\t\tnearState.set({\n\t\t\t\t\t\taccountId: primary.accountId,\n\t\t\t\t\t\tpublicKey: primary.publicKey ?? null,\n\t\t\t\t\t\tnetworkId: primary.network,\n\t\t\t\t\t});\n\t\t\t\t\tactiveNetwork.set(primary.network);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {}\n\t\tsessionRestored = true;\n\t};\n\n\tconst requireConnector = async (network?: \"mainnet\" | \"testnet\") => {\n\t\tconst net = network || activeNetwork.get();\n\t\tawait initClientForNetwork(net);\n\t\tconst connector = connectors.get(net);\n\t\tif (!connector) throw new Error(`Wallet not initialized for ${net} — this operation requires a browser environment`);\n\t\treturn connector;\n\t};\n\n\tconst requireNear = (network?: \"mainnet\" | \"testnet\"): Near => {\n\t\tconst net = network || activeNetwork.get();\n\t\tconst client = nearClients.get(net);\n\t\tif (!client) throw new Error(`Wallet not initialized for ${net} — this operation requires a browser environment`);\n\t\treturn client;\n\t};\n\n\tconst ensureWalletConnected = async (network?: \"mainnet\" | \"testnet\"): Promise<boolean> => {\n\t\tconst net = network || activeNetwork.get();\n\t\tconst conn = await requireConnector(net);\n\t\tif (walletConnected.get()) {\n\t\t\ttry {\n\t\t\t\tconst { accounts } = await conn.getConnectedWallet();\n\t\t\t\tif (accounts?.length) return true;\n\t\t\t} catch {}\n\t\t}\n\n\t\treturn new Promise<boolean>((resolve) => {\n\t\t\tconst signInHandler = (data: EventMap[\"wallet:signIn\"]) => {\n\t\t\t\tconst accountId = data.accounts?.[0]?.accountId;\n\t\t\t\tconst publicKey = data.accounts?.[0]?.publicKey;\n\t\t\t\tif (accountId) {\n\t\t\t\t\thandleAccountConnection(accountId, publicKey, net);\n\t\t\t\t\tresolve(true);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconn.on(\"wallet:signIn\", signInHandler);\n\n\t\t\tconn.connect().catch(() => {}).finally(() => {\n\t\t\t\tconn.off(\"wallet:signIn\", signInHandler);\n\t\t\t\tif (!walletConnected.get()) {\n\t\t\t\t\tresolve(false);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n\n\tconst signWithWallet = async (): Promise<SignWithWalletResult> => {\n\t\tconst net = activeNetwork.get();\n\t\tconst conn = await requireConnector(net);\n\t\tconst nearClient = requireNear(net);\n\t\tconst recipient = getRecipient(net);\n\n\t\tconst nonceBytes = generateNonce();\n\t\tconst nonceHex = hex.encode(nonceBytes);\n\t\tconst message = `Sign in to ${recipient}`;\n\n\t\tlet connectedWallet: Awaited<ReturnType<typeof conn.getConnectedWallet>> | null = null;\n\t\ttry {\n\t\t\tconnectedWallet = await conn.getConnectedWallet();\n\t\t} catch {}\n\n\t\tif (connectedWallet?.accounts?.length) {\n\t\t\tconst accountId: string = connectedWallet.accounts[0]!.accountId;\n\t\t\tconst isTestnetAccount = accountId.endsWith(\".testnet\");\n\t\t\tconst isExpectedNetwork = (net === \"testnet\") === isTestnetAccount;\n\t\t\tif (!isExpectedNetwork) {\n\t\t\t\tconnectedWallet = null;\n\t\t\t}\n\t\t}\n\n\t\tif (connectedWallet?.accounts?.length) {\n\t\t\tconst signedMessage = await nearClient.signMessage({\n\t\t\t\tmessage,\n\t\t\t\trecipient,\n\t\t\t\tnonce: nonceBytes,\n\t\t\t});\n\n\t\t\tif (!signedMessage?.accountId) {\n\t\t\t\tthrow new Error(\"Wallet sign-in was cancelled or failed\");\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tsignedMessage,\n\t\t\t\taccountId: signedMessage.accountId,\n\t\t\t\tpublicKey: signedMessage.publicKey,\n\t\t\t\tnonceHex,\n\t\t\t};\n\t\t}\n\n\t\tconst result: { value: { signedMessage: SignedMessage; accountId: string; publicKey: string } | null } = { value: null };\n\t\tconst handler = (data: EventMap[\"wallet:signInAndSignMessage\"]) => {\n\t\t\tconst account = data.accounts?.[0];\n\t\t\tif (account?.signedMessage) {\n\t\t\t\tresult.value = {\n\t\t\t\t\tsignedMessage: account.signedMessage,\n\t\t\t\t\taccountId: account.accountId,\n\t\t\t\t\tpublicKey: account.signedMessage.publicKey,\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tconn.on(\"wallet:signInAndSignMessage\", handler);\n\n\t\ttry {\n\t\t\tawait conn.connect({\n\t\t\t\tsignMessageParams: {\n\t\t\t\t\tmessage,\n\t\t\t\t\trecipient,\n\t\t\t\t\tnonce: nonceBytes,\n\t\t\t\t},\n\t\t\t});\n\t\t} finally {\n\t\t\tconn.off(\"wallet:signInAndSignMessage\", handler);\n\t\t}\n\n\t\tif (!result.value) {\n\t\t\tthrow new Error(\"Wallet sign-in was cancelled or failed\");\n\t\t}\n\n\t\treturn {\n\t\t\tsignedMessage: result.value.signedMessage,\n\t\t\taccountId: result.value.accountId,\n\t\t\tpublicKey: result.value.publicKey,\n\t\t\tnonceHex,\n\t\t};\n\t};\n\n\tconst buildSignedDelegateActionInternal = async (\n\t\treceiverId: string,\n\t\tbuildActions: (builder: TransactionBuilder, receiverId: string) => TransactionBuilder,\n\t): Promise<string> => {\n\t\tconst net = activeNetwork.get();\n\t\tconst state = nearState.get();\n\t\tif (!state?.accountId) {\n\t\t\tthrow new Error(\"No NEAR account found — please sign in with your NEAR wallet\");\n\t\t}\n\n\t\tif (!walletConnected.get()) {\n\t\t\tconst reconnected = await ensureWalletConnected(net);\n\t\t\tif (!reconnected) {\n\t\t\t\tthrow new Error(\"Wallet connection required — please approve the connection to sign\");\n\t\t\t}\n\t\t}\n\n\t\tconst nearClient = requireNear(net);\n\t\tconst builder = buildActions(nearClient.transaction(state.accountId), receiverId);\n\n\t\tconst { payload } = await builder.delegate();\n\t\treturn payload;\n\t};\n\n\tconst plugin = {\n\t\tid: \"siwn\" as const,\n\t\t$InferServerPlugin: {},\n\n\t\tgetAtoms: (_$fetch: BetterFetch) => ({\n\t\t\tnearState,\n\t\t\twalletConnected,\n\t\t\tactiveNetwork,\n\t\t}),\n\n\t\tgetActions: ($fetch: BetterFetch, $store: ClientStore, _options: unknown): SIWNClientActions => {\n\t\t\tvoid initClient($fetch);\n\n\t\t\tconst sessionAtom = $store.atoms?.session;\n\t\t\tif (sessionAtom) {\n\t\t\t\tsessionAtom.subscribe(() => {\n\t\t\t\t\tconst sessionData = sessionAtom.get()?.data ?? null;\n\t\t\t\t\tif (sessionData === null) {\n\t\t\t\t\t\tfor (const [_net, conn] of connectors) {\n\t\t\t\t\t\t\tvoid conn?.disconnect().catch(() => {});\n\t\t\t\t\t\t}\n\t\t\t\t\t\twalletConnected.set(false);\n\t\t\t\t\t\tnearState.set(null);\n\t\t\t\t\t\tsessionRestored = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tnear: {\n\t\t\t\t\tnonce: async (params: NonceRequestT, fetchOptions?: BetterFetchOption) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/nonce\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: params,\n\t\t\t\t\t\t\t...fetchOptions\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tverify: async (params: VerifyRequestT, fetchOptions?: BetterFetchOption) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/verify\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: params,\n\t\t\t\t\t\t\t...fetchOptions\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tgetProfile: async (accountId?: AccountId, fetchOptions?: BetterFetchOption) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/profile\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: { accountId },\n\t\t\t\t\t\t\t...fetchOptions\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tview: async (params: ViewContractRequestT, fetchOptions?: BetterFetchOption) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/view\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: params,\n\t\t\t\t\t\t\t...fetchOptions\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tgetAccountId: () => {\n\t\t\t\t\t\tconst state = nearState.get();\n\t\t\t\t\t\treturn state?.accountId || null;\n\t\t\t\t\t},\n\t\t\t\t\tgetState: () => nearState.get(),\n\t\t\t\t\tisWalletConnected: () => walletConnected.get(),\n\t\t\t\t\tdetectNearAccount: async () => {\n\t\t\t\t\t\tconst state = nearState.get();\n\t\t\t\t\t\tif (state?.accountId && walletConnected.get()) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\taccountId: state.accountId,\n\t\t\t\t\t\t\t\tpublicKey: state.publicKey ?? null,\n\t\t\t\t\t\t\t\tnetworkId: state.networkId,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const network of getSupportedNetworks()) {\n\t\t\t\t\t\t\tconst initialized = await initClientForNetwork(network);\n\t\t\t\t\t\t\tif (!initialized) continue;\n\t\t\t\t\t\t\tconst conn = connectors.get(network);\n\t\t\t\t\t\t\tif (!conn) continue;\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst { accounts } = await conn.getConnectedWallet();\n\t\t\t\t\t\t\t\tif (accounts?.length) {\n\t\t\t\t\t\t\t\t\tconst account = accounts[0]!;\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\taccountId: account.accountId,\n\t\t\t\t\t\t\t\t\t\tpublicKey: account.publicKey ?? null,\n\t\t\t\t\t\t\t\t\t\tnetworkId: network,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t},\n\t\t\t\t\tensureConnected: async () => {\n\t\t\t\t\t\tconst net = activeNetwork.get();\n\t\t\t\t\t\tif (!initializedNetworks.has(net)) {\n\t\t\t\t\t\t\tif (!(await initClientForNetwork(net))) return false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (walletConnected.get()) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst conn = connectors.get(net);\n\t\t\t\t\t\t\t\tif (conn) {\n\t\t\t\t\t\t\t\t\tconst { accounts } = await conn.getConnectedWallet();\n\t\t\t\t\t\t\t\t\tif (accounts?.length) return true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\tconsole.error(\"[siwn] restoreFromSession failed:\", err instanceof Error ? err.message : err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn ensureWalletConnected(net);\n\t\t\t\t\t},\n\t\t\t\t\tdisconnect: async () => {\n\t\t\t\t\t\tfor (const [_net, conn] of connectors) {\n\t\t\t\t\t\t\tif (conn) {\n\t\t\t\t\t\t\t\ttry { await conn.disconnect(); } catch {}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\twalletConnected.set(false);\n\t\t\t\t\t\tnearState.set(null);\n\t\t\t\t\t\tsessionRestored = false;\n\t\t\t\t\t},\n\t\t\t\t\tlink: async (callbacks?: AuthCallbacks) => {\n\t\t\t\t\t\tconst net = activeNetwork.get();\n\t\t\t\t\t\tconst recipient = getRecipient(net);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst { signedMessage, accountId, nonceHex } = await signWithWallet();\n\t\t\t\t\t\t\tconst message = `Sign in to ${recipient}`;\n\n\t\t\t\t\t\t\tawait handleAccountConnection(accountId, signedMessage.publicKey, net);\n\n\t\t\t\t\t\t\tconst linkResponse = await $fetch<{ success: boolean; accountId: string; network: string; message: string }>(\"/near/link-account\", {\n\t\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\tsignedMessage,\n\t\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\t\trecipient,\n\t\t\t\t\t\t\t\t\tnonce: nonceHex,\n\t\t\t\t\t\t\t\t\taccountId,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (linkResponse.error) {\n\t\t\t\t\t\t\t\tthrow new Error(linkResponse.error.message || \"Failed to link NEAR account\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!linkResponse?.data?.success) {\n\t\t\t\t\t\t\t\tthrow new Error(\"Account linking failed\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcallbacks?.onSuccess?.();\n\t\t\t\t\t\t\t$store.notify(\"$sessionSignal\");\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t\t\tcallbacks?.onError?.(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tunlink: async (\n\t\t\t\t\t\tparams: { accountId: string; network?: \"mainnet\" | \"testnet\" },\n\t\t\t\t\t\tfetchOptions?: BetterFetchOption\n\t\t\t\t\t) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/unlink-account\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: params,\n\t\t\t\t\t\t\t...fetchOptions\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tlistAccounts: async (): Promise<BetterFetchResponse<ListAccountsResponseT>> => {\n\t\t\t\t\t\treturn await $fetch(\"/near/list-accounts\", { method: \"GET\" });\n\t\t\t\t\t},\n\t\t\t\t\tsetPrimaryAccount: async (params: SetPrimaryAccountRequestT) => {\n\t\t\t\t\t\tconst response = await $fetch<SetPrimaryAccountResponseT>(\"/near/set-primary-account\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: params,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst activeAccount = response.data?.activeAccount;\n\t\t\t\t\t\tif (activeAccount) {\n\t\t\t\t\t\t\tnearState.set({\n\t\t\t\t\t\t\t\taccountId: activeAccount.accountId,\n\t\t\t\t\t\t\t\tpublicKey: activeAccount.publicKey ?? null,\n\t\t\t\t\t\t\t\tnetworkId: activeAccount.network,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tactiveNetwork.set(activeAccount.network);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t},\n\t\t\t\t\tbuildSignedDelegateAction: async (\n\t\t\t\t\t\treceiverId: string,\n\t\t\t\t\t\tbuildActions: (builder: TransactionBuilder, receiverId: string) => TransactionBuilder,\n\t\t\t\t\t): Promise<string> => {\n\t\t\t\t\t\treturn buildSignedDelegateActionInternal(receiverId, buildActions);\n\t\t\t\t\t},\n\t\t\t\t\trelayTransaction: async (params: { payload: string }) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/relay\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: params,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tgetRelayStatus: async (txHash: string) => {\n\t\t\t\t\t\treturn await $fetch(`/near/relay-status/${txHash}`, {\n\t\t\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tgetRelayerInfo: async (params?: GetRelayerInfoRequestT) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/relayer-info\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: { ...(params ?? {}), network: params?.network ?? activeNetwork.get() },\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\trelayHistory: async () => {\n\t\t\t\t\t\treturn await $fetch(\"/near/relay-history\", {\n\t\t\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcreateSubAccount: async (params: CreateSubAccountRequestT) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/create-sub-account\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: { ...params, network: params.network ?? activeNetwork.get() },\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\tcheckSubAccountAvailability: async (params: CheckSubAccountAvailabilityRequestT) => {\n\t\t\t\t\tif (!SUB_ACCOUNT_LABEL_REGEX.test(params.subAccountName) || params.subAccountName.length < 2) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tdata: { available: false, accountId: \"\", reason: \"invalid\" as const },\n\t\t\t\t\t\t\terror: null,\n\t\t\t\t\t\t} as BetterFetchResponse<CheckSubAccountAvailabilityResponseT>;\n\t\t\t\t\t}\n\t\t\t\t\treturn await $fetch(\"/near/check-sub-account-availability\", {\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\tbody: { ...params, network: params.network ?? activeNetwork.get() },\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t\tsetNetwork: (network: \"mainnet\" | \"testnet\") => {\n\t\t\t\t\t\tconst prev = activeNetwork.get();\n\t\t\t\t\t\tif (prev !== network) {\n\t\t\t\t\t\t\tconst oldConn = connectors.get(prev);\n\t\t\t\t\t\t\tif (oldConn) {\n\t\t\t\t\t\t\t\tvoid oldConn.disconnect().catch(() => {});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twalletConnected.set(false);\n\t\t\t\t\t\t\tnearState.set(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tactiveNetwork.set(network);\n\t\t\t\t\t\tvoid initClientForNetwork(network);\n\t\t\t\t\t},\n\t\t\t\t\tgetNetwork: () => activeNetwork.get(),\n\t\t\t\t\tgetSupportedNetworks: () => getSupportedNetworks(),\n\t\t\t\t\tgetRecipient: (network?: \"mainnet\" | \"testnet\") => getRecipient(network),\n\t\t\t\t\tgetNearClient: (): NearType => {\n\t\t\t\t\t\tconst net = activeNetwork.get();\n\t\t\t\t\t\tconst client = nearClients.get(net);\n\t\t\t\t\t\tif (!client) throw new Error(`Wallet not initialized for ${net} — this operation requires a browser environment`);\n\t\t\t\t\t\treturn client;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsignIn: {\n\t\t\t\t\tnear: async (callbacks?: AuthCallbacks) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst { signedMessage, accountId, nonceHex } = await signWithWallet();\n\t\t\t\t\t\t\tconst net = activeNetwork.get();\n\t\t\t\t\t\t\tconst recipient = getRecipient(net);\n\t\t\t\t\t\t\tconst message = `Sign in to ${recipient}`;\n\n\t\t\t\t\t\t\tawait handleAccountConnection(accountId, signedMessage.publicKey, net);\n\n\t\t\t\t\t\t\tconst verifyResponse: BetterFetchResponse<VerifyResponseT> = await $fetch(\"/near/verify\", {\n\t\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\tsignedMessage,\n\t\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\t\trecipient,\n\t\t\t\t\t\t\t\t\tnonce: nonceHex,\n\t\t\t\t\t\t\t\t\taccountId,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (verifyResponse.error) {\n\t\t\t\t\t\t\t\tthrow new Error(verifyResponse.error.message || \"Failed to verify signature\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!verifyResponse?.data?.success) {\n\t\t\t\t\t\t\t\tthrow new Error(\"Authentication verification failed\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcallbacks?.onSuccess?.();\n\t\t\t\t\t\t\t$store.notify(\"$sessionSignal\");\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t\t\tcallbacks?.onError?.(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n\n\treturn plugin;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","names":[],"sources":["../src/types.ts","../src/client.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { AccountIdSchema, type AccountId } from \"near-kit/schemas\";\nimport type { AccountState, Near, TransactionBuilder } from \"near-kit\";\n\nexport type { AccountId };\n\nexport interface NearAccount {\n\tid: string;\n\tuserId: string;\n\taccountId: string;\n\tnetwork: \"mainnet\" | \"testnet\";\n\tpublicKey: string;\n\tisPrimary: boolean;\n\tcreatedAt: Date;\n}\n\nexport interface ListedNearAccount extends NearAccount {\n\tproviderId: \"siwn\";\n\tisActive: boolean;\n\tisAvailable: boolean;\n}\n\nexport interface ListAccountsResponseT {\n\taccounts: ListedNearAccount[];\n\tactiveAccount: ListedNearAccount | null;\n\tavailableAccounts: ListedNearAccount[];\n}\n\nexport interface SetPrimaryAccountResponseT extends ListAccountsResponseT {\n\tsuccess: boolean;\n\taccountId: string;\n\tnetwork: \"mainnet\" | \"testnet\";\n\tmessage: string;\n}\n\nexport const socialImageSchema = z.object({\n\turl: z.string().optional(),\n\tipfs_cid: z.string().optional(),\n});\n\nexport const profileSchema = z.object({\n\tname: z.string().optional(),\n\tdescription: z.string().optional(),\n\timage: socialImageSchema.optional(),\n\tbackgroundImage: socialImageSchema.optional(),\n\tlinktree: z.record(z.string(), z.string()).optional(),\n});\n\nexport type SocialImage = z.infer<typeof socialImageSchema>;\nexport type Profile = z.infer<typeof profileSchema>;\n\nconst signedMessageSchema = z.object({\n\taccountId: z.string(),\n\tpublicKey: z.string(),\n\tsignature: z.string(),\n\tstate: z.string().optional(),\n});\n\nexport const LinkAccountRequest = z.object({\n\tsignedMessage: signedMessageSchema,\n\tmessage: z.string(),\n\trecipient: z.string(),\n\tnonce: z.string(),\n\taccountId: AccountIdSchema,\n\tcallbackUrl: z.string().optional(),\n});\n\nexport const SetPrimaryAccountRequest = z.object({\n\taccountId: AccountIdSchema,\n\tnetwork: z.enum([\"mainnet\", \"testnet\"]).optional(),\n});\n\nexport const NonceRequest = z.object({\n\taccountId: AccountIdSchema,\n\tnetworkId: z.union([z.literal(\"mainnet\"), z.literal(\"testnet\")])\n});\n\nexport const VerifyRequest = z.object({\n\tsignedMessage: signedMessageSchema,\n\tmessage: z.string(),\n\trecipient: z.string(),\n\tnonce: z.string(),\n\taccountId: AccountIdSchema,\n\tcallbackUrl: z.string().optional(),\n});\n\nexport const RelayRequest = z.object({\n\tpayload: z.string(),\n});\nexport type RelayRequestT = z.infer<typeof RelayRequest>;\n\nexport const RelayResponse = z.object({\n\ttxHash: z.string(),\n\tstatus: z.enum([\"pending\", \"completed\", \"failed\"]),\n});\nexport type RelayResponseT = z.infer<typeof RelayResponse>;\n\nexport const RelayStatusResponse = z.object({\n\tstatus: z.enum([\"pending\", \"completed\", \"failed\"]),\n\tgasUsed: z.string().optional(),\n\toutcome: z.unknown().optional(),\n});\nexport type RelayStatusResponseT = z.infer<typeof RelayStatusResponse>;\n\nexport const ViewContractRequest = z.object({\n\tcontractId: z.string(),\n\tmethodName: z.string(),\n\targs: z.record(z.string(), z.any()).optional(),\n});\nexport type ViewContractRequestT = z.infer<typeof ViewContractRequest>;\n\nexport const NonceResponse = z.object({ nonce: z.string() });\nexport const VerifyResponse = z.object({\n\ttoken: z.string(),\n\tsuccess: z.literal(true),\n\tuser: z.object({\n\t\tid: z.string(),\n\t\taccountId: AccountIdSchema,\n\t\tnetwork: z.union([z.literal(\"mainnet\"), z.literal(\"testnet\")]),\n\t}),\n});\nexport const ProfileResponse = profileSchema.nullable();\nexport const ViewContractResponse = z.object({ result: z.unknown() });\n\nexport const ProfileRequest = z.object({\n\taccountId: AccountIdSchema.optional(),\n});\nexport type ProfileRequestT = z.infer<typeof ProfileRequest>;\n\nexport type NonceRequestT = z.infer<typeof NonceRequest>;\nexport type NonceResponseT = z.infer<typeof NonceResponse>;\nexport type SetPrimaryAccountRequestT = z.infer<typeof SetPrimaryAccountRequest>;\nexport type VerifyRequestT = z.infer<typeof VerifyRequest>;\nexport type VerifyResponseT = z.infer<typeof VerifyResponse>;\nexport type ProfileResponseT = z.infer<typeof ProfileResponse>;\nexport type ViewContractResponseT = z.infer<typeof ViewContractResponse>;\n\nexport const RelayedTransactionSchema = z.object({\n\tid: z.string(),\n\tuserId: z.string(),\n\ttxHash: z.string(),\n\tsenderId: z.string(),\n\treceiverId: z.string(),\n\tnetwork: z.string(),\n\tstatus: z.string(),\n\tgasUsed: z.string().optional(),\n\tcreatedAt: z.string(),\n\tupdatedAt: z.string().optional(),\n});\nexport type RelayedTransactionT = z.infer<typeof RelayedTransactionSchema>;\n\nexport const RelayHistoryResponse = z.object({\n\ttransactions: z.array(RelayedTransactionSchema),\n});\nexport type RelayHistoryResponseT = z.infer<typeof RelayHistoryResponse>;\n\nexport interface RelayedTransactionRecord {\n\tid: string;\n\tuserId: string;\n\ttxHash: string;\n\tsenderId: string;\n\treceiverId: string;\n\tnetwork: \"mainnet\" | \"testnet\";\n\tstatus: string;\n\tgasUsed?: string;\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n}\n\nexport const relayerConfigSchema = z\n\t.object({\n\t\taccountId: z.string().optional(),\n\t\tprivateKey: z.string().optional(),\n\t\twhitelistedContracts: z.array(z.string()).optional(),\n\t\tmaxGasPerTransaction: z\n\t\t\t.string()\n\t\t\t.regex(/^\\d+$/, \"must be a non-negative integer string of gas units\")\n\t\t\t.optional(),\n\t\tmaxDepositPerTransaction: z\n\t\t\t.string()\n\t\t\t.regex(/^\\d+$/, \"must be a non-negative integer string of yoctoNEAR\")\n\t\t\t.optional(),\n\t})\n\t.strict();\n\nexport const relayerDualNetworkConfigSchema = z\n\t.object({\n\t\tmainnet: relayerConfigSchema.optional(),\n\t\ttestnet: relayerConfigSchema.optional(),\n\t})\n\t.strict();\n\nexport type RelayerConfig = z.infer<typeof relayerConfigSchema>;\nexport type RelayerDualNetworkConfig = z.infer<typeof relayerDualNetworkConfigSchema>;\n\nexport interface RelayerInfo extends AccountState {\n\taccountId: string;\n\tmode: \"ephemeral\" | \"explicit\";\n\tnetwork: \"mainnet\" | \"testnet\";\n\tpublicKey: string;\n\thasKey: boolean;\n\tcreatedAt?: Date;\n\tlastUsedAt?: Date;\n\tparentAccount?: string;\n\tsubAccountAvailable?: boolean;\n\terror?: string;\n}\n\nexport interface DualNetworkConfig<T> {\n\tmainnet: T;\n\ttestnet: T;\n}\n\nexport const GetRelayerInfoRequest = z.object({\n\tnetwork: z.enum([\"mainnet\", \"testnet\"]).optional(),\n});\nexport type GetRelayerInfoRequestT = z.infer<typeof GetRelayerInfoRequest>;\n\nexport interface SubAccountRelayerFCAKConfig {\n\treceiverId: string;\n\tmethodNames?: string[];\n\tallowance?: string;\n}\n\nexport interface SubAccountTxCtx {\n\tnewAccountId: string;\n\tparentAccount: string;\n\tuserPublicKey: string;\n\tuserAccountId: string;\n\tuserId: string;\n\tnetwork: \"mainnet\" | \"testnet\";\n}\n\nexport interface SubAccountLifecycleCtx extends SubAccountTxCtx {\n\tnear: Near;\n}\n\nexport interface SubAccountConfig {\n\tparentAccount?: string;\n\tminDeposit?: string;\n\tparentHasFullAccess?: boolean;\n\tdeploy?:\n\t\t| { wasm: Uint8Array }\n\t\t| { fromPublished: { accountId?: string; codeHash?: string } };\n\tinit?: {\n\t\tmethodName: string;\n\t\targs: object | ((ctx: SubAccountTxCtx) => object);\n\t};\n\textendTx?: (tx: TransactionBuilder, ctx: SubAccountTxCtx) => TransactionBuilder;\n\tonCreated?: (ctx: SubAccountLifecycleCtx) => Promise<void>;\n\tonRollback?: (ctx: SubAccountLifecycleCtx) => Promise<void>;\n\taddRelayerFCAK?: boolean;\n\trelayerFCAK?: SubAccountRelayerFCAKConfig;\n}\n\nexport const SUB_ACCOUNT_LABEL_REGEX = /^([a-z\\d]+[-_])*[a-z\\d]+$/;\n\nexport const SubAccountNameSchema = z\n\t.string()\n\t.min(2, \"Sub-account name must be at least 2 characters\")\n\t.max(64, \"Sub-account name must be at most 64 characters\")\n\t.regex(SUB_ACCOUNT_LABEL_REGEX, \"Sub-account name must contain only lowercase alphanumeric characters, hyphens, and underscores (no leading/trailing hyphens or underscores)\");\n\nexport const CreateSubAccountRequest = z.object({\n\tsubAccountName: SubAccountNameSchema,\n\tnetwork: z.enum([\"mainnet\", \"testnet\"]).optional(),\n\tpublicKey: z.string(),\n});\nexport type CreateSubAccountRequestT = z.infer<typeof CreateSubAccountRequest>;\n\nexport const CreateSubAccountResponse = z.object({\n\tsuccess: z.literal(true),\n\taccountId: z.string(),\n\tnetwork: z.enum([\"mainnet\", \"testnet\"]),\n\tpublicKey: z.string(),\n\tmessage: z.string(),\n});\nexport type CreateSubAccountResponseT = z.infer<typeof CreateSubAccountResponse>;\n\nexport const CheckSubAccountAvailabilityRequest = z.object({\n\tsubAccountName: SubAccountNameSchema,\n\tnetwork: z.enum([\"mainnet\", \"testnet\"]).optional(),\n});\nexport type CheckSubAccountAvailabilityRequestT = z.infer<typeof CheckSubAccountAvailabilityRequest>;\n\nexport const CheckSubAccountAvailabilityResponse = z.object({\n\tavailable: z.boolean(),\n\taccountId: z.string(),\n\tparentAccount: z.string().optional(),\n\treason: z.enum([\"taken\", \"invalid\", \"too-long\", \"not-configured\"]).optional(),\n});\nexport type CheckSubAccountAvailabilityResponseT = z.infer<typeof CheckSubAccountAvailabilityResponse>;\n","import { Near, fromNearConnect, generateNonce, TransactionBuilder } from \"near-kit\";\nimport type { Near as NearType, SignedMessage } from \"near-kit\";\nimport type { EventMap } from \"@hot-labs/near-connect\";\nimport { hex } from \"@scure/base\";\nimport type { BetterFetch, BetterFetchOption, BetterFetchResponse, ClientStore } from \"better-auth/client\";\nimport { atom } from \"nanostores\";\nimport { type AccountId, type DualNetworkConfig, type NonceRequestT, type NonceResponseT, type ProfileResponseT, type VerifyRequestT, type VerifyResponseT, type RelayResponseT, type RelayStatusResponseT, type NearAccount, type ListAccountsResponseT, type SetPrimaryAccountRequestT, type SetPrimaryAccountResponseT, type ViewContractRequestT, type ViewContractResponseT, type RelayerInfo, type RelayHistoryResponseT, type GetRelayerInfoRequestT, type CreateSubAccountRequestT, type CreateSubAccountResponseT, type CheckSubAccountAvailabilityRequestT, type CheckSubAccountAvailabilityResponseT, SUB_ACCOUNT_LABEL_REGEX } from \"./types.js\";\n\nexport interface AuthCallbacks {\n\tonSuccess?: () => void;\n\tonError?: (error: Error & { status?: number; code?: string }) => void;\n}\n\nexport interface SIWNClientConfig {\n\trecipient?: string;\n\trecipients?: DualNetworkConfig<string>;\n\tnetworkId?: \"mainnet\" | \"testnet\";\n\tcspNonce?: string;\n}\n\ninterface SignWithWalletResult {\n\tsignedMessage: SignedMessage;\n\taccountId: string;\n\tpublicKey: string;\n\tnonceHex: string;\n}\n\nexport interface SIWNClientActions {\n\tnear: {\n\t\tnonce: (params: NonceRequestT) => Promise<BetterFetchResponse<NonceResponseT>>;\n\t\tverify: (params: VerifyRequestT) => Promise<BetterFetchResponse<VerifyResponseT>>;\n\t\tgetProfile: (accountId?: AccountId) => Promise<BetterFetchResponse<ProfileResponseT>>;\n\t\tview: (params: ViewContractRequestT) => Promise<BetterFetchResponse<ViewContractResponseT>>;\n\t\tgetAccountId: () => string | null;\n\t\tgetState: () => { accountId: string | null; publicKey: string | null; networkId: string } | null;\n\t\tisWalletConnected: () => boolean;\n\t\tdetectNearAccount: () => Promise<{ accountId: string; publicKey: string | null; networkId: string } | null>;\n\t\tensureConnected: () => Promise<boolean>;\n\t\tdisconnect: () => Promise<void>;\n\t\tlink: (callbacks?: AuthCallbacks) => Promise<void>;\n\t\tunlink: (params: { accountId: string; network?: \"mainnet\" | \"testnet\" }) => Promise<BetterFetchResponse<{ success: boolean; message: string }>>;\n\t\tlistAccounts: () => Promise<BetterFetchResponse<ListAccountsResponseT>>;\n\t\tsetPrimaryAccount: (params: SetPrimaryAccountRequestT) => Promise<BetterFetchResponse<SetPrimaryAccountResponseT>>;\n\t\tbuildSignedDelegateAction: (receiverId: string, buildActions: (builder: TransactionBuilder, receiverId: string) => TransactionBuilder) => Promise<string>;\n\t\trelayTransaction: (params: { payload: string }) => Promise<BetterFetchResponse<RelayResponseT>>;\n\t\tgetRelayStatus: (txHash: string) => Promise<BetterFetchResponse<RelayStatusResponseT>>;\n\t\tgetRelayerInfo: (params?: GetRelayerInfoRequestT) => Promise<BetterFetchResponse<RelayerInfo & { enabled: boolean }>>;\n\t\trelayHistory: () => Promise<BetterFetchResponse<RelayHistoryResponseT>>;\n\t\tcreateSubAccount: (params: CreateSubAccountRequestT) => Promise<BetterFetchResponse<CreateSubAccountResponseT>>;\n\t\tcheckSubAccountAvailability: (params: CheckSubAccountAvailabilityRequestT) => Promise<BetterFetchResponse<CheckSubAccountAvailabilityResponseT>>;\n\t\tsetNetwork: (network: \"mainnet\" | \"testnet\") => void;\n\t\tgetNetwork: () => \"mainnet\" | \"testnet\";\n\t\tgetSupportedNetworks: () => (\"mainnet\" | \"testnet\")[];\n\t\tgetRecipient: (network?: \"mainnet\" | \"testnet\") => string;\n\t\tgetNearClient: () => NearType;\n\t};\n\tsignIn: {\n\t\tnear: (callbacks?: AuthCallbacks) => Promise<void>;\n\t};\n}\n\ntype NearState = { accountId: string | null; publicKey: string | null; networkId: string } | null;\n\nexport const siwnClient = (config: SIWNClientConfig) => {\n\tconst nearState = atom<NearState>(null);\n\tconst walletConnected = atom<boolean>(false);\n\tconst activeNetwork = atom<\"mainnet\" | \"testnet\">(config.networkId || \"mainnet\");\n\n\tconst getRecipient = (network?: \"mainnet\" | \"testnet\"): string => {\n\t\tconst net = network || activeNetwork.get();\n\t\tif (config.recipients) return config.recipients[net];\n\t\treturn config.recipient ?? \"\";\n\t};\n\n\tconst getSupportedNetworks = (): (\"mainnet\" | \"testnet\")[] => {\n\t\tif (config.recipients) return [\"mainnet\", \"testnet\"];\n\t\tif (config.recipient) return [config.recipient.endsWith(\".testnet\") ? \"testnet\" : \"mainnet\"];\n\t\treturn [\"mainnet\"];\n\t};\n\n\tlet connectors = new Map<\"mainnet\" | \"testnet\", InstanceType<typeof import(\"@hot-labs/near-connect\").NearConnector>>();\n\tlet nearClients = new Map<\"mainnet\" | \"testnet\", Near>();\n\tlet initializedNetworks = new Set<\"mainnet\" | \"testnet\">();\n\tlet connectorModulePromise: Promise<typeof import(\"@hot-labs/near-connect\")> | null = null;\n\tlet initPromises = new Map<\"mainnet\" | \"testnet\", Promise<boolean>>();\n\n\tconst loadConnector = async () => {\n\t\tconnectorModulePromise ??= import(\"@hot-labs/near-connect\");\n\t\tconst { NearConnector } = await connectorModulePromise;\n\t\treturn NearConnector;\n\t};\n\n\tconst handleAccountConnection = async (accountId: string, publicKey?: string | null, network?: \"mainnet\" | \"testnet\") => {\n\t\tif (!accountId) return;\n\t\tconst net = network || activeNetwork.get();\n\t\tnearState.set({\n\t\t\taccountId,\n\t\t\tpublicKey: publicKey || null,\n\t\t\tnetworkId: net,\n\t\t});\n\t\twalletConnected.set(true);\n\t};\n\n\tconst initClientForNetwork = async (network: \"mainnet\" | \"testnet\", $fetch?: BetterFetch): Promise<boolean> => {\n\t\tif (initializedNetworks.has(network)) return true;\n\t\tif (initPromises.has(network)) return initPromises.get(network)!;\n\t\tif (typeof (globalThis as any).window === \"undefined\") return false;\n\n\t\tconst initPromise = (async () => {\n\t\t\tconst NearConnector = await loadConnector();\n\t\t\tconst connector = new NearConnector({ network, cspNonce: config.cspNonce });\n\t\t\tconnectors.set(network, connector);\n\n\t\t\tconst near = new Near({\n\t\t\t\tnetwork,\n\t\t\t\twallet: fromNearConnect(connector),\n\t\t\t});\n\t\t\tnearClients.set(network, near);\n\n\t\t\tconnector.on(\"wallet:signIn\", async (data: EventMap[\"wallet:signIn\"]) => {\n\t\t\t\tconst accountId = data.accounts?.[0]?.accountId;\n\t\t\t\tconst publicKey = data.accounts?.[0]?.publicKey;\n\t\t\t\tif (accountId) {\n\t\t\t\t\tawait handleAccountConnection(accountId, publicKey, network);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconnector.on(\"wallet:signOut\", () => {\n\t\t\t\twalletConnected.set(false);\n\t\t\t\tconst state = nearState.get();\n\t\t\t\tif (state) {\n\t\t\t\t\tnearState.set({ accountId: state.accountId, publicKey: null, networkId: state.networkId });\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvoid connector.getConnectedWallet().then(({ accounts }) => {\n\t\t\t\tconst account = accounts?.[0];\n\t\t\t\tconst net = activeNetwork.get();\n\t\t\t\tif (account?.accountId && !nearState.get()) {\n\t\t\t\t\tnearState.set({\n\t\t\t\t\t\taccountId: account.accountId,\n\t\t\t\t\t\tpublicKey: account.publicKey ?? null,\n\t\t\t\t\t\tnetworkId: net,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (account?.accountId) {\n\t\t\t\t\twalletConnected.set(true);\n\t\t\t\t}\n\t\t\t}).catch(() => {});\n\n\t\t\tinitializedNetworks.add(network);\n\n\t\t\tif ($fetch) {\n\t\t\t\tvoid restoreFromSession($fetch);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t})();\n\n\t\tinitPromises.set(network, initPromise);\n\n\t\ttry {\n\t\t\treturn await initPromise;\n\t\t} finally {\n\t\t\tinitPromises.delete(network);\n\t\t}\n\t};\n\n\tconst initClient = async ($fetch?: BetterFetch): Promise<boolean> => {\n\t\tconst network = activeNetwork.get();\n\t\treturn initClientForNetwork(network, $fetch);\n\t};\n\n\tlet sessionRestored = false;\n\n\tconst restoreFromSession = async ($fetch: BetterFetch) => {\n\t\tif (sessionRestored) return;\n\t\tconst state = nearState.get();\n\t\tif (state?.accountId) {\n\t\t\tsessionRestored = true;\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst res = await $fetch<ListAccountsResponseT>(\"/near/list-accounts\", { method: \"GET\" });\n\t\t\tconst accounts = res.data?.accounts;\n\t\t\tif (accounts?.length) {\n\t\t\t\tconst primary = res.data?.activeAccount || accounts.find((a: NearAccount) => a.isPrimary) || accounts[0];\n\t\t\t\tif (primary) {\n\t\t\t\t\tnearState.set({\n\t\t\t\t\t\taccountId: primary.accountId,\n\t\t\t\t\t\tpublicKey: primary.publicKey ?? null,\n\t\t\t\t\t\tnetworkId: primary.network,\n\t\t\t\t\t});\n\t\t\t\t\tactiveNetwork.set(primary.network);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {}\n\t\tsessionRestored = true;\n\t};\n\n\tconst requireConnector = async (network?: \"mainnet\" | \"testnet\") => {\n\t\tconst net = network || activeNetwork.get();\n\t\tawait initClientForNetwork(net);\n\t\tconst connector = connectors.get(net);\n\t\tif (!connector) throw new Error(`Wallet not initialized for ${net} — this operation requires a browser environment`);\n\t\treturn connector;\n\t};\n\n\tconst requireNear = (network?: \"mainnet\" | \"testnet\"): Near => {\n\t\tconst net = network || activeNetwork.get();\n\t\tconst client = nearClients.get(net);\n\t\tif (!client) throw new Error(`Wallet not initialized for ${net} — this operation requires a browser environment`);\n\t\treturn client;\n\t};\n\n\tconst ensureWalletConnected = async (network?: \"mainnet\" | \"testnet\"): Promise<boolean> => {\n\t\tconst net = network || activeNetwork.get();\n\t\tconst conn = await requireConnector(net);\n\t\tif (walletConnected.get()) {\n\t\t\ttry {\n\t\t\t\tconst { accounts } = await conn.getConnectedWallet();\n\t\t\t\tif (accounts?.length) return true;\n\t\t\t} catch {}\n\t\t}\n\n\t\treturn new Promise<boolean>((resolve) => {\n\t\t\tconst signInHandler = (data: EventMap[\"wallet:signIn\"]) => {\n\t\t\t\tconst accountId = data.accounts?.[0]?.accountId;\n\t\t\t\tconst publicKey = data.accounts?.[0]?.publicKey;\n\t\t\t\tif (accountId) {\n\t\t\t\t\thandleAccountConnection(accountId, publicKey, net);\n\t\t\t\t\tresolve(true);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconn.on(\"wallet:signIn\", signInHandler);\n\n\t\t\tconn.connect().catch(() => {}).finally(() => {\n\t\t\t\tconn.off(\"wallet:signIn\", signInHandler);\n\t\t\t\tif (!walletConnected.get()) {\n\t\t\t\t\tresolve(false);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n\n\tconst signWithWallet = async (): Promise<SignWithWalletResult> => {\n\t\tconst net = activeNetwork.get();\n\t\tconst conn = await requireConnector(net);\n\t\tconst nearClient = requireNear(net);\n\t\tconst recipient = getRecipient(net);\n\n\t\tconst nonceBytes = generateNonce();\n\t\tconst nonceHex = hex.encode(nonceBytes);\n\t\tconst message = `Sign in to ${recipient}`;\n\n\t\tlet connectedWallet: Awaited<ReturnType<typeof conn.getConnectedWallet>> | null = null;\n\t\ttry {\n\t\t\tconnectedWallet = await conn.getConnectedWallet();\n\t\t} catch {}\n\n\t\tif (connectedWallet?.accounts?.length) {\n\t\t\tconst accountId: string = connectedWallet.accounts[0]!.accountId;\n\t\t\tconst isTestnetAccount = accountId.endsWith(\".testnet\");\n\t\t\tconst isExpectedNetwork = (net === \"testnet\") === isTestnetAccount;\n\t\t\tif (!isExpectedNetwork) {\n\t\t\t\tconnectedWallet = null;\n\t\t\t}\n\t\t}\n\n\t\tif (connectedWallet?.accounts?.length) {\n\t\t\tconst signedMessage = await nearClient.signMessage({\n\t\t\t\tmessage,\n\t\t\t\trecipient,\n\t\t\t\tnonce: nonceBytes,\n\t\t\t});\n\n\t\t\tif (!signedMessage?.accountId) {\n\t\t\t\tthrow new Error(\"Wallet sign-in was cancelled or failed\");\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tsignedMessage,\n\t\t\t\taccountId: signedMessage.accountId,\n\t\t\t\tpublicKey: signedMessage.publicKey,\n\t\t\t\tnonceHex,\n\t\t\t};\n\t\t}\n\n\t\tconst result: { value: { signedMessage: SignedMessage; accountId: string; publicKey: string } | null } = { value: null };\n\t\tconst handler = (data: EventMap[\"wallet:signInAndSignMessage\"]) => {\n\t\t\tconst account = data.accounts?.[0];\n\t\t\tif (account?.signedMessage) {\n\t\t\t\tresult.value = {\n\t\t\t\t\tsignedMessage: account.signedMessage,\n\t\t\t\t\taccountId: account.accountId,\n\t\t\t\t\tpublicKey: account.signedMessage.publicKey,\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tconn.on(\"wallet:signInAndSignMessage\", handler);\n\n\t\ttry {\n\t\t\tawait conn.connect({\n\t\t\t\tsignMessageParams: {\n\t\t\t\t\tmessage,\n\t\t\t\t\trecipient,\n\t\t\t\t\tnonce: nonceBytes,\n\t\t\t\t},\n\t\t\t});\n\t\t} finally {\n\t\t\tconn.off(\"wallet:signInAndSignMessage\", handler);\n\t\t}\n\n\t\tif (!result.value) {\n\t\t\tthrow new Error(\"Wallet sign-in was cancelled or failed\");\n\t\t}\n\n\t\treturn {\n\t\t\tsignedMessage: result.value.signedMessage,\n\t\t\taccountId: result.value.accountId,\n\t\t\tpublicKey: result.value.publicKey,\n\t\t\tnonceHex,\n\t\t};\n\t};\n\n\tconst buildSignedDelegateActionInternal = async (\n\t\treceiverId: string,\n\t\tbuildActions: (builder: TransactionBuilder, receiverId: string) => TransactionBuilder,\n\t): Promise<string> => {\n\t\tconst net = activeNetwork.get();\n\t\tconst state = nearState.get();\n\t\tif (!state?.accountId) {\n\t\t\tthrow new Error(\"No NEAR account found — please sign in with your NEAR wallet\");\n\t\t}\n\n\t\tif (!walletConnected.get()) {\n\t\t\tconst reconnected = await ensureWalletConnected(net);\n\t\t\tif (!reconnected) {\n\t\t\t\tthrow new Error(\"Wallet connection required — please approve the connection to sign\");\n\t\t\t}\n\t\t}\n\n\t\tconst nearClient = requireNear(net);\n\t\tconst builder = buildActions(nearClient.transaction(state.accountId), receiverId);\n\n\t\tconst { payload } = await builder.delegate();\n\t\treturn payload;\n\t};\n\n\tconst plugin = {\n\t\tid: \"siwn\" as const,\n\t\t$InferServerPlugin: {},\n\n\t\tgetAtoms: (_$fetch: BetterFetch) => ({\n\t\t\tnearState,\n\t\t\twalletConnected,\n\t\t\tactiveNetwork,\n\t\t}),\n\n\t\tgetActions: ($fetch: BetterFetch, $store: ClientStore, _options: unknown): SIWNClientActions => {\n\t\t\tvoid initClient($fetch);\n\n\t\t\tconst sessionAtom = $store.atoms?.session;\n\t\t\tif (sessionAtom) {\n\t\t\t\tsessionAtom.subscribe(() => {\n\t\t\t\t\tconst sessionData = sessionAtom.get()?.data ?? null;\n\t\t\t\t\tif (sessionData === null) {\n\t\t\t\t\t\tfor (const [_net, conn] of connectors) {\n\t\t\t\t\t\t\tvoid conn?.disconnect().catch(() => {});\n\t\t\t\t\t\t}\n\t\t\t\t\t\twalletConnected.set(false);\n\t\t\t\t\t\tnearState.set(null);\n\t\t\t\t\t\tsessionRestored = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tnear: {\n\t\t\t\t\tnonce: async (params: NonceRequestT, fetchOptions?: BetterFetchOption) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/nonce\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: params,\n\t\t\t\t\t\t\t...fetchOptions\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tverify: async (params: VerifyRequestT, fetchOptions?: BetterFetchOption) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/verify\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: params,\n\t\t\t\t\t\t\t...fetchOptions\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tgetProfile: async (accountId?: AccountId, fetchOptions?: BetterFetchOption) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/profile\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: { accountId },\n\t\t\t\t\t\t\t...fetchOptions\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tview: async (params: ViewContractRequestT, fetchOptions?: BetterFetchOption) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/view\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: params,\n\t\t\t\t\t\t\t...fetchOptions\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tgetAccountId: () => {\n\t\t\t\t\t\tconst state = nearState.get();\n\t\t\t\t\t\treturn state?.accountId || null;\n\t\t\t\t\t},\n\t\t\t\t\tgetState: () => nearState.get(),\n\t\t\t\t\tisWalletConnected: () => walletConnected.get(),\n\t\t\t\t\tdetectNearAccount: async () => {\n\t\t\t\t\t\tconst state = nearState.get();\n\t\t\t\t\t\tif (state?.accountId && walletConnected.get()) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\taccountId: state.accountId,\n\t\t\t\t\t\t\t\tpublicKey: state.publicKey ?? null,\n\t\t\t\t\t\t\t\tnetworkId: state.networkId,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const network of getSupportedNetworks()) {\n\t\t\t\t\t\t\tconst initialized = await initClientForNetwork(network);\n\t\t\t\t\t\t\tif (!initialized) continue;\n\t\t\t\t\t\t\tconst conn = connectors.get(network);\n\t\t\t\t\t\t\tif (!conn) continue;\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst { accounts } = await conn.getConnectedWallet();\n\t\t\t\t\t\t\t\tif (accounts?.length) {\n\t\t\t\t\t\t\t\t\tconst account = accounts[0]!;\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\taccountId: account.accountId,\n\t\t\t\t\t\t\t\t\t\tpublicKey: account.publicKey ?? null,\n\t\t\t\t\t\t\t\t\t\tnetworkId: network,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t},\n\t\t\t\t\tensureConnected: async () => {\n\t\t\t\t\t\tconst net = activeNetwork.get();\n\t\t\t\t\t\tif (!initializedNetworks.has(net)) {\n\t\t\t\t\t\t\tif (!(await initClientForNetwork(net))) return false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (walletConnected.get()) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst conn = connectors.get(net);\n\t\t\t\t\t\t\t\tif (conn) {\n\t\t\t\t\t\t\t\t\tconst { accounts } = await conn.getConnectedWallet();\n\t\t\t\t\t\t\t\t\tif (accounts?.length) return true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\tconsole.error(\"[siwn] restoreFromSession failed:\", err instanceof Error ? err.message : err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn ensureWalletConnected(net);\n\t\t\t\t\t},\n\t\t\t\t\tdisconnect: async () => {\n\t\t\t\t\t\tfor (const [_net, conn] of connectors) {\n\t\t\t\t\t\t\tif (conn) {\n\t\t\t\t\t\t\t\ttry { await conn.disconnect(); } catch {}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\twalletConnected.set(false);\n\t\t\t\t\t\tnearState.set(null);\n\t\t\t\t\t\tsessionRestored = false;\n\t\t\t\t\t},\n\t\t\t\t\tlink: async (callbacks?: AuthCallbacks) => {\n\t\t\t\t\t\tconst net = activeNetwork.get();\n\t\t\t\t\t\tconst recipient = getRecipient(net);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst { signedMessage, accountId, nonceHex } = await signWithWallet();\n\t\t\t\t\t\t\tconst message = `Sign in to ${recipient}`;\n\n\t\t\t\t\t\t\tawait handleAccountConnection(accountId, signedMessage.publicKey, net);\n\n\t\t\t\t\t\t\tconst linkResponse = await $fetch<{ success: boolean; accountId: string; network: string; message: string }>(\"/near/link-account\", {\n\t\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\tsignedMessage,\n\t\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\t\trecipient,\n\t\t\t\t\t\t\t\t\tnonce: nonceHex,\n\t\t\t\t\t\t\t\t\taccountId,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (linkResponse.error) {\n\t\t\t\t\t\t\t\tthrow new Error(linkResponse.error.message || \"Failed to link NEAR account\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!linkResponse?.data?.success) {\n\t\t\t\t\t\t\t\tthrow new Error(\"Account linking failed\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcallbacks?.onSuccess?.();\n\t\t\t\t\t\t\t$store.notify(\"$sessionSignal\");\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t\t\tcallbacks?.onError?.(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tunlink: async (\n\t\t\t\t\t\tparams: { accountId: string; network?: \"mainnet\" | \"testnet\" },\n\t\t\t\t\t\tfetchOptions?: BetterFetchOption\n\t\t\t\t\t) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/unlink-account\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: params,\n\t\t\t\t\t\t\t...fetchOptions\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tlistAccounts: async (): Promise<BetterFetchResponse<ListAccountsResponseT>> => {\n\t\t\t\t\t\treturn await $fetch(\"/near/list-accounts\", { method: \"GET\" });\n\t\t\t\t\t},\n\t\t\t\t\tsetPrimaryAccount: async (params: SetPrimaryAccountRequestT) => {\n\t\t\t\t\t\tconst response = await $fetch<SetPrimaryAccountResponseT>(\"/near/set-primary-account\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: params,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst activeAccount = response.data?.activeAccount;\n\t\t\t\t\t\tif (activeAccount) {\n\t\t\t\t\t\t\tnearState.set({\n\t\t\t\t\t\t\t\taccountId: activeAccount.accountId,\n\t\t\t\t\t\t\t\tpublicKey: activeAccount.publicKey ?? null,\n\t\t\t\t\t\t\t\tnetworkId: activeAccount.network,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tactiveNetwork.set(activeAccount.network);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t},\n\t\t\t\t\tbuildSignedDelegateAction: async (\n\t\t\t\t\t\treceiverId: string,\n\t\t\t\t\t\tbuildActions: (builder: TransactionBuilder, receiverId: string) => TransactionBuilder,\n\t\t\t\t\t): Promise<string> => {\n\t\t\t\t\t\treturn buildSignedDelegateActionInternal(receiverId, buildActions);\n\t\t\t\t\t},\n\t\t\t\t\trelayTransaction: async (params: { payload: string }) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/relay\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: params,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tgetRelayStatus: async (txHash: string) => {\n\t\t\t\t\t\treturn await $fetch(`/near/relay-status/${txHash}`, {\n\t\t\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tgetRelayerInfo: async (params?: GetRelayerInfoRequestT) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/relayer-info\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: { ...(params ?? {}), network: params?.network ?? activeNetwork.get() },\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\trelayHistory: async () => {\n\t\t\t\t\t\treturn await $fetch(\"/near/relay-history\", {\n\t\t\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcreateSubAccount: async (params: CreateSubAccountRequestT) => {\n\t\t\t\t\t\treturn await $fetch(\"/near/create-sub-account\", {\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\tbody: { ...params, network: params.network ?? activeNetwork.get() },\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\tcheckSubAccountAvailability: async (params: CheckSubAccountAvailabilityRequestT) => {\n\t\t\t\t\tif (!SUB_ACCOUNT_LABEL_REGEX.test(params.subAccountName) || params.subAccountName.length < 2) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tdata: { available: false, accountId: \"\", reason: \"invalid\" as const },\n\t\t\t\t\t\t\terror: null,\n\t\t\t\t\t\t} as BetterFetchResponse<CheckSubAccountAvailabilityResponseT>;\n\t\t\t\t\t}\n\t\t\t\t\treturn await $fetch(\"/near/check-sub-account-availability\", {\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\tbody: { ...params, network: params.network ?? activeNetwork.get() },\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t\tsetNetwork: (network: \"mainnet\" | \"testnet\") => {\n\t\t\t\t\t\tconst prev = activeNetwork.get();\n\t\t\t\t\t\tif (prev !== network) {\n\t\t\t\t\t\t\tconst oldConn = connectors.get(prev);\n\t\t\t\t\t\t\tif (oldConn) {\n\t\t\t\t\t\t\t\tvoid oldConn.disconnect().catch(() => {});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twalletConnected.set(false);\n\t\t\t\t\t\t\tnearState.set(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tactiveNetwork.set(network);\n\t\t\t\t\t\tvoid initClientForNetwork(network);\n\t\t\t\t\t},\n\t\t\t\t\tgetNetwork: () => activeNetwork.get(),\n\t\t\t\t\tgetSupportedNetworks: () => getSupportedNetworks(),\n\t\t\t\t\tgetRecipient: (network?: \"mainnet\" | \"testnet\") => getRecipient(network),\n\t\t\t\t\tgetNearClient: (): NearType => {\n\t\t\t\t\t\tconst net = activeNetwork.get();\n\t\t\t\t\t\tconst client = nearClients.get(net);\n\t\t\t\t\t\tif (!client) throw new Error(`Wallet not initialized for ${net} — this operation requires a browser environment`);\n\t\t\t\t\t\treturn client;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsignIn: {\n\t\t\t\t\tnear: async (callbacks?: AuthCallbacks) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst { signedMessage, accountId, nonceHex } = await signWithWallet();\n\t\t\t\t\t\t\tconst net = activeNetwork.get();\n\t\t\t\t\t\t\tconst recipient = getRecipient(net);\n\t\t\t\t\t\t\tconst message = `Sign in to ${recipient}`;\n\n\t\t\t\t\t\t\tawait handleAccountConnection(accountId, signedMessage.publicKey, net);\n\n\t\t\t\t\t\t\tconst verifyResponse: BetterFetchResponse<VerifyResponseT> = await $fetch(\"/near/verify\", {\n\t\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\tsignedMessage,\n\t\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\t\trecipient,\n\t\t\t\t\t\t\t\t\tnonce: nonceHex,\n\t\t\t\t\t\t\t\t\taccountId,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (verifyResponse.error) {\n\t\t\t\t\t\t\t\tthrow new Error(verifyResponse.error.message || \"Failed to verify signature\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!verifyResponse?.data?.success) {\n\t\t\t\t\t\t\t\tthrow new Error(\"Authentication verification failed\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcallbacks?.onSuccess?.();\n\t\t\t\t\t\t\t$store.notify(\"$sessionSignal\");\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t\t\tcallbacks?.onError?.(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n\n\treturn plugin;\n};\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,28 +1,16 @@
1
1
  import type { DBAdapter } from "better-auth/types";
2
+ import type { AuthContext } from "@better-auth/core";
2
3
  import z from "zod";
3
- import { type AccountId, type DualNetworkConfig, type ListAccountsResponseT, type ListedNearAccount, type Profile, type SubAccountConfig } from "./types.js";
4
+ import { type AccountId, type DualNetworkConfig, type ListAccountsResponseT, type ListedNearAccount, type Profile, type RelayerConfig, type RelayerDualNetworkConfig, type SubAccountConfig } from "./types.js";
4
5
  export * from "./types.js";
5
- interface RelayerEphemeralConfig {
6
- accountId?: never;
7
- privateKey?: never;
8
- ephemeral?: true;
9
- whitelistedContracts?: string[];
10
- maxGasPerTransaction?: string;
11
- maxDepositPerTransaction?: string;
12
- }
13
- interface RelayerExplicitConfig {
14
- accountId: string;
15
- privateKey: string;
16
- privateKeys?: string[];
17
- whitelistedContracts?: string[];
18
- maxGasPerTransaction?: string;
19
- maxDepositPerTransaction?: string;
20
- }
21
- interface RelayerDualNetworkConfig {
22
- mainnet?: RelayerEphemeralConfig | RelayerExplicitConfig;
23
- testnet?: RelayerEphemeralConfig | RelayerExplicitConfig;
24
- }
25
- export type RelayerConfig = true | RelayerEphemeralConfig | RelayerExplicitConfig | RelayerDualNetworkConfig;
6
+ type ParsedRelayerConfig = {
7
+ kind: "flat";
8
+ config: RelayerConfig;
9
+ } | {
10
+ kind: "dual";
11
+ config: RelayerDualNetworkConfig;
12
+ };
13
+ export declare function parseRelayerConfig(input: RelayerConfig | RelayerDualNetworkConfig | undefined): ParsedRelayerConfig | undefined;
26
14
  export interface SIWNPluginOptions {
27
15
  recipient?: string;
28
16
  recipients?: DualNetworkConfig<string>;
@@ -36,7 +24,7 @@ export interface SIWNPluginOptions {
36
24
  }) => Promise<boolean>;
37
25
  apiKey?: string;
38
26
  rpcUrl?: string | DualNetworkConfig<string>;
39
- relayer?: RelayerConfig | DualNetworkConfig<RelayerConfig>;
27
+ relayer?: RelayerConfig | RelayerDualNetworkConfig;
40
28
  secrets?: {
41
29
  parentKey?: string | DualNetworkConfig<string>;
42
30
  };
@@ -150,6 +138,7 @@ export declare const siwn: (options: SIWNPluginOptions) => {
150
138
  };
151
139
  };
152
140
  };
141
+ init: (ctx: AuthContext) => void;
153
142
  hooks: {
154
143
  after: {
155
144
  matcher: (context: {
@@ -160,7 +149,7 @@ export declare const siwn: (options: SIWNPluginOptions) => {
160
149
  context: import("better-call").MiddlewareContext<import("better-call").MiddlewareOptions, {
161
150
  returned?: unknown | undefined;
162
151
  responseHeaders?: Headers | undefined;
163
- } & import("better-auth").PluginContext<import("better-auth/types").BetterAuthOptions> & import("better-auth").InfoContext & {
152
+ } & import("@better-auth/core").PluginContext<import("better-auth/types").BetterAuthOptions> & import("@better-auth/core").InfoContext & {
164
153
  options: import("better-auth/types").BetterAuthOptions;
165
154
  trustedOrigins: string[];
166
155
  trustedProviders: string[];
@@ -244,10 +233,10 @@ export declare const siwn: (options: SIWNPluginOptions) => {
244
233
  storage: "memory" | "database" | "secondary-storage";
245
234
  } & Omit<import("better-auth/types").BetterAuthRateLimitOptions, "enabled" | "window" | "max" | "storage">;
246
235
  adapter: DBAdapter<import("better-auth/types").BetterAuthOptions>;
247
- internalAdapter: import("better-auth").InternalAdapter<import("better-auth/types").BetterAuthOptions>;
248
- createAuthCookie: (cookieName: string, overrideAttributes?: Partial<import("better-call").CookieOptions> | undefined) => import("better-auth").BetterAuthCookie;
236
+ internalAdapter: import("@better-auth/core").InternalAdapter<import("better-auth/types").BetterAuthOptions>;
237
+ createAuthCookie: (cookieName: string, overrideAttributes?: Partial<import("better-call").CookieOptions> | undefined) => import("@better-auth/core").BetterAuthCookie;
249
238
  secret: string;
250
- secretConfig: string | import("better-auth").SecretConfig;
239
+ secretConfig: string | import("@better-auth/core").SecretConfig;
251
240
  sessionConfig: {
252
241
  updateAge: number;
253
242
  expiresIn: number;
@@ -272,7 +261,7 @@ export declare const siwn: (options: SIWNPluginOptions) => {
272
261
  minPasswordLength: number;
273
262
  maxPasswordLength: number;
274
263
  };
275
- checkPassword: (userId: string, ctx: import("better-auth").GenericEndpointContext<import("better-auth/types").BetterAuthOptions>) => Promise<boolean>;
264
+ checkPassword: (userId: string, ctx: import("@better-auth/core").GenericEndpointContext<import("better-auth/types").BetterAuthOptions>) => Promise<boolean>;
276
265
  };
277
266
  tables: import("better-auth").BetterAuthDBSchema;
278
267
  runMigrations: () => Promise<void>;
@@ -284,7 +273,7 @@ export declare const siwn: (options: SIWNPluginOptions) => {
284
273
  skipOriginCheck: boolean | string[];
285
274
  skipCSRFCheck: boolean;
286
275
  runInBackground: (promise: Promise<unknown>) => void;
287
- runInBackgroundOrAwait: (promise: Promise<unknown> | void) => import("better-auth").Awaitable<unknown>;
276
+ runInBackgroundOrAwait: (promise: Promise<unknown> | void) => import("@better-auth/core").Awaitable<unknown>;
288
277
  }>;
289
278
  }>;
290
279
  }[];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}