@nucypher/taco-auth 0.1.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/LICENSE +675 -0
- package/README.md +3 -0
- package/dist/cjs/auth-provider.d.ts +12 -0
- package/dist/cjs/auth-provider.js +9 -0
- package/dist/cjs/auth-provider.js.map +1 -0
- package/dist/cjs/auth-sig.d.ts +18 -0
- package/dist/cjs/auth-sig.js +14 -0
- package/dist/cjs/auth-sig.js.map +1 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +20 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/providers/eip4361.d.ts +18 -0
- package/dist/cjs/providers/eip4361.js +85 -0
- package/dist/cjs/providers/eip4361.js.map +1 -0
- package/dist/cjs/providers/external-eip4361.d.ts +9 -0
- package/dist/cjs/providers/external-eip4361.js +34 -0
- package/dist/cjs/providers/external-eip4361.js.map +1 -0
- package/dist/cjs/providers/index.d.ts +2 -0
- package/dist/cjs/providers/index.js +19 -0
- package/dist/cjs/providers/index.js.map +1 -0
- package/dist/cjs/storage.d.ts +7 -0
- package/dist/cjs/storage.js +43 -0
- package/dist/cjs/storage.js.map +1 -0
- package/dist/es/auth-provider.d.ts +12 -0
- package/dist/es/auth-provider.js +6 -0
- package/dist/es/auth-provider.js.map +1 -0
- package/dist/es/auth-sig.d.ts +18 -0
- package/dist/es/auth-sig.js +11 -0
- package/dist/es/auth-sig.js.map +1 -0
- package/dist/es/index.d.ts +3 -0
- package/dist/es/index.js +4 -0
- package/dist/es/index.js.map +1 -0
- package/dist/es/providers/eip4361.d.ts +18 -0
- package/dist/es/providers/eip4361.js +81 -0
- package/dist/es/providers/eip4361.js.map +1 -0
- package/dist/es/providers/external-eip4361.d.ts +9 -0
- package/dist/es/providers/external-eip4361.js +30 -0
- package/dist/es/providers/external-eip4361.js.map +1 -0
- package/dist/es/providers/index.d.ts +2 -0
- package/dist/es/providers/index.js +3 -0
- package/dist/es/providers/index.js.map +1 -0
- package/dist/es/storage.d.ts +7 -0
- package/dist/es/storage.js +39 -0
- package/dist/es/storage.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.es.tsbuildinfo +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AuthSignature } from './auth-sig';
|
|
2
|
+
import { EIP4361AuthProvider } from './providers';
|
|
3
|
+
export declare const EIP4361_AUTH_METHOD = "EIP4361";
|
|
4
|
+
export interface AuthProvider {
|
|
5
|
+
getOrCreateAuthSignature(): Promise<AuthSignature>;
|
|
6
|
+
}
|
|
7
|
+
export type AuthProviders = {
|
|
8
|
+
[EIP4361_AUTH_METHOD]?: EIP4361AuthProvider;
|
|
9
|
+
[key: string]: AuthProvider | undefined;
|
|
10
|
+
};
|
|
11
|
+
export declare const USER_ADDRESS_PARAM_DEFAULT = ":userAddress";
|
|
12
|
+
export declare const AUTH_METHOD_FOR_PARAM: Record<string, string>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AUTH_METHOD_FOR_PARAM = exports.USER_ADDRESS_PARAM_DEFAULT = exports.EIP4361_AUTH_METHOD = void 0;
|
|
4
|
+
exports.EIP4361_AUTH_METHOD = 'EIP4361';
|
|
5
|
+
exports.USER_ADDRESS_PARAM_DEFAULT = ':userAddress';
|
|
6
|
+
exports.AUTH_METHOD_FOR_PARAM = {
|
|
7
|
+
[exports.USER_ADDRESS_PARAM_DEFAULT]: exports.EIP4361_AUTH_METHOD,
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=auth-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-provider.js","sourceRoot":"","sources":["../../src/auth-provider.ts"],"names":[],"mappings":";;;AAGa,QAAA,mBAAmB,GAAG,SAAS,CAAC;AAYhC,QAAA,0BAA0B,GAAG,cAAc,CAAC;AAE5C,QAAA,qBAAqB,GAA2B;IAC3D,CAAC,kCAA0B,CAAC,EAAE,2BAAmB;CAClD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const authSignatureSchema: z.ZodObject<{
|
|
3
|
+
signature: z.ZodString;
|
|
4
|
+
address: z.ZodEffects<z.ZodString, string, string>;
|
|
5
|
+
scheme: z.ZodEnum<["EIP4361"]>;
|
|
6
|
+
typedData: z.ZodEffects<z.ZodString, string, string>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
signature: string;
|
|
9
|
+
address: string;
|
|
10
|
+
scheme: "EIP4361";
|
|
11
|
+
typedData: string;
|
|
12
|
+
}, {
|
|
13
|
+
signature: string;
|
|
14
|
+
address: string;
|
|
15
|
+
scheme: "EIP4361";
|
|
16
|
+
typedData: string;
|
|
17
|
+
}>;
|
|
18
|
+
export type AuthSignature = z.infer<typeof authSignatureSchema>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.authSignatureSchema = void 0;
|
|
4
|
+
const shared_1 = require("@nucypher/shared");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const auth_provider_1 = require("./auth-provider");
|
|
7
|
+
const providers_1 = require("./providers");
|
|
8
|
+
exports.authSignatureSchema = zod_1.z.object({
|
|
9
|
+
signature: zod_1.z.string(),
|
|
10
|
+
address: shared_1.EthAddressSchema,
|
|
11
|
+
scheme: zod_1.z.enum([auth_provider_1.EIP4361_AUTH_METHOD]),
|
|
12
|
+
typedData: providers_1.EIP4361TypedDataSchema,
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=auth-sig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-sig.js","sourceRoot":"","sources":["../../src/auth-sig.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AACpD,6BAAwB;AAExB,mDAAsD;AACtD,2CAAqD;AAExC,QAAA,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,yBAAgB;IACzB,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,mCAAmB,CAAC,CAAC;IACrC,SAAS,EAAE,kCAAsB;CAClC,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./auth-provider"), exports);
|
|
18
|
+
__exportStar(require("./auth-sig"), exports);
|
|
19
|
+
__exportStar(require("./providers"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,6CAA2B;AAC3B,8CAA4B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { AuthSignature } from '../auth-sig';
|
|
4
|
+
export declare const EIP4361TypedDataSchema: z.ZodEffects<z.ZodString, string, string>;
|
|
5
|
+
export type EIP4361AuthProviderParams = {
|
|
6
|
+
domain: string;
|
|
7
|
+
uri: string;
|
|
8
|
+
};
|
|
9
|
+
export declare class EIP4361AuthProvider {
|
|
10
|
+
private readonly provider;
|
|
11
|
+
private readonly signer;
|
|
12
|
+
private readonly storage;
|
|
13
|
+
private readonly providerParams;
|
|
14
|
+
constructor(provider: ethers.providers.Provider, signer: ethers.Signer, providerParams?: EIP4361AuthProviderParams);
|
|
15
|
+
private getDefaultParameters;
|
|
16
|
+
getOrCreateAuthSignature(): Promise<AuthSignature>;
|
|
17
|
+
private createSIWEAuthMessage;
|
|
18
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EIP4361AuthProvider = exports.EIP4361TypedDataSchema = void 0;
|
|
4
|
+
const siwe_1 = require("siwe");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const auth_provider_1 = require("../auth-provider");
|
|
7
|
+
const storage_1 = require("../storage");
|
|
8
|
+
const isSiweMessage = (message) => {
|
|
9
|
+
try {
|
|
10
|
+
new siwe_1.SiweMessage(message);
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
exports.EIP4361TypedDataSchema = zod_1.z
|
|
18
|
+
.string()
|
|
19
|
+
.refine(isSiweMessage, { message: 'Invalid SIWE message' });
|
|
20
|
+
const ERR_MISSING_SIWE_PARAMETERS = 'Missing default SIWE parameters';
|
|
21
|
+
class EIP4361AuthProvider {
|
|
22
|
+
provider;
|
|
23
|
+
signer;
|
|
24
|
+
storage;
|
|
25
|
+
providerParams;
|
|
26
|
+
constructor(
|
|
27
|
+
// TODO: We only need the provider to fetch the chainId, consider removing it
|
|
28
|
+
provider, signer, providerParams) {
|
|
29
|
+
this.provider = provider;
|
|
30
|
+
this.signer = signer;
|
|
31
|
+
this.storage = new storage_1.LocalStorage();
|
|
32
|
+
if (providerParams) {
|
|
33
|
+
this.providerParams = providerParams;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this.providerParams = this.getDefaultParameters();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
getDefaultParameters() {
|
|
40
|
+
if (typeof window !== 'undefined') {
|
|
41
|
+
// If we are in a browser environment, we can get the domain and uri from the window object
|
|
42
|
+
return {
|
|
43
|
+
domain: window.location?.host,
|
|
44
|
+
uri: window.location?.origin,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// If not, we have no choice but to throw an error
|
|
48
|
+
throw new Error(ERR_MISSING_SIWE_PARAMETERS);
|
|
49
|
+
}
|
|
50
|
+
async getOrCreateAuthSignature() {
|
|
51
|
+
const address = await this.signer.getAddress();
|
|
52
|
+
const storageKey = `eth-${auth_provider_1.EIP4361_AUTH_METHOD}-message-${address}`;
|
|
53
|
+
// If we have a signature in localStorage, return it
|
|
54
|
+
const maybeSignature = this.storage.getAuthSignature(storageKey);
|
|
55
|
+
if (maybeSignature) {
|
|
56
|
+
return maybeSignature;
|
|
57
|
+
}
|
|
58
|
+
// If at this point we didn't return, we need to create a new message
|
|
59
|
+
const authMessage = await this.createSIWEAuthMessage();
|
|
60
|
+
this.storage.setAuthSignature(storageKey, authMessage);
|
|
61
|
+
return authMessage;
|
|
62
|
+
}
|
|
63
|
+
async createSIWEAuthMessage() {
|
|
64
|
+
const address = await this.signer.getAddress();
|
|
65
|
+
const { domain, uri } = this.providerParams;
|
|
66
|
+
const version = '1';
|
|
67
|
+
const nonce = (0, siwe_1.generateNonce)();
|
|
68
|
+
const chainId = (await this.provider.getNetwork()).chainId;
|
|
69
|
+
const siweMessage = new siwe_1.SiweMessage({
|
|
70
|
+
domain,
|
|
71
|
+
address,
|
|
72
|
+
statement: `${domain} wants you to sign in with your Ethereum account: ${address}`,
|
|
73
|
+
uri,
|
|
74
|
+
version,
|
|
75
|
+
nonce,
|
|
76
|
+
chainId,
|
|
77
|
+
});
|
|
78
|
+
const scheme = auth_provider_1.EIP4361_AUTH_METHOD;
|
|
79
|
+
const message = siweMessage.prepareMessage();
|
|
80
|
+
const signature = await this.signer.signMessage(message);
|
|
81
|
+
return { signature, address, scheme, typedData: message };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.EIP4361AuthProvider = EIP4361AuthProvider;
|
|
85
|
+
//# sourceMappingURL=eip4361.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eip4361.js","sourceRoot":"","sources":["../../../src/providers/eip4361.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AuthSignature } from '../auth-sig';
|
|
2
|
+
export declare class SingleSignOnEIP4361AuthProvider {
|
|
3
|
+
private readonly existingSiweMessage;
|
|
4
|
+
private readonly address;
|
|
5
|
+
private readonly signature;
|
|
6
|
+
static fromExistingSiweInfo(existingSiweMessage: string, signature: string): Promise<SingleSignOnEIP4361AuthProvider>;
|
|
7
|
+
private constructor();
|
|
8
|
+
getOrCreateAuthSignature(): Promise<AuthSignature>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SingleSignOnEIP4361AuthProvider = void 0;
|
|
4
|
+
const siwe_1 = require("siwe");
|
|
5
|
+
const auth_provider_1 = require("../auth-provider");
|
|
6
|
+
class SingleSignOnEIP4361AuthProvider {
|
|
7
|
+
existingSiweMessage;
|
|
8
|
+
address;
|
|
9
|
+
signature;
|
|
10
|
+
static async fromExistingSiweInfo(existingSiweMessage, signature) {
|
|
11
|
+
// validation
|
|
12
|
+
const siweMessage = new siwe_1.SiweMessage(existingSiweMessage);
|
|
13
|
+
await siweMessage.verify({ signature });
|
|
14
|
+
// create provider
|
|
15
|
+
const authProvider = new SingleSignOnEIP4361AuthProvider(siweMessage.prepareMessage(), siweMessage.address, signature);
|
|
16
|
+
return authProvider;
|
|
17
|
+
}
|
|
18
|
+
constructor(existingSiweMessage, address, signature) {
|
|
19
|
+
this.existingSiweMessage = existingSiweMessage;
|
|
20
|
+
this.address = address;
|
|
21
|
+
this.signature = signature;
|
|
22
|
+
}
|
|
23
|
+
async getOrCreateAuthSignature() {
|
|
24
|
+
const scheme = auth_provider_1.EIP4361_AUTH_METHOD;
|
|
25
|
+
return {
|
|
26
|
+
signature: this.signature,
|
|
27
|
+
address: this.address,
|
|
28
|
+
scheme,
|
|
29
|
+
typedData: this.existingSiweMessage,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.SingleSignOnEIP4361AuthProvider = SingleSignOnEIP4361AuthProvider;
|
|
34
|
+
//# sourceMappingURL=external-eip4361.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-eip4361.js","sourceRoot":"","sources":["../../../src/providers/external-eip4361.ts"],"names":[],"mappings":";;;AAAA,+BAAmC;AAEnC,oDAAuD;AAGvD,MAAa,+BAA+B;IAkBvB;IACA;IACA;IAnBZ,MAAM,CAAC,KAAK,CAAC,oBAAoB,CACtC,mBAA2B,EAC3B,SAAiB;QAEjB,aAAa;QACb,MAAM,WAAW,GAAG,IAAI,kBAAW,CAAC,mBAAmB,CAAC,CAAC;QACzD,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACxC,kBAAkB;QAClB,MAAM,YAAY,GAAG,IAAI,+BAA+B,CACtD,WAAW,CAAC,cAAc,EAAE,EAC5B,WAAW,CAAC,OAAO,EACnB,SAAS,CACV,CAAC;QACF,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,YACmB,mBAA2B,EAC3B,OAAe,EACf,SAAiB;QAFjB,wBAAmB,GAAnB,mBAAmB,CAAQ;QAC3B,YAAO,GAAP,OAAO,CAAQ;QACf,cAAS,GAAT,SAAS,CAAQ;IACjC,CAAC;IAEG,KAAK,CAAC,wBAAwB;QACnC,MAAM,MAAM,GAAG,mCAAmB,CAAC;QACnC,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,mBAAmB;SACpC,CAAC;IACJ,CAAC;CACF;AAhCD,0EAgCC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./eip4361"), exports);
|
|
18
|
+
__exportStar(require("./external-eip4361"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,qDAAmC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LocalStorage = void 0;
|
|
4
|
+
const index_1 = require("./index");
|
|
5
|
+
class BrowserStorage {
|
|
6
|
+
getItem(key) {
|
|
7
|
+
return localStorage.getItem(key);
|
|
8
|
+
}
|
|
9
|
+
setItem(key, value) {
|
|
10
|
+
localStorage.setItem(key, value);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
class NodeStorage {
|
|
14
|
+
storage = {};
|
|
15
|
+
getItem(key) {
|
|
16
|
+
return this.storage[key] || null;
|
|
17
|
+
}
|
|
18
|
+
setItem(key, value) {
|
|
19
|
+
this.storage[key] = value;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
class LocalStorage {
|
|
23
|
+
storage;
|
|
24
|
+
constructor() {
|
|
25
|
+
this.storage =
|
|
26
|
+
typeof localStorage === 'undefined'
|
|
27
|
+
? new NodeStorage()
|
|
28
|
+
: new BrowserStorage();
|
|
29
|
+
}
|
|
30
|
+
getAuthSignature(key) {
|
|
31
|
+
const asJson = this.storage.getItem(key);
|
|
32
|
+
if (!asJson) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
return index_1.authSignatureSchema.parse(JSON.parse(asJson));
|
|
36
|
+
}
|
|
37
|
+
setAuthSignature(key, authSignature) {
|
|
38
|
+
const asJson = JSON.stringify(authSignature);
|
|
39
|
+
this.storage.setItem(key, asJson);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.LocalStorage = LocalStorage;
|
|
43
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":";;;AAAA,mCAA6D;AAQ7D,MAAM,cAAc;IACX,OAAO,CAAC,GAAW;QACxB,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAEM,OAAO,CAAC,GAAW,EAAE,KAAa;QACvC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;CACF;AAED,MAAM,WAAW;IACP,OAAO,GAA2B,EAAE,CAAC;IAEtC,OAAO,CAAC,GAAW;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACnC,CAAC;IAEM,OAAO,CAAC,GAAW,EAAE,KAAa;QACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC5B,CAAC;CACF;AAED,MAAa,YAAY;IACf,OAAO,CAAW;IAE1B;QACE,IAAI,CAAC,OAAO;YACV,OAAO,YAAY,KAAK,WAAW;gBACjC,CAAC,CAAC,IAAI,WAAW,EAAE;gBACnB,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC;IAC7B,CAAC;IAEM,gBAAgB,CAAC,GAAW;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,2BAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IAEM,gBAAgB,CAAC,GAAW,EAAE,aAA4B;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;CACF;AAtBD,oCAsBC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AuthSignature } from './auth-sig';
|
|
2
|
+
import { EIP4361AuthProvider } from './providers';
|
|
3
|
+
export declare const EIP4361_AUTH_METHOD = "EIP4361";
|
|
4
|
+
export interface AuthProvider {
|
|
5
|
+
getOrCreateAuthSignature(): Promise<AuthSignature>;
|
|
6
|
+
}
|
|
7
|
+
export type AuthProviders = {
|
|
8
|
+
[EIP4361_AUTH_METHOD]?: EIP4361AuthProvider;
|
|
9
|
+
[key: string]: AuthProvider | undefined;
|
|
10
|
+
};
|
|
11
|
+
export declare const USER_ADDRESS_PARAM_DEFAULT = ":userAddress";
|
|
12
|
+
export declare const AUTH_METHOD_FOR_PARAM: Record<string, string>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-provider.js","sourceRoot":"","sources":["../../src/auth-provider.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAY7C,MAAM,CAAC,MAAM,0BAA0B,GAAG,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,CAAC,0BAA0B,CAAC,EAAE,mBAAmB;CAClD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const authSignatureSchema: z.ZodObject<{
|
|
3
|
+
signature: z.ZodString;
|
|
4
|
+
address: z.ZodEffects<z.ZodString, string, string>;
|
|
5
|
+
scheme: z.ZodEnum<["EIP4361"]>;
|
|
6
|
+
typedData: z.ZodEffects<z.ZodString, string, string>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
signature: string;
|
|
9
|
+
address: string;
|
|
10
|
+
scheme: "EIP4361";
|
|
11
|
+
typedData: string;
|
|
12
|
+
}, {
|
|
13
|
+
signature: string;
|
|
14
|
+
address: string;
|
|
15
|
+
scheme: "EIP4361";
|
|
16
|
+
typedData: string;
|
|
17
|
+
}>;
|
|
18
|
+
export type AuthSignature = z.infer<typeof authSignatureSchema>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EthAddressSchema } from '@nucypher/shared';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { EIP4361_AUTH_METHOD } from './auth-provider';
|
|
4
|
+
import { EIP4361TypedDataSchema } from './providers';
|
|
5
|
+
export const authSignatureSchema = z.object({
|
|
6
|
+
signature: z.string(),
|
|
7
|
+
address: EthAddressSchema,
|
|
8
|
+
scheme: z.enum([EIP4361_AUTH_METHOD]),
|
|
9
|
+
typedData: EIP4361TypedDataSchema,
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=auth-sig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-sig.js","sourceRoot":"","sources":["../../src/auth-sig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,gBAAgB;IACzB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACrC,SAAS,EAAE,sBAAsB;CAClC,CAAC,CAAC"}
|
package/dist/es/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { AuthSignature } from '../auth-sig';
|
|
4
|
+
export declare const EIP4361TypedDataSchema: z.ZodEffects<z.ZodString, string, string>;
|
|
5
|
+
export type EIP4361AuthProviderParams = {
|
|
6
|
+
domain: string;
|
|
7
|
+
uri: string;
|
|
8
|
+
};
|
|
9
|
+
export declare class EIP4361AuthProvider {
|
|
10
|
+
private readonly provider;
|
|
11
|
+
private readonly signer;
|
|
12
|
+
private readonly storage;
|
|
13
|
+
private readonly providerParams;
|
|
14
|
+
constructor(provider: ethers.providers.Provider, signer: ethers.Signer, providerParams?: EIP4361AuthProviderParams);
|
|
15
|
+
private getDefaultParameters;
|
|
16
|
+
getOrCreateAuthSignature(): Promise<AuthSignature>;
|
|
17
|
+
private createSIWEAuthMessage;
|
|
18
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { generateNonce, SiweMessage } from 'siwe';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { EIP4361_AUTH_METHOD } from '../auth-provider';
|
|
4
|
+
import { LocalStorage } from '../storage';
|
|
5
|
+
const isSiweMessage = (message) => {
|
|
6
|
+
try {
|
|
7
|
+
new SiweMessage(message);
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
export const EIP4361TypedDataSchema = z
|
|
15
|
+
.string()
|
|
16
|
+
.refine(isSiweMessage, { message: 'Invalid SIWE message' });
|
|
17
|
+
const ERR_MISSING_SIWE_PARAMETERS = 'Missing default SIWE parameters';
|
|
18
|
+
export class EIP4361AuthProvider {
|
|
19
|
+
provider;
|
|
20
|
+
signer;
|
|
21
|
+
storage;
|
|
22
|
+
providerParams;
|
|
23
|
+
constructor(
|
|
24
|
+
// TODO: We only need the provider to fetch the chainId, consider removing it
|
|
25
|
+
provider, signer, providerParams) {
|
|
26
|
+
this.provider = provider;
|
|
27
|
+
this.signer = signer;
|
|
28
|
+
this.storage = new LocalStorage();
|
|
29
|
+
if (providerParams) {
|
|
30
|
+
this.providerParams = providerParams;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
this.providerParams = this.getDefaultParameters();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
getDefaultParameters() {
|
|
37
|
+
if (typeof window !== 'undefined') {
|
|
38
|
+
// If we are in a browser environment, we can get the domain and uri from the window object
|
|
39
|
+
return {
|
|
40
|
+
domain: window.location?.host,
|
|
41
|
+
uri: window.location?.origin,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// If not, we have no choice but to throw an error
|
|
45
|
+
throw new Error(ERR_MISSING_SIWE_PARAMETERS);
|
|
46
|
+
}
|
|
47
|
+
async getOrCreateAuthSignature() {
|
|
48
|
+
const address = await this.signer.getAddress();
|
|
49
|
+
const storageKey = `eth-${EIP4361_AUTH_METHOD}-message-${address}`;
|
|
50
|
+
// If we have a signature in localStorage, return it
|
|
51
|
+
const maybeSignature = this.storage.getAuthSignature(storageKey);
|
|
52
|
+
if (maybeSignature) {
|
|
53
|
+
return maybeSignature;
|
|
54
|
+
}
|
|
55
|
+
// If at this point we didn't return, we need to create a new message
|
|
56
|
+
const authMessage = await this.createSIWEAuthMessage();
|
|
57
|
+
this.storage.setAuthSignature(storageKey, authMessage);
|
|
58
|
+
return authMessage;
|
|
59
|
+
}
|
|
60
|
+
async createSIWEAuthMessage() {
|
|
61
|
+
const address = await this.signer.getAddress();
|
|
62
|
+
const { domain, uri } = this.providerParams;
|
|
63
|
+
const version = '1';
|
|
64
|
+
const nonce = generateNonce();
|
|
65
|
+
const chainId = (await this.provider.getNetwork()).chainId;
|
|
66
|
+
const siweMessage = new SiweMessage({
|
|
67
|
+
domain,
|
|
68
|
+
address,
|
|
69
|
+
statement: `${domain} wants you to sign in with your Ethereum account: ${address}`,
|
|
70
|
+
uri,
|
|
71
|
+
version,
|
|
72
|
+
nonce,
|
|
73
|
+
chainId,
|
|
74
|
+
});
|
|
75
|
+
const scheme = EIP4361_AUTH_METHOD;
|
|
76
|
+
const message = siweMessage.prepareMessage();
|
|
77
|
+
const signature = await this.signer.signMessage(message);
|
|
78
|
+
return { signature, address, scheme, typedData: message };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=eip4361.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eip4361.js","sourceRoot":"","sources":["../../../src/providers/eip4361.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AuthSignature } from '../auth-sig';
|
|
2
|
+
export declare class SingleSignOnEIP4361AuthProvider {
|
|
3
|
+
private readonly existingSiweMessage;
|
|
4
|
+
private readonly address;
|
|
5
|
+
private readonly signature;
|
|
6
|
+
static fromExistingSiweInfo(existingSiweMessage: string, signature: string): Promise<SingleSignOnEIP4361AuthProvider>;
|
|
7
|
+
private constructor();
|
|
8
|
+
getOrCreateAuthSignature(): Promise<AuthSignature>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { SiweMessage } from 'siwe';
|
|
2
|
+
import { EIP4361_AUTH_METHOD } from '../auth-provider';
|
|
3
|
+
export class SingleSignOnEIP4361AuthProvider {
|
|
4
|
+
existingSiweMessage;
|
|
5
|
+
address;
|
|
6
|
+
signature;
|
|
7
|
+
static async fromExistingSiweInfo(existingSiweMessage, signature) {
|
|
8
|
+
// validation
|
|
9
|
+
const siweMessage = new SiweMessage(existingSiweMessage);
|
|
10
|
+
await siweMessage.verify({ signature });
|
|
11
|
+
// create provider
|
|
12
|
+
const authProvider = new SingleSignOnEIP4361AuthProvider(siweMessage.prepareMessage(), siweMessage.address, signature);
|
|
13
|
+
return authProvider;
|
|
14
|
+
}
|
|
15
|
+
constructor(existingSiweMessage, address, signature) {
|
|
16
|
+
this.existingSiweMessage = existingSiweMessage;
|
|
17
|
+
this.address = address;
|
|
18
|
+
this.signature = signature;
|
|
19
|
+
}
|
|
20
|
+
async getOrCreateAuthSignature() {
|
|
21
|
+
const scheme = EIP4361_AUTH_METHOD;
|
|
22
|
+
return {
|
|
23
|
+
signature: this.signature,
|
|
24
|
+
address: this.address,
|
|
25
|
+
scheme,
|
|
26
|
+
typedData: this.existingSiweMessage,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=external-eip4361.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-eip4361.js","sourceRoot":"","sources":["../../../src/providers/external-eip4361.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,MAAM,OAAO,+BAA+B;IAkBvB;IACA;IACA;IAnBZ,MAAM,CAAC,KAAK,CAAC,oBAAoB,CACtC,mBAA2B,EAC3B,SAAiB;QAEjB,aAAa;QACb,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,mBAAmB,CAAC,CAAC;QACzD,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACxC,kBAAkB;QAClB,MAAM,YAAY,GAAG,IAAI,+BAA+B,CACtD,WAAW,CAAC,cAAc,EAAE,EAC5B,WAAW,CAAC,OAAO,EACnB,SAAS,CACV,CAAC;QACF,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,YACmB,mBAA2B,EAC3B,OAAe,EACf,SAAiB;QAFjB,wBAAmB,GAAnB,mBAAmB,CAAQ;QAC3B,YAAO,GAAP,OAAO,CAAQ;QACf,cAAS,GAAT,SAAS,CAAQ;IACjC,CAAC;IAEG,KAAK,CAAC,wBAAwB;QACnC,MAAM,MAAM,GAAG,mBAAmB,CAAC;QACnC,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,mBAAmB;SACpC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { authSignatureSchema } from './index';
|
|
2
|
+
class BrowserStorage {
|
|
3
|
+
getItem(key) {
|
|
4
|
+
return localStorage.getItem(key);
|
|
5
|
+
}
|
|
6
|
+
setItem(key, value) {
|
|
7
|
+
localStorage.setItem(key, value);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
class NodeStorage {
|
|
11
|
+
storage = {};
|
|
12
|
+
getItem(key) {
|
|
13
|
+
return this.storage[key] || null;
|
|
14
|
+
}
|
|
15
|
+
setItem(key, value) {
|
|
16
|
+
this.storage[key] = value;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class LocalStorage {
|
|
20
|
+
storage;
|
|
21
|
+
constructor() {
|
|
22
|
+
this.storage =
|
|
23
|
+
typeof localStorage === 'undefined'
|
|
24
|
+
? new NodeStorage()
|
|
25
|
+
: new BrowserStorage();
|
|
26
|
+
}
|
|
27
|
+
getAuthSignature(key) {
|
|
28
|
+
const asJson = this.storage.getItem(key);
|
|
29
|
+
if (!asJson) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
return authSignatureSchema.parse(JSON.parse(asJson));
|
|
33
|
+
}
|
|
34
|
+
setAuthSignature(key, authSignature) {
|
|
35
|
+
const asJson = JSON.stringify(authSignature);
|
|
36
|
+
this.storage.setItem(key, asJson);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAQ7D,MAAM,cAAc;IACX,OAAO,CAAC,GAAW;QACxB,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAEM,OAAO,CAAC,GAAW,EAAE,KAAa;QACvC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;CACF;AAED,MAAM,WAAW;IACP,OAAO,GAA2B,EAAE,CAAC;IAEtC,OAAO,CAAC,GAAW;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACnC,CAAC;IAEM,OAAO,CAAC,GAAW,EAAE,KAAa;QACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,YAAY;IACf,OAAO,CAAW;IAE1B;QACE,IAAI,CAAC,OAAO;YACV,OAAO,YAAY,KAAK,WAAW;gBACjC,CAAC,CAAC,IAAI,WAAW,EAAE;gBACnB,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC;IAC7B,CAAC;IAEM,gBAAgB,CAAC,GAAW;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IAEM,gBAAgB,CAAC,GAAW,EAAE,aAA4B;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;CACF"}
|