@depup/supabase__auth-js 2.99.2-depup.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 +21 -0
- package/README.md +25 -0
- package/changes.json +5 -0
- package/dist/main/AuthAdminApi.d.ts +4 -0
- package/dist/main/AuthAdminApi.d.ts.map +1 -0
- package/dist/main/AuthAdminApi.js +7 -0
- package/dist/main/AuthAdminApi.js.map +1 -0
- package/dist/main/AuthClient.d.ts +4 -0
- package/dist/main/AuthClient.d.ts.map +1 -0
- package/dist/main/AuthClient.js +7 -0
- package/dist/main/AuthClient.js.map +1 -0
- package/dist/main/GoTrueAdminApi.d.ts +227 -0
- package/dist/main/GoTrueAdminApi.d.ts.map +1 -0
- package/dist/main/GoTrueAdminApi.js +596 -0
- package/dist/main/GoTrueAdminApi.js.map +1 -0
- package/dist/main/GoTrueClient.d.ts +783 -0
- package/dist/main/GoTrueClient.d.ts.map +1 -0
- package/dist/main/GoTrueClient.js +3029 -0
- package/dist/main/GoTrueClient.js.map +1 -0
- package/dist/main/index.d.ts +9 -0
- package/dist/main/index.d.ts.map +1 -0
- package/dist/main/index.js +20 -0
- package/dist/main/index.js.map +1 -0
- package/dist/main/lib/base64url.d.ts +76 -0
- package/dist/main/lib/base64url.d.ts.map +1 -0
- package/dist/main/lib/base64url.js +269 -0
- package/dist/main/lib/base64url.js.map +1 -0
- package/dist/main/lib/constants.d.ts +26 -0
- package/dist/main/lib/constants.d.ts.map +1 -0
- package/dist/main/lib/constants.js +31 -0
- package/dist/main/lib/constants.js.map +1 -0
- package/dist/main/lib/error-codes.d.ts +7 -0
- package/dist/main/lib/error-codes.d.ts.map +1 -0
- package/dist/main/lib/error-codes.js +3 -0
- package/dist/main/lib/error-codes.js.map +1 -0
- package/dist/main/lib/errors.d.ts +243 -0
- package/dist/main/lib/errors.d.ts.map +1 -0
- package/dist/main/lib/errors.js +289 -0
- package/dist/main/lib/errors.js.map +1 -0
- package/dist/main/lib/fetch.d.ts +34 -0
- package/dist/main/lib/fetch.d.ts.map +1 -0
- package/dist/main/lib/fetch.js +184 -0
- package/dist/main/lib/fetch.js.map +1 -0
- package/dist/main/lib/helpers.d.ts +91 -0
- package/dist/main/lib/helpers.d.ts.map +1 -0
- package/dist/main/lib/helpers.js +395 -0
- package/dist/main/lib/helpers.js.map +1 -0
- package/dist/main/lib/local-storage.d.ts +9 -0
- package/dist/main/lib/local-storage.d.ts.map +1 -0
- package/dist/main/lib/local-storage.js +21 -0
- package/dist/main/lib/local-storage.js.map +1 -0
- package/dist/main/lib/locks.d.ts +107 -0
- package/dist/main/lib/locks.d.ts.map +1 -0
- package/dist/main/lib/locks.js +314 -0
- package/dist/main/lib/locks.js.map +1 -0
- package/dist/main/lib/polyfills.d.ts +5 -0
- package/dist/main/lib/polyfills.d.ts.map +1 -0
- package/dist/main/lib/polyfills.js +29 -0
- package/dist/main/lib/polyfills.js.map +1 -0
- package/dist/main/lib/types.d.ts +1861 -0
- package/dist/main/lib/types.d.ts.map +1 -0
- package/dist/main/lib/types.js +23 -0
- package/dist/main/lib/types.js.map +1 -0
- package/dist/main/lib/version.d.ts +2 -0
- package/dist/main/lib/version.d.ts.map +1 -0
- package/dist/main/lib/version.js +11 -0
- package/dist/main/lib/version.js.map +1 -0
- package/dist/main/lib/web3/ethereum.d.ts +96 -0
- package/dist/main/lib/web3/ethereum.d.ts.map +1 -0
- package/dist/main/lib/web3/ethereum.js +66 -0
- package/dist/main/lib/web3/ethereum.js.map +1 -0
- package/dist/main/lib/web3/solana.d.ts +160 -0
- package/dist/main/lib/web3/solana.d.ts.map +1 -0
- package/dist/main/lib/web3/solana.js +4 -0
- package/dist/main/lib/web3/solana.js.map +1 -0
- package/dist/main/lib/webauthn.d.ts +276 -0
- package/dist/main/lib/webauthn.d.ts.map +1 -0
- package/dist/main/lib/webauthn.dom.d.ts +583 -0
- package/dist/main/lib/webauthn.dom.d.ts.map +1 -0
- package/dist/main/lib/webauthn.dom.js +4 -0
- package/dist/main/lib/webauthn.dom.js.map +1 -0
- package/dist/main/lib/webauthn.errors.d.ts +80 -0
- package/dist/main/lib/webauthn.errors.d.ts.map +1 -0
- package/dist/main/lib/webauthn.errors.js +265 -0
- package/dist/main/lib/webauthn.errors.js.map +1 -0
- package/dist/main/lib/webauthn.js +706 -0
- package/dist/main/lib/webauthn.js.map +1 -0
- package/dist/module/AuthAdminApi.d.ts +4 -0
- package/dist/module/AuthAdminApi.d.ts.map +1 -0
- package/dist/module/AuthAdminApi.js +4 -0
- package/dist/module/AuthAdminApi.js.map +1 -0
- package/dist/module/AuthClient.d.ts +4 -0
- package/dist/module/AuthClient.d.ts.map +1 -0
- package/dist/module/AuthClient.js +4 -0
- package/dist/module/AuthClient.js.map +1 -0
- package/dist/module/GoTrueAdminApi.d.ts +227 -0
- package/dist/module/GoTrueAdminApi.d.ts.map +1 -0
- package/dist/module/GoTrueAdminApi.js +593 -0
- package/dist/module/GoTrueAdminApi.js.map +1 -0
- package/dist/module/GoTrueClient.d.ts +783 -0
- package/dist/module/GoTrueClient.d.ts.map +1 -0
- package/dist/module/GoTrueClient.js +3026 -0
- package/dist/module/GoTrueClient.js.map +1 -0
- package/dist/module/index.d.ts +9 -0
- package/dist/module/index.d.ts.map +1 -0
- package/dist/module/index.js +9 -0
- package/dist/module/index.js.map +1 -0
- package/dist/module/lib/base64url.d.ts +76 -0
- package/dist/module/lib/base64url.d.ts.map +1 -0
- package/dist/module/lib/base64url.js +257 -0
- package/dist/module/lib/base64url.js.map +1 -0
- package/dist/module/lib/constants.d.ts +26 -0
- package/dist/module/lib/constants.d.ts.map +1 -0
- package/dist/module/lib/constants.js +28 -0
- package/dist/module/lib/constants.js.map +1 -0
- package/dist/module/lib/error-codes.d.ts +7 -0
- package/dist/module/lib/error-codes.d.ts.map +1 -0
- package/dist/module/lib/error-codes.js +2 -0
- package/dist/module/lib/error-codes.js.map +1 -0
- package/dist/module/lib/errors.d.ts +243 -0
- package/dist/module/lib/errors.d.ts.map +1 -0
- package/dist/module/lib/errors.js +266 -0
- package/dist/module/lib/errors.js.map +1 -0
- package/dist/module/lib/fetch.d.ts +34 -0
- package/dist/module/lib/fetch.d.ts.map +1 -0
- package/dist/module/lib/fetch.js +174 -0
- package/dist/module/lib/fetch.js.map +1 -0
- package/dist/module/lib/helpers.d.ts +91 -0
- package/dist/module/lib/helpers.d.ts.map +1 -0
- package/dist/module/lib/helpers.js +368 -0
- package/dist/module/lib/helpers.js.map +1 -0
- package/dist/module/lib/local-storage.d.ts +9 -0
- package/dist/module/lib/local-storage.d.ts.map +1 -0
- package/dist/module/lib/local-storage.js +18 -0
- package/dist/module/lib/local-storage.js.map +1 -0
- package/dist/module/lib/locks.d.ts +107 -0
- package/dist/module/lib/locks.d.ts.map +1 -0
- package/dist/module/lib/locks.js +306 -0
- package/dist/module/lib/locks.js.map +1 -0
- package/dist/module/lib/polyfills.d.ts +5 -0
- package/dist/module/lib/polyfills.d.ts.map +1 -0
- package/dist/module/lib/polyfills.js +26 -0
- package/dist/module/lib/polyfills.js.map +1 -0
- package/dist/module/lib/types.d.ts +1861 -0
- package/dist/module/lib/types.d.ts.map +1 -0
- package/dist/module/lib/types.js +20 -0
- package/dist/module/lib/types.js.map +1 -0
- package/dist/module/lib/version.d.ts +2 -0
- package/dist/module/lib/version.d.ts.map +1 -0
- package/dist/module/lib/version.js +8 -0
- package/dist/module/lib/version.js.map +1 -0
- package/dist/module/lib/web3/ethereum.d.ts +96 -0
- package/dist/module/lib/web3/ethereum.d.ts.map +1 -0
- package/dist/module/lib/web3/ethereum.js +60 -0
- package/dist/module/lib/web3/ethereum.js.map +1 -0
- package/dist/module/lib/web3/solana.d.ts +160 -0
- package/dist/module/lib/web3/solana.d.ts.map +1 -0
- package/dist/module/lib/web3/solana.js +3 -0
- package/dist/module/lib/web3/solana.js.map +1 -0
- package/dist/module/lib/webauthn.d.ts +276 -0
- package/dist/module/lib/webauthn.d.ts.map +1 -0
- package/dist/module/lib/webauthn.dom.d.ts +583 -0
- package/dist/module/lib/webauthn.dom.d.ts.map +1 -0
- package/dist/module/lib/webauthn.dom.js +3 -0
- package/dist/module/lib/webauthn.dom.js.map +1 -0
- package/dist/module/lib/webauthn.errors.d.ts +80 -0
- package/dist/module/lib/webauthn.errors.d.ts.map +1 -0
- package/dist/module/lib/webauthn.errors.js +257 -0
- package/dist/module/lib/webauthn.errors.js.map +1 -0
- package/dist/module/lib/webauthn.js +689 -0
- package/dist/module/lib/webauthn.js.map +1 -0
- package/dist/tsconfig.module.tsbuildinfo +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +56 -0
- package/src/AuthAdminApi.ts +5 -0
- package/src/AuthClient.ts +5 -0
- package/src/GoTrueAdminApi.ts +723 -0
- package/src/GoTrueClient.ts +4078 -0
- package/src/index.ts +13 -0
- package/src/lib/base64url.ts +308 -0
- package/src/lib/constants.ts +34 -0
- package/src/lib/error-codes.ts +90 -0
- package/src/lib/errors.ts +324 -0
- package/src/lib/fetch.ts +283 -0
- package/src/lib/helpers.ts +463 -0
- package/src/lib/local-storage.ts +21 -0
- package/src/lib/locks.ts +375 -0
- package/src/lib/polyfills.ts +23 -0
- package/src/lib/types.ts +2229 -0
- package/src/lib/version.ts +7 -0
- package/src/lib/web3/ethereum.ts +184 -0
- package/src/lib/web3/solana.ts +186 -0
- package/src/lib/webauthn.dom.ts +636 -0
- package/src/lib/webauthn.errors.ts +317 -0
- package/src/lib/webauthn.ts +946 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleError = handleError;
|
|
4
|
+
exports._request = _request;
|
|
5
|
+
exports._sessionResponse = _sessionResponse;
|
|
6
|
+
exports._sessionResponsePassword = _sessionResponsePassword;
|
|
7
|
+
exports._userResponse = _userResponse;
|
|
8
|
+
exports._ssoResponse = _ssoResponse;
|
|
9
|
+
exports._generateLinkResponse = _generateLinkResponse;
|
|
10
|
+
exports._noResolveJsonResponse = _noResolveJsonResponse;
|
|
11
|
+
const tslib_1 = require("tslib");
|
|
12
|
+
const constants_1 = require("./constants");
|
|
13
|
+
const helpers_1 = require("./helpers");
|
|
14
|
+
const errors_1 = require("./errors");
|
|
15
|
+
const _getErrorMessage = (err) => err.msg || err.message || err.error_description || err.error || JSON.stringify(err);
|
|
16
|
+
const NETWORK_ERROR_CODES = [502, 503, 504];
|
|
17
|
+
async function handleError(error) {
|
|
18
|
+
var _a;
|
|
19
|
+
if (!(0, helpers_1.looksLikeFetchResponse)(error)) {
|
|
20
|
+
throw new errors_1.AuthRetryableFetchError(_getErrorMessage(error), 0);
|
|
21
|
+
}
|
|
22
|
+
if (NETWORK_ERROR_CODES.includes(error.status)) {
|
|
23
|
+
// status in 500...599 range - server had an error, request might be retryed.
|
|
24
|
+
throw new errors_1.AuthRetryableFetchError(_getErrorMessage(error), error.status);
|
|
25
|
+
}
|
|
26
|
+
let data;
|
|
27
|
+
try {
|
|
28
|
+
data = await error.json();
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
throw new errors_1.AuthUnknownError(_getErrorMessage(e), e);
|
|
32
|
+
}
|
|
33
|
+
let errorCode = undefined;
|
|
34
|
+
const responseAPIVersion = (0, helpers_1.parseResponseAPIVersion)(error);
|
|
35
|
+
if (responseAPIVersion &&
|
|
36
|
+
responseAPIVersion.getTime() >= constants_1.API_VERSIONS['2024-01-01'].timestamp &&
|
|
37
|
+
typeof data === 'object' &&
|
|
38
|
+
data &&
|
|
39
|
+
typeof data.code === 'string') {
|
|
40
|
+
errorCode = data.code;
|
|
41
|
+
}
|
|
42
|
+
else if (typeof data === 'object' && data && typeof data.error_code === 'string') {
|
|
43
|
+
errorCode = data.error_code;
|
|
44
|
+
}
|
|
45
|
+
if (!errorCode) {
|
|
46
|
+
// Legacy support for weak password errors, when there were no error codes
|
|
47
|
+
if (typeof data === 'object' &&
|
|
48
|
+
data &&
|
|
49
|
+
typeof data.weak_password === 'object' &&
|
|
50
|
+
data.weak_password &&
|
|
51
|
+
Array.isArray(data.weak_password.reasons) &&
|
|
52
|
+
data.weak_password.reasons.length &&
|
|
53
|
+
data.weak_password.reasons.reduce((a, i) => a && typeof i === 'string', true)) {
|
|
54
|
+
throw new errors_1.AuthWeakPasswordError(_getErrorMessage(data), error.status, data.weak_password.reasons);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else if (errorCode === 'weak_password') {
|
|
58
|
+
throw new errors_1.AuthWeakPasswordError(_getErrorMessage(data), error.status, ((_a = data.weak_password) === null || _a === void 0 ? void 0 : _a.reasons) || []);
|
|
59
|
+
}
|
|
60
|
+
else if (errorCode === 'session_not_found') {
|
|
61
|
+
// The `session_id` inside the JWT does not correspond to a row in the
|
|
62
|
+
// `sessions` table. This usually means the user has signed out, has been
|
|
63
|
+
// deleted, or their session has somehow been terminated.
|
|
64
|
+
throw new errors_1.AuthSessionMissingError();
|
|
65
|
+
}
|
|
66
|
+
throw new errors_1.AuthApiError(_getErrorMessage(data), error.status || 500, errorCode);
|
|
67
|
+
}
|
|
68
|
+
const _getRequestParams = (method, options, parameters, body) => {
|
|
69
|
+
const params = { method, headers: (options === null || options === void 0 ? void 0 : options.headers) || {} };
|
|
70
|
+
if (method === 'GET') {
|
|
71
|
+
return params;
|
|
72
|
+
}
|
|
73
|
+
params.headers = Object.assign({ 'Content-Type': 'application/json;charset=UTF-8' }, options === null || options === void 0 ? void 0 : options.headers);
|
|
74
|
+
params.body = JSON.stringify(body);
|
|
75
|
+
return Object.assign(Object.assign({}, params), parameters);
|
|
76
|
+
};
|
|
77
|
+
async function _request(fetcher, method, url, options) {
|
|
78
|
+
var _a;
|
|
79
|
+
const headers = Object.assign({}, options === null || options === void 0 ? void 0 : options.headers);
|
|
80
|
+
if (!headers[constants_1.API_VERSION_HEADER_NAME]) {
|
|
81
|
+
headers[constants_1.API_VERSION_HEADER_NAME] = constants_1.API_VERSIONS['2024-01-01'].name;
|
|
82
|
+
}
|
|
83
|
+
if (options === null || options === void 0 ? void 0 : options.jwt) {
|
|
84
|
+
headers['Authorization'] = `Bearer ${options.jwt}`;
|
|
85
|
+
}
|
|
86
|
+
const qs = (_a = options === null || options === void 0 ? void 0 : options.query) !== null && _a !== void 0 ? _a : {};
|
|
87
|
+
if (options === null || options === void 0 ? void 0 : options.redirectTo) {
|
|
88
|
+
qs['redirect_to'] = options.redirectTo;
|
|
89
|
+
}
|
|
90
|
+
const queryString = Object.keys(qs).length ? '?' + new URLSearchParams(qs).toString() : '';
|
|
91
|
+
const data = await _handleRequest(fetcher, method, url + queryString, {
|
|
92
|
+
headers,
|
|
93
|
+
noResolveJson: options === null || options === void 0 ? void 0 : options.noResolveJson,
|
|
94
|
+
}, {}, options === null || options === void 0 ? void 0 : options.body);
|
|
95
|
+
return (options === null || options === void 0 ? void 0 : options.xform) ? options === null || options === void 0 ? void 0 : options.xform(data) : { data: Object.assign({}, data), error: null };
|
|
96
|
+
}
|
|
97
|
+
async function _handleRequest(fetcher, method, url, options, parameters, body) {
|
|
98
|
+
const requestParams = _getRequestParams(method, options, parameters, body);
|
|
99
|
+
let result;
|
|
100
|
+
try {
|
|
101
|
+
result = await fetcher(url, Object.assign({}, requestParams));
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
console.error(e);
|
|
105
|
+
// fetch failed, likely due to a network or CORS error
|
|
106
|
+
throw new errors_1.AuthRetryableFetchError(_getErrorMessage(e), 0);
|
|
107
|
+
}
|
|
108
|
+
if (!result.ok) {
|
|
109
|
+
await handleError(result);
|
|
110
|
+
}
|
|
111
|
+
if (options === null || options === void 0 ? void 0 : options.noResolveJson) {
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
return await result.json();
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
await handleError(e);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function _sessionResponse(data) {
|
|
122
|
+
var _a;
|
|
123
|
+
let session = null;
|
|
124
|
+
if (hasSession(data)) {
|
|
125
|
+
session = Object.assign({}, data);
|
|
126
|
+
if (!data.expires_at) {
|
|
127
|
+
session.expires_at = (0, helpers_1.expiresAt)(data.expires_in);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const user = (_a = data.user) !== null && _a !== void 0 ? _a : data;
|
|
131
|
+
return { data: { session, user }, error: null };
|
|
132
|
+
}
|
|
133
|
+
function _sessionResponsePassword(data) {
|
|
134
|
+
const response = _sessionResponse(data);
|
|
135
|
+
if (!response.error &&
|
|
136
|
+
data.weak_password &&
|
|
137
|
+
typeof data.weak_password === 'object' &&
|
|
138
|
+
Array.isArray(data.weak_password.reasons) &&
|
|
139
|
+
data.weak_password.reasons.length &&
|
|
140
|
+
data.weak_password.message &&
|
|
141
|
+
typeof data.weak_password.message === 'string' &&
|
|
142
|
+
data.weak_password.reasons.reduce((a, i) => a && typeof i === 'string', true)) {
|
|
143
|
+
response.data.weak_password = data.weak_password;
|
|
144
|
+
}
|
|
145
|
+
return response;
|
|
146
|
+
}
|
|
147
|
+
function _userResponse(data) {
|
|
148
|
+
var _a;
|
|
149
|
+
const user = (_a = data.user) !== null && _a !== void 0 ? _a : data;
|
|
150
|
+
return { data: { user }, error: null };
|
|
151
|
+
}
|
|
152
|
+
function _ssoResponse(data) {
|
|
153
|
+
return { data, error: null };
|
|
154
|
+
}
|
|
155
|
+
function _generateLinkResponse(data) {
|
|
156
|
+
const { action_link, email_otp, hashed_token, redirect_to, verification_type } = data, rest = tslib_1.__rest(data, ["action_link", "email_otp", "hashed_token", "redirect_to", "verification_type"]);
|
|
157
|
+
const properties = {
|
|
158
|
+
action_link,
|
|
159
|
+
email_otp,
|
|
160
|
+
hashed_token,
|
|
161
|
+
redirect_to,
|
|
162
|
+
verification_type,
|
|
163
|
+
};
|
|
164
|
+
const user = Object.assign({}, rest);
|
|
165
|
+
return {
|
|
166
|
+
data: {
|
|
167
|
+
properties,
|
|
168
|
+
user,
|
|
169
|
+
},
|
|
170
|
+
error: null,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function _noResolveJsonResponse(data) {
|
|
174
|
+
return data;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* hasSession checks if the response object contains a valid session
|
|
178
|
+
* @param data A response object
|
|
179
|
+
* @returns true if a session is in the response
|
|
180
|
+
*/
|
|
181
|
+
function hasSession(data) {
|
|
182
|
+
return data.access_token && data.refresh_token && data.expires_in;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/lib/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { JwtHeader, JwtPayload, SupportedStorage, User } from './types';
|
|
2
|
+
import { Uint8Array_ } from './webauthn.dom';
|
|
3
|
+
export declare function expiresAt(expiresIn: number): number;
|
|
4
|
+
/**
|
|
5
|
+
* Generates a unique identifier for internal callback subscriptions.
|
|
6
|
+
*
|
|
7
|
+
* This function uses JavaScript Symbols to create guaranteed-unique identifiers
|
|
8
|
+
* for auth state change callbacks. Symbols are ideal for this use case because:
|
|
9
|
+
* - They are guaranteed unique by the JavaScript runtime
|
|
10
|
+
* - They work in all environments (browser, SSR, Node.js)
|
|
11
|
+
* - They avoid issues with Next.js 16 deterministic rendering requirements
|
|
12
|
+
* - They are perfect for internal, non-serializable identifiers
|
|
13
|
+
*
|
|
14
|
+
* Note: This function is only used for internal subscription management,
|
|
15
|
+
* not for security-critical operations like session tokens.
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateCallbackId(): symbol;
|
|
18
|
+
export declare const isBrowser: () => boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Checks whether localStorage is supported on this browser.
|
|
21
|
+
*/
|
|
22
|
+
export declare const supportsLocalStorage: () => boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Extracts parameters encoded in the URL both in the query and fragment.
|
|
25
|
+
*/
|
|
26
|
+
export declare function parseParametersFromURL(href: string): {
|
|
27
|
+
[parameter: string]: string;
|
|
28
|
+
};
|
|
29
|
+
type Fetch = typeof fetch;
|
|
30
|
+
export declare const resolveFetch: (customFetch?: Fetch) => Fetch;
|
|
31
|
+
export declare const looksLikeFetchResponse: (maybeResponse: unknown) => maybeResponse is Response;
|
|
32
|
+
export declare const setItemAsync: (storage: SupportedStorage, key: string, data: any) => Promise<void>;
|
|
33
|
+
export declare const getItemAsync: (storage: SupportedStorage, key: string) => Promise<unknown>;
|
|
34
|
+
export declare const removeItemAsync: (storage: SupportedStorage, key: string) => Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* A deferred represents some asynchronous work that is not yet finished, which
|
|
37
|
+
* may or may not culminate in a value.
|
|
38
|
+
* Taken from: https://github.com/mike-north/types/blob/master/src/async.ts
|
|
39
|
+
*/
|
|
40
|
+
export declare class Deferred<T = any> {
|
|
41
|
+
static promiseConstructor: PromiseConstructor;
|
|
42
|
+
readonly promise: PromiseLike<T>;
|
|
43
|
+
readonly resolve: (value?: T | PromiseLike<T>) => void;
|
|
44
|
+
readonly reject: (reason?: any) => any;
|
|
45
|
+
constructor();
|
|
46
|
+
}
|
|
47
|
+
export declare function decodeJWT(token: string): {
|
|
48
|
+
header: JwtHeader;
|
|
49
|
+
payload: JwtPayload;
|
|
50
|
+
signature: Uint8Array_;
|
|
51
|
+
raw: {
|
|
52
|
+
header: string;
|
|
53
|
+
payload: string;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Creates a promise that resolves to null after some time.
|
|
58
|
+
*/
|
|
59
|
+
export declare function sleep(time: number): Promise<null>;
|
|
60
|
+
/**
|
|
61
|
+
* Converts the provided async function into a retryable function. Each result
|
|
62
|
+
* or thrown error is sent to the isRetryable function which should return true
|
|
63
|
+
* if the function should run again.
|
|
64
|
+
*/
|
|
65
|
+
export declare function retryable<T>(fn: (attempt: number) => Promise<T>, isRetryable: (attempt: number, error: any | null, result?: T) => boolean): Promise<T>;
|
|
66
|
+
export declare function generatePKCEVerifier(): string;
|
|
67
|
+
export declare function generatePKCEChallenge(verifier: string): Promise<string>;
|
|
68
|
+
export declare function getCodeChallengeAndMethod(storage: SupportedStorage, storageKey: string, isPasswordRecovery?: boolean): Promise<string[]>;
|
|
69
|
+
export declare function parseResponseAPIVersion(response: Response): Date | null;
|
|
70
|
+
export declare function validateExp(exp: number): void;
|
|
71
|
+
export declare function getAlgorithm(alg: 'HS256' | 'RS256' | 'ES256'): RsaHashedImportParams | EcKeyImportParams;
|
|
72
|
+
export declare function validateUUID(str: string): void;
|
|
73
|
+
export declare function userNotAvailableProxy(): User;
|
|
74
|
+
/**
|
|
75
|
+
* Creates a proxy around a user object that warns when properties are accessed on the server.
|
|
76
|
+
* This is used to alert developers that using user data from getSession() on the server is insecure.
|
|
77
|
+
*
|
|
78
|
+
* @param user The actual user object to wrap
|
|
79
|
+
* @param suppressWarningRef An object with a 'value' property that controls warning suppression
|
|
80
|
+
* @returns A proxied user object that warns on property access
|
|
81
|
+
*/
|
|
82
|
+
export declare function insecureUserWarningProxy(user: User, suppressWarningRef: {
|
|
83
|
+
value: boolean;
|
|
84
|
+
}): User;
|
|
85
|
+
/**
|
|
86
|
+
* Deep clones a JSON-serializable object using JSON.parse(JSON.stringify(obj)).
|
|
87
|
+
* Note: Only works for JSON-safe data.
|
|
88
|
+
*/
|
|
89
|
+
export declare function deepClone<T>(obj: T): T;
|
|
90
|
+
export {};
|
|
91
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/lib/helpers.ts"],"names":[],"mappings":"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"}
|