@cloudbase/oauth 1.2.1-beta → 2.0.0-beta.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.
Files changed (125) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc +26 -0
  3. package/CHANGELOG.md +30 -0
  4. package/Dockerfile +15 -0
  5. package/README.md +183 -0
  6. package/_exmaple/assets/scripts/function/function.ts +99 -0
  7. package/_exmaple/assets/scripts/index.ts +101 -0
  8. package/_exmaple/assets/scripts/request.ts +11 -0
  9. package/_exmaple/index.html +15 -0
  10. package/_exmaple/package.json +33 -0
  11. package/_exmaple/tsconfig.json +71 -0
  12. package/_exmaple/typings.d.ts +0 -0
  13. package/_exmaple/webpack.config.js +42 -0
  14. package/dist/cjs/auth/apis.d.ts +55 -0
  15. package/dist/cjs/auth/apis.js +568 -0
  16. package/{auth → dist/cjs/auth}/consts.d.ts +9 -21
  17. package/dist/cjs/auth/consts.js +61 -0
  18. package/dist/cjs/auth/models.d.ts +354 -0
  19. package/dist/cjs/auth/models.js +3 -0
  20. package/dist/cjs/captcha/captcha.d.ts +35 -0
  21. package/dist/cjs/captcha/captcha.js +267 -0
  22. package/dist/cjs/index.d.ts +14 -0
  23. package/dist/cjs/index.js +63 -0
  24. package/{oauthclient → dist/cjs/oauth2client}/consts.d.ts +22 -1
  25. package/dist/cjs/oauth2client/consts.js +73 -0
  26. package/dist/cjs/oauth2client/interface.d.ts +15 -0
  27. package/dist/cjs/oauth2client/interface.js +10 -0
  28. package/dist/cjs/oauth2client/models.d.ts +47 -0
  29. package/dist/cjs/oauth2client/models.js +3 -0
  30. package/dist/cjs/oauth2client/oauth2client.d.ts +71 -0
  31. package/dist/cjs/oauth2client/oauth2client.js +640 -0
  32. package/dist/cjs/utils/function/single-promise.d.ts +5 -0
  33. package/dist/cjs/utils/function/single-promise.js +89 -0
  34. package/dist/cjs/utils/uuid.d.ts +1 -0
  35. package/dist/cjs/utils/uuid.js +12 -0
  36. package/dist/esm/auth/apis.d.ts +55 -0
  37. package/dist/esm/auth/apis.js +566 -0
  38. package/dist/esm/auth/consts.d.ts +54 -0
  39. package/dist/esm/auth/consts.js +58 -0
  40. package/dist/esm/auth/models.d.ts +354 -0
  41. package/dist/esm/auth/models.js +1 -0
  42. package/dist/esm/captcha/captcha.d.ts +35 -0
  43. package/dist/esm/captcha/captcha.js +264 -0
  44. package/dist/esm/index.d.ts +14 -0
  45. package/dist/esm/index.js +32 -0
  46. package/dist/esm/oauth2client/consts.d.ts +67 -0
  47. package/dist/esm/oauth2client/consts.js +70 -0
  48. package/dist/esm/oauth2client/interface.d.ts +15 -0
  49. package/dist/esm/oauth2client/interface.js +7 -0
  50. package/dist/esm/oauth2client/models.d.ts +47 -0
  51. package/dist/esm/oauth2client/models.js +1 -0
  52. package/dist/esm/oauth2client/oauth2client.d.ts +71 -0
  53. package/dist/esm/oauth2client/oauth2client.js +636 -0
  54. package/dist/esm/utils/function/single-promise.d.ts +5 -0
  55. package/dist/esm/utils/function/single-promise.js +86 -0
  56. package/dist/esm/utils/uuid.d.ts +1 -0
  57. package/dist/esm/utils/uuid.js +8 -0
  58. package/package.json +27 -14
  59. package/publish.sh +2 -0
  60. package/src/auth/apis.ts +642 -0
  61. package/src/auth/consts.ts +57 -0
  62. package/src/auth/models.ts +444 -0
  63. package/src/captcha/captcha.ts +222 -0
  64. package/src/index.ts +49 -0
  65. package/src/oauth2client/consts.ts +69 -0
  66. package/src/oauth2client/interface.ts +57 -0
  67. package/src/oauth2client/models.ts +61 -0
  68. package/src/oauth2client/oauth2client.ts +620 -0
  69. package/src/utils/function/single-promise.ts +40 -0
  70. package/src/utils/uuid.ts +11 -0
  71. package/tsconfig.esm.json +44 -0
  72. package/tsconfig.json +44 -0
  73. package/wiki/README.md +75 -0
  74. package/app/index.d.ts +0 -29
  75. package/app/index.js +0 -50
  76. package/app/index.js.map +0 -1
  77. package/app/internal.d.ts +0 -12
  78. package/app/internal.js +0 -25
  79. package/app/internal.js.map +0 -1
  80. package/app/openuri.d.ts +0 -20
  81. package/app/openuri.js +0 -106
  82. package/app/openuri.js.map +0 -1
  83. package/app/request.d.ts +0 -19
  84. package/app/request.js +0 -52
  85. package/app/request.js.map +0 -1
  86. package/app/storage.d.ts +0 -41
  87. package/app/storage.js +0 -35
  88. package/app/storage.js.map +0 -1
  89. package/auth/consts.js +0 -79
  90. package/auth/consts.js.map +0 -1
  91. package/auth/index.d.ts +0 -242
  92. package/auth/index.js +0 -550
  93. package/auth/index.js.map +0 -1
  94. package/auth/models.d.ts +0 -284
  95. package/auth/models.js +0 -4
  96. package/auth/models.js.map +0 -1
  97. package/captcha/index.d.ts +0 -45
  98. package/captcha/index.js +0 -135
  99. package/captcha/index.js.map +0 -1
  100. package/function/index.d.ts +0 -38
  101. package/function/index.js +0 -80
  102. package/function/index.js.map +0 -1
  103. package/index.d.ts +0 -8
  104. package/index.js +0 -17
  105. package/index.js.map +0 -1
  106. package/oauthclient/consts.js +0 -53
  107. package/oauthclient/consts.js.map +0 -1
  108. package/oauthclient/index.d.ts +0 -18
  109. package/oauthclient/index.js +0 -21
  110. package/oauthclient/index.js.map +0 -1
  111. package/oauthclient/interface.d.ts +0 -29
  112. package/oauthclient/interface.js +0 -10
  113. package/oauthclient/interface.js.map +0 -1
  114. package/oauthclient/models.d.ts +0 -40
  115. package/oauthclient/models.js +0 -3
  116. package/oauthclient/models.js.map +0 -1
  117. package/oauthclient/oauthclient.d.ts +0 -146
  118. package/oauthclient/oauthclient.js +0 -414
  119. package/oauthclient/oauthclient.js.map +0 -1
  120. package/utils/promise.d.ts +0 -18
  121. package/utils/promise.js +0 -48
  122. package/utils/promise.js.map +0 -1
  123. package/utils/uuid.d.ts +0 -5
  124. package/utils/uuid.js +0 -16
  125. package/utils/uuid.js.map +0 -1
@@ -0,0 +1,264 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (_) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { defaultStorage } from "../oauth2client/oauth2client";
38
+ var GET_CAPTCHA_URL = '/auth/v1/captcha/init';
39
+ var Captcha = (function () {
40
+ function Captcha(opts) {
41
+ if (!opts.openURIWithCallback) {
42
+ opts.openURIWithCallback = this._getDefaultOpenURIWithCallback();
43
+ }
44
+ if (!opts.storage) {
45
+ opts.storage = defaultStorage;
46
+ }
47
+ this._config = opts;
48
+ this._tokenSectionName = 'captcha_' + opts.clientId;
49
+ }
50
+ Captcha.prototype.request = function (url, options) {
51
+ return __awaiter(this, void 0, void 0, function () {
52
+ var state, reqURL, resp, err_1;
53
+ return __generator(this, function (_a) {
54
+ switch (_a.label) {
55
+ case 0:
56
+ if (!options) {
57
+ options = {};
58
+ }
59
+ if (!options.method) {
60
+ options.method = 'GET';
61
+ }
62
+ state = options.method + ":" + url;
63
+ reqURL = url;
64
+ if (!options.withCaptcha) return [3, 2];
65
+ return [4, this._appendCaptchaTokenToURL(url, state, false)];
66
+ case 1:
67
+ reqURL = _a.sent();
68
+ _a.label = 2;
69
+ case 2:
70
+ _a.trys.push([2, 4, , 8]);
71
+ return [4, this._config.request(reqURL, options)];
72
+ case 3:
73
+ resp = _a.sent();
74
+ return [3, 8];
75
+ case 4:
76
+ err_1 = _a.sent();
77
+ if (!(err_1.error === 'captcha_required' || err_1.error === 'captcha_invalid')) return [3, 6];
78
+ return [4, this._appendCaptchaTokenToURL(url, state, err_1.error === 'captcha_invalid')];
79
+ case 5:
80
+ url = _a.sent();
81
+ return [2, this._config.request(url, options)];
82
+ case 6: return [2, Promise.reject(err_1)];
83
+ case 7: return [3, 8];
84
+ case 8: return [2, resp];
85
+ }
86
+ });
87
+ });
88
+ };
89
+ Captcha.prototype._getDefaultOpenURIWithCallback = function () {
90
+ if (window.location.search.indexOf('__captcha') > 0) {
91
+ document.body.style.display = 'none';
92
+ }
93
+ if (document.getElementById('captcha_panel_wrap') === null) {
94
+ var elementDiv = document.createElement('div');
95
+ elementDiv.style.cssText =
96
+ 'background-color: rgba(0, 0, 0, 0.7);position: fixed;left: 0px;right: 0px;top: 0px;bottom: 0px;padding: 9vw 0 0 0;display: none;z-index:100;';
97
+ elementDiv.setAttribute('id', 'captcha_panel_wrap');
98
+ setTimeout(function () {
99
+ document.body.appendChild(elementDiv);
100
+ }, 0);
101
+ }
102
+ return this._defaultOpenURIWithCallback;
103
+ };
104
+ Captcha.prototype._defaultOpenURIWithCallback = function (url) {
105
+ return __awaiter(this, void 0, void 0, function () {
106
+ var target, iframe;
107
+ return __generator(this, function (_a) {
108
+ target = document.getElementById('captcha_panel_wrap'), iframe = document.createElement('iframe');
109
+ target.innerHTML = '';
110
+ iframe.setAttribute('src', url);
111
+ iframe.setAttribute('id', 'review-panel-iframe');
112
+ iframe.style.cssText = 'min-width:355px;display:block;height:355px;margin:0 auto;background-color: rgb(255, 255, 255);border: none;';
113
+ target.appendChild(iframe);
114
+ target.style.display = 'block';
115
+ return [2, new Promise(function (resolve, reject) {
116
+ iframe.onload = function () {
117
+ try {
118
+ var windowLocation = window.location;
119
+ var iframeLocation = iframe.contentWindow.location;
120
+ if (iframeLocation.host +
121
+ iframeLocation.pathname ===
122
+ windowLocation.host +
123
+ windowLocation.pathname) {
124
+ target.style.display = 'none';
125
+ var iframeUrlParams = new URLSearchParams(iframeLocation.search);
126
+ var captchToken = iframeUrlParams.get('captcha_token');
127
+ if (captchToken) {
128
+ return resolve({
129
+ captcha_token: captchToken,
130
+ expires_in: Number(iframeUrlParams.get('expires_in'))
131
+ });
132
+ }
133
+ return reject({
134
+ error: iframeUrlParams.get('error'),
135
+ error_description: iframeUrlParams.get('error_description')
136
+ });
137
+ }
138
+ else {
139
+ target.style.display = 'block';
140
+ }
141
+ }
142
+ catch (error) {
143
+ target.style.display = 'block';
144
+ }
145
+ };
146
+ })];
147
+ });
148
+ });
149
+ };
150
+ Captcha.prototype._getCaptchaToken = function (forceNewToken, state) {
151
+ return __awaiter(this, void 0, void 0, function () {
152
+ var captchaToken_1, redirectURL, captchaTokenResp, captchaToken_2, captchaToken;
153
+ return __generator(this, function (_a) {
154
+ switch (_a.label) {
155
+ case 0:
156
+ if (!!forceNewToken) return [3, 2];
157
+ return [4, this._findCaptchaToken()];
158
+ case 1:
159
+ captchaToken_1 = _a.sent();
160
+ if (captchaToken_1) {
161
+ return [2, captchaToken_1];
162
+ }
163
+ _a.label = 2;
164
+ case 2:
165
+ redirectURL = window.location.origin + window.location.pathname + "?__captcha=on";
166
+ return [4, this._config.request(GET_CAPTCHA_URL, {
167
+ method: 'POST',
168
+ body: {
169
+ client_id: this._config.clientId,
170
+ redirect_uri: redirectURL,
171
+ state: state
172
+ },
173
+ withCredentials: false,
174
+ })];
175
+ case 3:
176
+ captchaTokenResp = _a.sent();
177
+ if (captchaTokenResp.captcha_token) {
178
+ captchaToken_2 = {
179
+ captcha_token: captchaTokenResp.captcha_token,
180
+ expires_in: captchaTokenResp.expires_in,
181
+ };
182
+ this._saveCaptchaToken(captchaToken_2);
183
+ return [2, captchaTokenResp.captcha_token];
184
+ }
185
+ return [4, this._config.openURIWithCallback(captchaTokenResp.url)];
186
+ case 4:
187
+ captchaToken = _a.sent();
188
+ this._saveCaptchaToken(captchaToken);
189
+ return [2, captchaToken.captcha_token];
190
+ }
191
+ });
192
+ });
193
+ };
194
+ Captcha.prototype._appendCaptchaTokenToURL = function (url, state, forceNewToken) {
195
+ return __awaiter(this, void 0, void 0, function () {
196
+ var captchaToken;
197
+ return __generator(this, function (_a) {
198
+ switch (_a.label) {
199
+ case 0: return [4, this._getCaptchaToken(forceNewToken, state)];
200
+ case 1:
201
+ captchaToken = _a.sent();
202
+ if (url.indexOf("?") > 0) {
203
+ url += "&captcha_token=" + captchaToken;
204
+ }
205
+ else {
206
+ url += "?captcha_token=" + captchaToken;
207
+ }
208
+ return [2, url];
209
+ }
210
+ });
211
+ });
212
+ };
213
+ Captcha.prototype._saveCaptchaToken = function (token) {
214
+ return __awaiter(this, void 0, void 0, function () {
215
+ var tokenStr;
216
+ return __generator(this, function (_a) {
217
+ switch (_a.label) {
218
+ case 0:
219
+ token.expires_at = new Date(Date.now() + (token.expires_in - 10) * 1000);
220
+ tokenStr = JSON.stringify(token);
221
+ return [4, this._config.storage.setItem(this._tokenSectionName, tokenStr)];
222
+ case 1:
223
+ _a.sent();
224
+ return [2];
225
+ }
226
+ });
227
+ });
228
+ };
229
+ Captcha.prototype._findCaptchaToken = function () {
230
+ return __awaiter(this, void 0, void 0, function () {
231
+ var tokenStr, captchaToken, isExpired, error_1;
232
+ return __generator(this, function (_a) {
233
+ switch (_a.label) {
234
+ case 0: return [4, this._config.storage.getItem(this._tokenSectionName)];
235
+ case 1:
236
+ tokenStr = _a.sent();
237
+ if (!(tokenStr !== undefined && tokenStr !== null)) return [3, 5];
238
+ _a.label = 2;
239
+ case 2:
240
+ _a.trys.push([2, 3, , 5]);
241
+ captchaToken = JSON.parse(tokenStr);
242
+ if (captchaToken === null || captchaToken === void 0 ? void 0 : captchaToken.expires_at) {
243
+ captchaToken.expires_at = new Date(captchaToken.expires_at);
244
+ }
245
+ isExpired = captchaToken.expires_at < new Date();
246
+ if (isExpired) {
247
+ return [2, null];
248
+ }
249
+ return [2, captchaToken.captcha_token];
250
+ case 3:
251
+ error_1 = _a.sent();
252
+ return [4, this._config.storage.removeItem(this._tokenSectionName)];
253
+ case 4:
254
+ _a.sent();
255
+ return [2, null];
256
+ case 5: return [2, null];
257
+ }
258
+ });
259
+ });
260
+ };
261
+ return Captcha;
262
+ }());
263
+ export { Captcha };
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdGNoYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYXB0Y2hhL2NhcHRjaGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBNEI5RCxJQUFNLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQTtBQUUvQztJQVFFLGlCQUFZLElBQW9CO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFBO1NBQ2pFO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUE7U0FDOUI7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtRQUNuQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDckQsQ0FBQztJQU9ZLHlCQUFPLEdBQXBCLFVBQ0UsR0FBVyxFQUNYLE9BQStCOzs7Ozs7d0JBRS9CLElBQUksQ0FBQyxPQUFPLEVBQUU7NEJBQ1osT0FBTyxHQUFHLEVBQUUsQ0FBQzt5QkFDZDt3QkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTs0QkFDbkIsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7eUJBQ3ZCO3dCQUNLLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7d0JBQ3BDLE1BQU0sR0FBRyxHQUFHLENBQUM7NkJBQ2IsT0FBTyxDQUFDLFdBQVcsRUFBbkIsY0FBbUI7d0JBQ1osV0FBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBQTs7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QUFJLEVBQUE7NEJBR2YsV0FBTyxJQUFJLEVBQUE7Ozs7S0FDWjtJQUNILGNBQUM7QUFBRCxDQUFDLEFBN0xELElBNkxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2ltcGxlU3RvcmFnZSwgUmVxdWVzdEZ1bmN0aW9uIH0gZnJvbSAnLi4vb2F1dGgyY2xpZW50L2ludGVyZmFjZSc7XG5pbXBvcnQgeyBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMgfSBmcm9tIFwiLi4vb2F1dGgyY2xpZW50L21vZGVsc1wiO1xuaW1wb3J0IHsgZGVmYXVsdFN0b3JhZ2UgfSBmcm9tIFwiLi4vb2F1dGgyY2xpZW50L29hdXRoMmNsaWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhcHRjaGFPcHRpb25zIHtcbiAgY2xpZW50SWQ6IHN0cmluZ1xuICByZXF1ZXN0OiBSZXF1ZXN0RnVuY3Rpb247XG4gIHN0b3JhZ2U6IFNpbXBsZVN0b3JhZ2U7XG4gIC8vIOaJk+W8gOe9kemhteW5tumAmui/h1VSTOWbnuiwg+iOt+WPliBDYXB0Y2hhVG9rZW7vvIzpkojlr7nkuI3pgJrnmoTlubPlj7DvvIzor6Xlh73mlbDlj6/ku6Xoh6rlrprkuYnlrp7njrAsIOm7mOiupOmbhuaIkOa1j+iniOWZqOerr+iupOivgVxuICBvcGVuVVJJV2l0aENhbGxiYWNrPzogT3BlblVSSVdpdGhDYWxsYmFja0Z1Y3Rpb247XG59XG5cbnR5cGUgT3BlblVSSVdpdGhDYWxsYmFja0Z1Y3Rpb24gPSAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8Q2FwdGNoYVRva2VuPjtcblxuZXhwb3J0IGludGVyZmFjZSBDYXB0Y2hhVG9rZW4ge1xuICBjYXB0Y2hhX3Rva2VuOiBzdHJpbmdcbiAgZXhwaXJlc19pbjogbnVtYmVyXG4gIGV4cGlyZXNfYXQ/OiBEYXRlIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXB0Y2hhUmVxdWVzdE9wdGlvbnMgZXh0ZW5kcyBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMge1xuICB3aXRoQ2FwdGNoYT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0Q2FwdGNoYVJlc3BvbnNlIHtcbiAgY2FwdGNoYV90b2tlbj86IHN0cmluZ1xuICBleHBpcmVzX2luPzogbnVtYmVyXG4gIHVybD86IHN0cmluZ1xufVxuXG5jb25zdCBHRVRfQ0FQVENIQV9VUkwgPSAnL2F1dGgvdjEvY2FwdGNoYS9pbml0J1xuXG5leHBvcnQgY2xhc3MgQ2FwdGNoYSB7XG4gIHByaXZhdGUgX2NvbmZpZzogQ2FwdGNoYU9wdGlvbnM7XG4gIHByaXZhdGUgX3Rva2VuU2VjdGlvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtDYXB0Y2hhT3B0aW9uc30gb3B0c1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0czogQ2FwdGNoYU9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdHMub3BlblVSSVdpdGhDYWxsYmFjaykge1xuICAgICAgb3B0cy5vcGVuVVJJV2l0aENhbGxiYWNrID0gdGhpcy5fZ2V0RGVmYXVsdE9wZW5VUklXaXRoQ2FsbGJhY2soKVxuICAgIH1cbiAgICBpZiAoIW9wdHMuc3RvcmFnZSkge1xuICAgICAgb3B0cy5zdG9yYWdlID0gZGVmYXVsdFN0b3JhZ2VcbiAgICB9XG4gICAgdGhpcy5fY29uZmlnID0gb3B0c1xuICAgIHRoaXMuX3Rva2VuU2VjdGlvbk5hbWUgPSAnY2FwdGNoYV8nICsgb3B0cy5jbGllbnRJZFxuICB9XG5cbiAgLyoqXG4gICAqIHJlcXVlc3QgaHR0cCBsaWtlIHNpbXBsZSBmZXRjaCBhcGksIGV4cDpyZXF1ZXN0KCcvdjEvdXNlci9tZScsIHt3aXRoQ3JlZGVudGlhbHM6dHJ1ZX0pXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnN9IG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBDYXB0Y2hhUmVxdWVzdE9wdGlvbnMsXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMubWV0aG9kKSB7XG4gICAgICBvcHRpb25zLm1ldGhvZCA9ICdHRVQnXG4gICAgfVxuICAgIGNvbnN0IHN0YXRlID0gb3B0aW9ucy5tZXRob2QgKyBcIjpcIiArIHVybFxuICAgIGxldCByZXFVUkwgPSB1cmw7XG4gICAgaWYgKG9wdGlvbnMud2l0aENhcHRjaGEpIHtcbiAgICAgIHJlcVVSTCA9IGF3YWl0IHRoaXMuX2FwcGVuZENhcHRjaGFUb2tlblRvVVJMKHVybCwgc3RhdGUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcDogVDtcbiAgICB0cnkge1xuICAgICAgcmVzcCA9IGF3YWl0IHRoaXMuX2NvbmZpZy5yZXF1ZXN0PFQ+KHJlcVVSTCwgb3B0aW9ucylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIuZXJyb3IgPT09ICdjYXB0Y2hhX3JlcXVpcmVkJyB8fCBlcnIuZXJyb3IgPT09ICdjYXB0Y2hhX2ludmFsaWQnKSB7XG4gICAgICAgIHVybCA9IGF3YWl0IHRoaXMuX2FwcGVuZENhcHRjaGFUb2tlblRvVVJMKHVybCwgc3RhdGUsIGVyci5lcnJvciA9PT0gJ2NhcHRjaGFfaW52YWxpZCcpXG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxUPih1cmwsIG9wdGlvbnMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzcFxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RGVmYXVsdE9wZW5VUklXaXRoQ2FsbGJhY2soKTogT3BlblVSSVdpdGhDYWxsYmFja0Z1Y3Rpb24ge1xuICAgIGlmICh3aW5kb3cubG9jYXRpb24uc2VhcmNoLmluZGV4T2YoJ19fY2FwdGNoYScpID4gMCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhcHRjaGFfcGFuZWxfd3JhcCcpID09PSBudWxsKSB7XG4gICAgICB2YXIgZWxlbWVudERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZWxlbWVudERpdi5zdHlsZS5jc3NUZXh0ID1cbiAgICAgICAgJ2JhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43KTtwb3NpdGlvbjogZml4ZWQ7bGVmdDogMHB4O3JpZ2h0OiAwcHg7dG9wOiAwcHg7Ym90dG9tOiAwcHg7cGFkZGluZzogOXZ3IDAgMCAwO2Rpc3BsYXk6IG5vbmU7ei1pbmRleDoxMDA7JztcbiAgICAgIGVsZW1lbnREaXYuc2V0QXR0cmlidXRlKCdpZCcsICdjYXB0Y2hhX3BhbmVsX3dyYXAnKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnREaXYpO1xuICAgICAgfSwgMClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRPcGVuVVJJV2l0aENhbGxiYWNrXG4gIH1cblxuICAvKipcbiAgICog6buY6K6k6YCa6L+H5rWP6KeI5Zmo5omT5byA572R6aG15bm26I635Y+W5Zue6LCDXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9kZWZhdWx0T3BlblVSSVdpdGhDYWxsYmFjayh1cmw6IHN0cmluZyk6IFByb21pc2U8Q2FwdGNoYVRva2VuPiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhcHRjaGFfcGFuZWxfd3JhcCcpLFxuICAgICAgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJylcbiAgICB0YXJnZXQuaW5uZXJIVE1MID0gJyc7XG4gICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnc3JjJywgdXJsKVxuICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3Jldmlldy1wYW5lbC1pZnJhbWUnKVxuICAgIGlmcmFtZS5zdHlsZS5jc3NUZXh0ID0gJ21pbi13aWR0aDozNTVweDtkaXNwbGF5OmJsb2NrO2hlaWdodDozNTVweDttYXJnaW46MCBhdXRvO2JhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTtib3JkZXI6IG5vbmU7JztcbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgICB0YXJnZXQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPENhcHRjaGFUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWZyYW1lLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgd2luZG93TG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG4gICAgICAgICAgdmFyIGlmcmFtZUxvY2F0aW9uID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb247XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaWZyYW1lTG9jYXRpb24uaG9zdCArXG4gICAgICAgICAgICBpZnJhbWVMb2NhdGlvbi5wYXRobmFtZSA9PT1cbiAgICAgICAgICAgIHdpbmRvd0xvY2F0aW9uLmhvc3QgK1xuICAgICAgICAgICAgd2luZG93TG9jYXRpb24ucGF0aG5hbWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgY29uc3QgaWZyYW1lVXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhpZnJhbWVMb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgICAgICAgY29uc3QgY2FwdGNoVG9rZW4gPSBpZnJhbWVVcmxQYXJhbXMuZ2V0KCdjYXB0Y2hhX3Rva2VuJyk7XG4gICAgICAgICAgICBpZiAoY2FwdGNoVG9rZW4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGNhcHRjaGFfdG9rZW46IGNhcHRjaFRva2VuLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNfaW46IE51bWJlcihpZnJhbWVVcmxQYXJhbXMuZ2V0KCdleHBpcmVzX2luJykpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHtcbiAgICAgICAgICAgICAgZXJyb3I6IGlmcmFtZVVybFBhcmFtcy5nZXQoJ2Vycm9yJyksXG4gICAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBpZnJhbWVVcmxQYXJhbXMuZ2V0KCdlcnJvcl9kZXNjcmlwdGlvbicpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KVxuICB9XG4gIC8qKlxuICAgKiBfZ2V0Q2FwdGNoYVRva2VuIOiOt+WPlmNhcHRjaGFUb2tlblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBfZ2V0Q2FwdGNoYVRva2VuKGZvcmNlTmV3VG9rZW46IGJvb2xlYW4sIHN0YXRlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghZm9yY2VOZXdUb2tlbikge1xuICAgICAgLy8g5aaC5p6c5pys5Zyw5a2Y5Zyo77yM5YiZ55u05o6l6L+U5ZueXG4gICAgICBjb25zdCBjYXB0Y2hhVG9rZW4gPSBhd2FpdCB0aGlzLl9maW5kQ2FwdGNoYVRva2VuKClcbiAgICAgIGlmIChjYXB0Y2hhVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIGNhcHRjaGFUb2tlblxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZWRpcmVjdFVSTCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyBcIj9fX2NhcHRjaGE9b25cIlxuICAgIGNvbnN0IGNhcHRjaGFUb2tlblJlc3AgPSBhd2FpdCB0aGlzLl9jb25maWcucmVxdWVzdDxHZXRDYXB0Y2hhUmVzcG9uc2U+KEdFVF9DQVBUQ0hBX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIGNsaWVudF9pZDogdGhpcy5fY29uZmlnLmNsaWVudElkLFxuICAgICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VVJMLFxuICAgICAgICBzdGF0ZTogc3RhdGVcbiAgICAgIH0sXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIH0pXG4gICAgaWYgKGNhcHRjaGFUb2tlblJlc3AuY2FwdGNoYV90b2tlbikge1xuICAgICAgY29uc3QgY2FwdGNoYVRva2VuID0ge1xuICAgICAgICBjYXB0Y2hhX3Rva2VuOiBjYXB0Y2hhVG9rZW5SZXNwLmNhcHRjaGFfdG9rZW4sXG4gICAgICAgIGV4cGlyZXNfaW46IGNhcHRjaGFUb2tlblJlc3AuZXhwaXJlc19pbixcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NhdmVDYXB0Y2hhVG9rZW4oY2FwdGNoYVRva2VuKVxuICAgICAgcmV0dXJuIGNhcHRjaGFUb2tlblJlc3AuY2FwdGNoYV90b2tlblxuICAgIH1cbiAgICBjb25zdCBjYXB0Y2hhVG9rZW4gPSBhd2FpdCB0aGlzLl9jb25maWcub3BlblVSSVdpdGhDYWxsYmFjayhjYXB0Y2hhVG9rZW5SZXNwLnVybClcbiAgICB0aGlzLl9zYXZlQ2FwdGNoYVRva2VuKGNhcHRjaGFUb2tlbilcbiAgICByZXR1cm4gY2FwdGNoYVRva2VuLmNhcHRjaGFfdG9rZW5cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2FwcGVuZENhcHRjaGFUb2tlblRvVVJMKHVybDogc3RyaW5nLCBzdGF0ZTogc3RyaW5nLCBmb3JjZU5ld1Rva2VuOiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjYXB0Y2hhVG9rZW4gPSBhd2FpdCB0aGlzLl9nZXRDYXB0Y2hhVG9rZW4oZm9yY2VOZXdUb2tlbiwgc3RhdGUpO1xuICAgIGlmICh1cmwuaW5kZXhPZihcIj9cIikgPiAwKSB7XG4gICAgICB1cmwgKz0gXCImY2FwdGNoYV90b2tlbj1cIiArIGNhcHRjaGFUb2tlblxuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgKz0gXCI/Y2FwdGNoYV90b2tlbj1cIiArIGNhcHRjaGFUb2tlblxuICAgIH1cbiAgICByZXR1cm4gdXJsXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9zYXZlQ2FwdGNoYVRva2VuKHRva2VuOiBDYXB0Y2hhVG9rZW4pIHtcbiAgICB0b2tlbi5leHBpcmVzX2F0ID0gbmV3IERhdGUoXG4gICAgICBEYXRlLm5vdygpICsgKHRva2VuLmV4cGlyZXNfaW4gLSAxMCkgKiAxMDAwLFxuICAgICk7XG4gICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHRva2VuKTtcbiAgICBhd2FpdCB0aGlzLl9jb25maWcuc3RvcmFnZS5zZXRJdGVtKHRoaXMuX3Rva2VuU2VjdGlvbk5hbWUsIHRva2VuU3RyKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2ZpbmRDYXB0Y2hhVG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0b2tlblN0cjogc3RyaW5nID0gYXdhaXQgdGhpcy5fY29uZmlnLnN0b3JhZ2UuZ2V0SXRlbShcbiAgICAgIHRoaXMuX3Rva2VuU2VjdGlvbk5hbWUsXG4gICAgKTtcbiAgICBpZiAodG9rZW5TdHIgIT09IHVuZGVmaW5lZCAmJiB0b2tlblN0ciAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2FwdGNoYVRva2VuID0gSlNPTi5wYXJzZSh0b2tlblN0cik7XG4gICAgICAgIGlmIChjYXB0Y2hhVG9rZW4/LmV4cGlyZXNfYXQpIHtcbiAgICAgICAgICBjYXB0Y2hhVG9rZW4uZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNhcHRjaGFUb2tlbi5leHBpcmVzX2F0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0V4cGlyZWQgPSBjYXB0Y2hhVG9rZW4uZXhwaXJlc19hdCA8IG5ldyBEYXRlKCk7XG4gICAgICAgIGlmIChpc0V4cGlyZWQpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYXB0Y2hhVG9rZW4uY2FwdGNoYV90b2tlblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5fY29uZmlnLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl90b2tlblNlY3Rpb25OYW1lKTtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufSJdfQ==
@@ -0,0 +1,14 @@
1
+ export { Syntax, ErrorType } from './oauth2client/consts';
2
+ import { OAuth2Client } from './oauth2client/oauth2client';
3
+ export { defaultStorage, defaultRequest, ToResponseErrorOptions, toResponseError, generateRequestId, OAuth2Client, } from './oauth2client/oauth2client';
4
+ export { AuthClient, SimpleStorage } from './oauth2client/interface';
5
+ export { Credentials, ResponseError, OAuth2ClientOptions, AuthClientRequestOptions, } from './oauth2client/models';
6
+ import { AuthOptions, Auth } from './auth/apis';
7
+ export { AuthOptions, Auth } from './auth/apis';
8
+ import * as authModels from './auth/models';
9
+ export { authModels };
10
+ export declare class CloudbaseOAuth {
11
+ oauth2client: OAuth2Client;
12
+ authApi: Auth;
13
+ constructor(authOptions: AuthOptions);
14
+ }
@@ -0,0 +1,32 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ export { Syntax, ErrorType } from './oauth2client/consts';
13
+ import { OAuth2Client } from './oauth2client/oauth2client';
14
+ export { defaultStorage, defaultRequest, toResponseError, generateRequestId, OAuth2Client, } from './oauth2client/oauth2client';
15
+ export { AuthClient } from './oauth2client/interface';
16
+ import { Auth } from './auth/apis';
17
+ export { Auth } from './auth/apis';
18
+ import * as authModels from './auth/models';
19
+ export { authModels };
20
+ var CloudbaseOAuth = (function () {
21
+ function CloudbaseOAuth(authOptions) {
22
+ var apiOrigin = authOptions.apiOrigin, clientId = authOptions.clientId;
23
+ this.oauth2client = new OAuth2Client({
24
+ apiOrigin: apiOrigin,
25
+ clientId: clientId
26
+ });
27
+ this.authApi = new Auth(__assign({ credentialsClient: this.oauth2client }, authOptions));
28
+ }
29
+ return CloudbaseOAuth;
30
+ }());
31
+ export { CloudbaseOAuth };
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUUxRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLGNBQWMsRUFFZCxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLFlBQVksR0FDYixNQUFNLDZCQUE2QixDQUFDO0FBRXJDLE9BQU8sRUFBRSxVQUFVLEVBQWlCLE1BQU0sMEJBQTBCLENBQUM7QUFVckUsT0FBTyxFQUFlLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUUvQyxPQUFPLEVBQWUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE9BQU8sS0FBSyxVQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUd0QjtJQUlFLHdCQUFZLFdBQXdCO1FBQzFCLElBQUEsU0FBUyxHQUFlLFdBQVcsVUFBMUIsRUFBRSxRQUFRLEdBQUssV0FBVyxTQUFoQixDQUFnQjtRQUMzQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDO1lBQ25DLFNBQVMsV0FBQTtZQUNULFFBQVEsVUFBQTtTQUNULENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxJQUFJLFlBQ3JCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZLElBQ2pDLFdBQVcsRUFDZCxDQUFBO0lBQ0osQ0FBQztJQUNILHFCQUFDO0FBQUQsQ0FBQyxBQWhCRCxJQWdCQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFN5bnRheCwgRXJyb3JUeXBlIH0gZnJvbSAnLi9vYXV0aDJjbGllbnQvY29uc3RzJztcblxuaW1wb3J0IHsgT0F1dGgyQ2xpZW50IH0gZnJvbSAnLi9vYXV0aDJjbGllbnQvb2F1dGgyY2xpZW50J1xuXG5leHBvcnQge1xuICBkZWZhdWx0U3RvcmFnZSxcbiAgZGVmYXVsdFJlcXVlc3QsXG4gIFRvUmVzcG9uc2VFcnJvck9wdGlvbnMsXG4gIHRvUmVzcG9uc2VFcnJvcixcbiAgZ2VuZXJhdGVSZXF1ZXN0SWQsXG4gIE9BdXRoMkNsaWVudCxcbn0gZnJvbSAnLi9vYXV0aDJjbGllbnQvb2F1dGgyY2xpZW50JztcblxuZXhwb3J0IHsgQXV0aENsaWVudCwgU2ltcGxlU3RvcmFnZSB9IGZyb20gJy4vb2F1dGgyY2xpZW50L2ludGVyZmFjZSc7XG5cbi8vIGltcG9ydCB7IENyZWRlbnRpYWxzIH0gZnJvbSAnLi9vYXV0aDJjbGllbnQvbW9kZWxzJ1xuZXhwb3J0IHtcbiAgQ3JlZGVudGlhbHMsXG4gIFJlc3BvbnNlRXJyb3IsXG4gIE9BdXRoMkNsaWVudE9wdGlvbnMsXG4gIEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucyxcbn0gZnJvbSAnLi9vYXV0aDJjbGllbnQvbW9kZWxzJztcblxuaW1wb3J0IHsgQXV0aE9wdGlvbnMsIEF1dGggfSBmcm9tICcuL2F1dGgvYXBpcydcblxuZXhwb3J0IHsgQXV0aE9wdGlvbnMsIEF1dGggfSBmcm9tICcuL2F1dGgvYXBpcyc7XG5cbmltcG9ydCAqIGFzIGF1dGhNb2RlbHMgZnJvbSAnLi9hdXRoL21vZGVscyc7XG5leHBvcnQgeyBhdXRoTW9kZWxzIH07XG5cblxuZXhwb3J0IGNsYXNzIENsb3VkYmFzZU9BdXRoIHtcbiAgcHVibGljIG9hdXRoMmNsaWVudDogT0F1dGgyQ2xpZW50XG4gIHB1YmxpYyBhdXRoQXBpOiBBdXRoXG5cbiAgY29uc3RydWN0b3IoYXV0aE9wdGlvbnM6IEF1dGhPcHRpb25zKSB7XG4gICAgY29uc3QgeyBhcGlPcmlnaW4sIGNsaWVudElkIH0gPSBhdXRoT3B0aW9uc1xuICAgIHRoaXMub2F1dGgyY2xpZW50ID0gbmV3IE9BdXRoMkNsaWVudCh7XG4gICAgICBhcGlPcmlnaW4sXG4gICAgICBjbGllbnRJZFxuICAgIH0pXG5cbiAgICB0aGlzLmF1dGhBcGkgPSBuZXcgQXV0aCh7XG4gICAgICBjcmVkZW50aWFsc0NsaWVudDogdGhpcy5vYXV0aDJjbGllbnQsXG4gICAgICAuLi5hdXRoT3B0aW9uc1xuICAgIH0pXG4gIH1cbn1cblxuIl19
@@ -0,0 +1,67 @@
1
+ export declare enum Syntax {
2
+ CLIENT_ID = "client_id",
3
+ CLIENT_SECRET = "client_secret",
4
+ RESPONSE_TYPE = "response_type",
5
+ SCOPE = "scope",
6
+ STATE = "state",
7
+ REDIRECT_URI = "redirect_uri",
8
+ ERROR = "error",
9
+ ERROR_DESCRIPTION = "error_description",
10
+ ERROR_URI = "error_uri",
11
+ GRANT_TYPE = "grant_type",
12
+ CODE = "code",
13
+ ACCESS_TOKEN = "access_token",
14
+ TOKEN_TYPE = "token_type",
15
+ EXPIRES_IN = "expires_in",
16
+ USERNAME = "username",
17
+ PASSWORD = "password",
18
+ REFRESH_TOKEN = "refresh_token"
19
+ }
20
+ export declare enum ErrorType {
21
+ UNREACHABLE = "unreachable",
22
+ LOCAL = "local",
23
+ CANCELLED = "cancelled",
24
+ UNKNOWN = "unknown",
25
+ INVALID_ARGUMENT = "invalid_argument",
26
+ DEADLINE_EXCEEDED = "deadline_exceeded",
27
+ NOT_FOUND = "not_found",
28
+ ALREADY_EXISTS = "already_exists",
29
+ PERMISSION_DENIED = "permission_denied",
30
+ UNAUTHENTICATED = "unauthenticated",
31
+ RESOURCE_EXHAUSTED = "resource_exhausted",
32
+ FAILED_PRECONDITION = "failed_precondition",
33
+ ABORTED = "aborted",
34
+ OUT_OF_RANGE = "out_of_range",
35
+ UNIMPLEMENTED = "unimplemented",
36
+ INTERNAL = "internal",
37
+ UNAVAILABLE = "unavailable",
38
+ DATA_LOSS = "data_loss",
39
+ CAPTCHA_REQUIRED = "captcha_required",
40
+ CAPTCHA_INVALID = "captcha_invalid",
41
+ INVALID_PASSWORD = "invalid_password",
42
+ INVALID_STATUS = "invalid_status",
43
+ USER_PENDING = "user_pending",
44
+ USER_BLOCKED = "user_blocked",
45
+ INVALID_VERIFICATION_CODE = "invalid_verification_code",
46
+ TWO_FACTOR_REQUIRED = "two_factor_required",
47
+ INVALID_TWO_FACTOR = "invalid_two_factor",
48
+ INVALID_TWO_FACTOR_RECOVERY = "invalid_two_factor_recovery",
49
+ UNDER_REVIEW = "under_review",
50
+ INVALID_REQUEST = "invalid_request",
51
+ UNAUTHORIZED_CLIENT = "unauthorized_client",
52
+ ACCESS_DENIED = "access_denied",
53
+ UNSUPPORTED_RESPONSE_TYPE = "unsupported_response_type",
54
+ INVALID_SCOPE = "invalid_scope",
55
+ INVALID_GRANT = "invalid_grant",
56
+ SERVER_ERROR = "server_error",
57
+ TEMPORARILY_UNAVAILABLE = "temporarily_unavailable",
58
+ INTERACTION_REQUIRED = "interaction_required",
59
+ LOGIN_REQUIRED = "login_required",
60
+ ACCOUNT_SELECTION_REQUIRED = "account_selection_required",
61
+ CONSENT_REQUIRED = "consent_required",
62
+ INVALID_REQUEST_URI = "invalid_request_uri",
63
+ INVALID_REQUEST_OBJECT = "invalid_request_object",
64
+ REQUEST_NOT_SUPPORTED = "request_not_supported",
65
+ REQUEST_URI_NOT_SUPPORTED = "request_uri_not_supported",
66
+ REGISTRATION_NOT_SUPPORTED = "registration_not_supported"
67
+ }
@@ -0,0 +1,70 @@
1
+ export var Syntax;
2
+ (function (Syntax) {
3
+ Syntax["CLIENT_ID"] = "client_id";
4
+ Syntax["CLIENT_SECRET"] = "client_secret";
5
+ Syntax["RESPONSE_TYPE"] = "response_type";
6
+ Syntax["SCOPE"] = "scope";
7
+ Syntax["STATE"] = "state";
8
+ Syntax["REDIRECT_URI"] = "redirect_uri";
9
+ Syntax["ERROR"] = "error";
10
+ Syntax["ERROR_DESCRIPTION"] = "error_description";
11
+ Syntax["ERROR_URI"] = "error_uri";
12
+ Syntax["GRANT_TYPE"] = "grant_type";
13
+ Syntax["CODE"] = "code";
14
+ Syntax["ACCESS_TOKEN"] = "access_token";
15
+ Syntax["TOKEN_TYPE"] = "token_type";
16
+ Syntax["EXPIRES_IN"] = "expires_in";
17
+ Syntax["USERNAME"] = "username";
18
+ Syntax["PASSWORD"] = "password";
19
+ Syntax["REFRESH_TOKEN"] = "refresh_token";
20
+ })(Syntax || (Syntax = {}));
21
+ export var ErrorType;
22
+ (function (ErrorType) {
23
+ ErrorType["UNREACHABLE"] = "unreachable";
24
+ ErrorType["LOCAL"] = "local";
25
+ ErrorType["CANCELLED"] = "cancelled";
26
+ ErrorType["UNKNOWN"] = "unknown";
27
+ ErrorType["INVALID_ARGUMENT"] = "invalid_argument";
28
+ ErrorType["DEADLINE_EXCEEDED"] = "deadline_exceeded";
29
+ ErrorType["NOT_FOUND"] = "not_found";
30
+ ErrorType["ALREADY_EXISTS"] = "already_exists";
31
+ ErrorType["PERMISSION_DENIED"] = "permission_denied";
32
+ ErrorType["UNAUTHENTICATED"] = "unauthenticated";
33
+ ErrorType["RESOURCE_EXHAUSTED"] = "resource_exhausted";
34
+ ErrorType["FAILED_PRECONDITION"] = "failed_precondition";
35
+ ErrorType["ABORTED"] = "aborted";
36
+ ErrorType["OUT_OF_RANGE"] = "out_of_range";
37
+ ErrorType["UNIMPLEMENTED"] = "unimplemented";
38
+ ErrorType["INTERNAL"] = "internal";
39
+ ErrorType["UNAVAILABLE"] = "unavailable";
40
+ ErrorType["DATA_LOSS"] = "data_loss";
41
+ ErrorType["CAPTCHA_REQUIRED"] = "captcha_required";
42
+ ErrorType["CAPTCHA_INVALID"] = "captcha_invalid";
43
+ ErrorType["INVALID_PASSWORD"] = "invalid_password";
44
+ ErrorType["INVALID_STATUS"] = "invalid_status";
45
+ ErrorType["USER_PENDING"] = "user_pending";
46
+ ErrorType["USER_BLOCKED"] = "user_blocked";
47
+ ErrorType["INVALID_VERIFICATION_CODE"] = "invalid_verification_code";
48
+ ErrorType["TWO_FACTOR_REQUIRED"] = "two_factor_required";
49
+ ErrorType["INVALID_TWO_FACTOR"] = "invalid_two_factor";
50
+ ErrorType["INVALID_TWO_FACTOR_RECOVERY"] = "invalid_two_factor_recovery";
51
+ ErrorType["UNDER_REVIEW"] = "under_review";
52
+ ErrorType["INVALID_REQUEST"] = "invalid_request";
53
+ ErrorType["UNAUTHORIZED_CLIENT"] = "unauthorized_client";
54
+ ErrorType["ACCESS_DENIED"] = "access_denied";
55
+ ErrorType["UNSUPPORTED_RESPONSE_TYPE"] = "unsupported_response_type";
56
+ ErrorType["INVALID_SCOPE"] = "invalid_scope";
57
+ ErrorType["INVALID_GRANT"] = "invalid_grant";
58
+ ErrorType["SERVER_ERROR"] = "server_error";
59
+ ErrorType["TEMPORARILY_UNAVAILABLE"] = "temporarily_unavailable";
60
+ ErrorType["INTERACTION_REQUIRED"] = "interaction_required";
61
+ ErrorType["LOGIN_REQUIRED"] = "login_required";
62
+ ErrorType["ACCOUNT_SELECTION_REQUIRED"] = "account_selection_required";
63
+ ErrorType["CONSENT_REQUIRED"] = "consent_required";
64
+ ErrorType["INVALID_REQUEST_URI"] = "invalid_request_uri";
65
+ ErrorType["INVALID_REQUEST_OBJECT"] = "invalid_request_object";
66
+ ErrorType["REQUEST_NOT_SUPPORTED"] = "request_not_supported";
67
+ ErrorType["REQUEST_URI_NOT_SUPPORTED"] = "request_uri_not_supported";
68
+ ErrorType["REGISTRATION_NOT_SUPPORTED"] = "registration_not_supported";
69
+ })(ErrorType || (ErrorType = {}));
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29hdXRoMmNsaWVudC9jb25zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksTUFrQlg7QUFsQkQsV0FBWSxNQUFNO0lBQ2hCLGlDQUF1QixDQUFBO0lBQ3ZCLHlDQUErQixDQUFBO0lBQy9CLHlDQUErQixDQUFBO0lBQy9CLHlCQUFlLENBQUE7SUFDZix5QkFBZSxDQUFBO0lBQ2YsdUNBQTZCLENBQUE7SUFDN0IseUJBQWUsQ0FBQTtJQUNmLGlEQUF1QyxDQUFBO0lBQ3ZDLGlDQUF1QixDQUFBO0lBQ3ZCLG1DQUF5QixDQUFBO0lBQ3pCLHVCQUFhLENBQUE7SUFDYix1Q0FBNkIsQ0FBQTtJQUM3QixtQ0FBeUIsQ0FBQTtJQUN6QixtQ0FBeUIsQ0FBQTtJQUN6QiwrQkFBcUIsQ0FBQTtJQUNyQiwrQkFBcUIsQ0FBQTtJQUNyQix5Q0FBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBbEJXLE1BQU0sS0FBTixNQUFNLFFBa0JqQjtBQUVELE1BQU0sQ0FBTixJQUFZLFNBZ0RYO0FBaERELFdBQVksU0FBUztJQUNuQix3Q0FBMkIsQ0FBQTtJQUMzQiw0QkFBZSxDQUFBO0lBQ2Ysb0NBQXVCLENBQUE7SUFDdkIsZ0NBQW1CLENBQUE7SUFDbkIsa0RBQXFDLENBQUE7SUFDckMsb0RBQXVDLENBQUE7SUFDdkMsb0NBQXVCLENBQUE7SUFDdkIsOENBQWlDLENBQUE7SUFDakMsb0RBQXVDLENBQUE7SUFDdkMsZ0RBQW1DLENBQUE7SUFDbkMsc0RBQXlDLENBQUE7SUFDekMsd0RBQTJDLENBQUE7SUFDM0MsZ0NBQW1CLENBQUE7SUFDbkIsMENBQTZCLENBQUE7SUFDN0IsNENBQStCLENBQUE7SUFDL0Isa0NBQXFCLENBQUE7SUFDckIsd0NBQTJCLENBQUE7SUFDM0Isb0NBQXVCLENBQUE7SUFFdkIsa0RBQXFDLENBQUE7SUFDckMsZ0RBQW1DLENBQUE7SUFDbkMsa0RBQXFDLENBQUE7SUFDckMsOENBQWlDLENBQUE7SUFDakMsMENBQTZCLENBQUE7SUFDN0IsMENBQTZCLENBQUE7SUFDN0Isb0VBQXVELENBQUE7SUFDdkQsd0RBQTJDLENBQUE7SUFDM0Msc0RBQXlDLENBQUE7SUFDekMsd0VBQTJELENBQUE7SUFDM0QsMENBQTZCLENBQUE7SUFDN0IsZ0RBQW1DLENBQUE7SUFDbkMsd0RBQTJDLENBQUE7SUFDM0MsNENBQStCLENBQUE7SUFDL0Isb0VBQXVELENBQUE7SUFDdkQsNENBQStCLENBQUE7SUFDL0IsNENBQStCLENBQUE7SUFDL0IsMENBQTZCLENBQUE7SUFDN0IsZ0VBQW1ELENBQUE7SUFDbkQsMERBQTZDLENBQUE7SUFDN0MsOENBQWlDLENBQUE7SUFDakMsc0VBQXlELENBQUE7SUFDekQsa0RBQXFDLENBQUE7SUFDckMsd0RBQTJDLENBQUE7SUFDM0MsOERBQWlELENBQUE7SUFDakQsNERBQStDLENBQUE7SUFDL0Msb0VBQXVELENBQUE7SUFDdkQsc0VBQXlELENBQUE7QUFDM0QsQ0FBQyxFQWhEVyxTQUFTLEtBQVQsU0FBUyxRQWdEcEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBTeW50YXgge1xuICBDTElFTlRfSUQgPSAnY2xpZW50X2lkJyxcbiAgQ0xJRU5UX1NFQ1JFVCA9ICdjbGllbnRfc2VjcmV0JyxcbiAgUkVTUE9OU0VfVFlQRSA9ICdyZXNwb25zZV90eXBlJyxcbiAgU0NPUEUgPSAnc2NvcGUnLFxuICBTVEFURSA9ICdzdGF0ZScsXG4gIFJFRElSRUNUX1VSSSA9ICdyZWRpcmVjdF91cmknLFxuICBFUlJPUiA9ICdlcnJvcicsXG4gIEVSUk9SX0RFU0NSSVBUSU9OID0gJ2Vycm9yX2Rlc2NyaXB0aW9uJyxcbiAgRVJST1JfVVJJID0gJ2Vycm9yX3VyaScsXG4gIEdSQU5UX1RZUEUgPSAnZ3JhbnRfdHlwZScsXG4gIENPREUgPSAnY29kZScsXG4gIEFDQ0VTU19UT0tFTiA9ICdhY2Nlc3NfdG9rZW4nLFxuICBUT0tFTl9UWVBFID0gJ3Rva2VuX3R5cGUnLFxuICBFWFBJUkVTX0lOID0gJ2V4cGlyZXNfaW4nLFxuICBVU0VSTkFNRSA9ICd1c2VybmFtZScsXG4gIFBBU1NXT1JEID0gJ3Bhc3N3b3JkJyxcbiAgUkVGUkVTSF9UT0tFTiA9ICdyZWZyZXNoX3Rva2VuJyxcbn1cblxuZXhwb3J0IGVudW0gRXJyb3JUeXBlIHtcbiAgVU5SRUFDSEFCTEUgPSAndW5yZWFjaGFibGUnLFxuICBMT0NBTCA9ICdsb2NhbCcsXG4gIENBTkNFTExFRCA9ICdjYW5jZWxsZWQnLFxuICBVTktOT1dOID0gJ3Vua25vd24nLFxuICBJTlZBTElEX0FSR1VNRU5UID0gJ2ludmFsaWRfYXJndW1lbnQnLFxuICBERUFETElORV9FWENFRURFRCA9ICdkZWFkbGluZV9leGNlZWRlZCcsXG4gIE5PVF9GT1VORCA9ICdub3RfZm91bmQnLFxuICBBTFJFQURZX0VYSVNUUyA9ICdhbHJlYWR5X2V4aXN0cycsXG4gIFBFUk1JU1NJT05fREVOSUVEID0gJ3Blcm1pc3Npb25fZGVuaWVkJyxcbiAgVU5BVVRIRU5USUNBVEVEID0gJ3VuYXV0aGVudGljYXRlZCcsXG4gIFJFU09VUkNFX0VYSEFVU1RFRCA9ICdyZXNvdXJjZV9leGhhdXN0ZWQnLFxuICBGQUlMRURfUFJFQ09ORElUSU9OID0gJ2ZhaWxlZF9wcmVjb25kaXRpb24nLFxuICBBQk9SVEVEID0gJ2Fib3J0ZWQnLFxuICBPVVRfT0ZfUkFOR0UgPSAnb3V0X29mX3JhbmdlJyxcbiAgVU5JTVBMRU1FTlRFRCA9ICd1bmltcGxlbWVudGVkJyxcbiAgSU5URVJOQUwgPSAnaW50ZXJuYWwnLFxuICBVTkFWQUlMQUJMRSA9ICd1bmF2YWlsYWJsZScsXG4gIERBVEFfTE9TUyA9ICdkYXRhX2xvc3MnLFxuICAvLyBDb21tb25FcnJvclxuICBDQVBUQ0hBX1JFUVVJUkVEID0gJ2NhcHRjaGFfcmVxdWlyZWQnLFxuICBDQVBUQ0hBX0lOVkFMSUQgPSAnY2FwdGNoYV9pbnZhbGlkJyxcbiAgSU5WQUxJRF9QQVNTV09SRCA9ICdpbnZhbGlkX3Bhc3N3b3JkJyxcbiAgSU5WQUxJRF9TVEFUVVMgPSAnaW52YWxpZF9zdGF0dXMnLFxuICBVU0VSX1BFTkRJTkcgPSAndXNlcl9wZW5kaW5nJyxcbiAgVVNFUl9CTE9DS0VEID0gJ3VzZXJfYmxvY2tlZCcsXG4gIElOVkFMSURfVkVSSUZJQ0FUSU9OX0NPREUgPSAnaW52YWxpZF92ZXJpZmljYXRpb25fY29kZScsXG4gIFRXT19GQUNUT1JfUkVRVUlSRUQgPSAndHdvX2ZhY3Rvcl9yZXF1aXJlZCcsXG4gIElOVkFMSURfVFdPX0ZBQ1RPUiA9ICdpbnZhbGlkX3R3b19mYWN0b3InLFxuICBJTlZBTElEX1RXT19GQUNUT1JfUkVDT1ZFUlkgPSAnaW52YWxpZF90d29fZmFjdG9yX3JlY292ZXJ5JyxcbiAgVU5ERVJfUkVWSUVXID0gJ3VuZGVyX3JldmlldycsXG4gIElOVkFMSURfUkVRVUVTVCA9ICdpbnZhbGlkX3JlcXVlc3QnLFxuICBVTkFVVEhPUklaRURfQ0xJRU5UID0gJ3VuYXV0aG9yaXplZF9jbGllbnQnLFxuICBBQ0NFU1NfREVOSUVEID0gJ2FjY2Vzc19kZW5pZWQnLFxuICBVTlNVUFBPUlRFRF9SRVNQT05TRV9UWVBFID0gJ3Vuc3VwcG9ydGVkX3Jlc3BvbnNlX3R5cGUnLFxuICBJTlZBTElEX1NDT1BFID0gJ2ludmFsaWRfc2NvcGUnLFxuICBJTlZBTElEX0dSQU5UID0gJ2ludmFsaWRfZ3JhbnQnLFxuICBTRVJWRVJfRVJST1IgPSAnc2VydmVyX2Vycm9yJyxcbiAgVEVNUE9SQVJJTFlfVU5BVkFJTEFCTEUgPSAndGVtcG9yYXJpbHlfdW5hdmFpbGFibGUnLFxuICBJTlRFUkFDVElPTl9SRVFVSVJFRCA9ICdpbnRlcmFjdGlvbl9yZXF1aXJlZCcsXG4gIExPR0lOX1JFUVVJUkVEID0gJ2xvZ2luX3JlcXVpcmVkJyxcbiAgQUNDT1VOVF9TRUxFQ1RJT05fUkVRVUlSRUQgPSAnYWNjb3VudF9zZWxlY3Rpb25fcmVxdWlyZWQnLFxuICBDT05TRU5UX1JFUVVJUkVEID0gJ2NvbnNlbnRfcmVxdWlyZWQnLFxuICBJTlZBTElEX1JFUVVFU1RfVVJJID0gJ2ludmFsaWRfcmVxdWVzdF91cmknLFxuICBJTlZBTElEX1JFUVVFU1RfT0JKRUNUID0gJ2ludmFsaWRfcmVxdWVzdF9vYmplY3QnLFxuICBSRVFVRVNUX05PVF9TVVBQT1JURUQgPSAncmVxdWVzdF9ub3Rfc3VwcG9ydGVkJyxcbiAgUkVRVUVTVF9VUklfTk9UX1NVUFBPUlRFRCA9ICdyZXF1ZXN0X3VyaV9ub3Rfc3VwcG9ydGVkJyxcbiAgUkVHSVNUUkFUSU9OX05PVF9TVVBQT1JURUQgPSAncmVnaXN0cmF0aW9uX25vdF9zdXBwb3J0ZWQnLFxufVxuIl19
@@ -0,0 +1,15 @@
1
+ import { Credentials, AuthClientRequestOptions } from './models';
2
+ export declare abstract class AuthClient {
3
+ abstract setCredentials(credentials?: Credentials): void;
4
+ abstract request: RequestFunction;
5
+ abstract getAccessToken(): Promise<string>;
6
+ }
7
+ export declare type RequestFunction = <T>(url: string, options?: AuthClientRequestOptions) => Promise<T>;
8
+ export interface SimpleStorage {
9
+ getItem: (key: string) => Promise<string | null>;
10
+ removeItem: (key: string) => Promise<void>;
11
+ setItem: (key: string, value: string) => Promise<void>;
12
+ getItemSync: (key: string) => string | null;
13
+ removeItemSync: (key: string) => void;
14
+ setItemSync: (key: string, value: string) => void;
15
+ }
@@ -0,0 +1,7 @@
1
+ var AuthClient = (function () {
2
+ function AuthClient() {
3
+ }
4
+ return AuthClient;
5
+ }());
6
+ export { AuthClient };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29hdXRoMmNsaWVudC9pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0E7SUFBQTtJQW9CQSxDQUFDO0lBQUQsaUJBQUM7QUFBRCxDQUFDLEFBcEJELElBb0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3JlZGVudGlhbHMsIEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzJztcblxuLyoqXG4gKiB0aGUgaW50ZXJmYWNlIGZvciB0aGUgT2F1dGgyQ2xpZW50XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBdXRoQ2xpZW50IHtcbiAgLyoqXG4gICAqIFNldHMgdGhlIGF1dGggY3JlZGVudGlhbHMuXG4gICAqL1xuICBhYnN0cmFjdCBzZXRDcmVkZW50aWFscyhjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKTogdm9pZDtcbiAgLyoqXG4gICAqIFByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIGZldGNoIGFwaSByZXF1ZXN0IGltcGxlbWVudGF0aW9uIHdpdGggYXV0aCBjcmVkZW50aWFsc1xuICAgKiBpZiBvcHRpb25zLndpdGhDcmVkZW50aWFsczp0cnVlLCB0aGUgcmVxdWVzdCB3aWxsIGF1dG8gYWRkIEF1dGhvcml6YXRpb246IEJlYXJlciA8QWNjZXNzVG9rZW4+IGluIHRoZSByZXF1ZXN0XG4gICAqIGVycm9yOlxuICAgKiAgICAgLSB1bnJlYWNoYWJsZSwgdGhlIG5ldHdvcmsgZXJyb3Igb3IgcmVzcG9uc2UgaXMgbm90IGpzb25cbiAgICogICAgIC0gdW5hdXRoZW50aWNhdGVkOiBoYXMgbm8gdmFsaWRhdGUgYWNjZXNzIHRva2VuXG4gICAqL1xuICBhYnN0cmFjdCByZXF1ZXN0OiBSZXF1ZXN0RnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgY3VycmVudCBhY2Nlc3NUb2tlbiBmcm9tIEF1dGhDbGllbnQsIHlvdSBjYW4gdXNlIHRoaXMgdG8gZGV0ZWN0IGxvZ2luIHN0YXR1c1xuICAgKiBlcnJvcjpcbiAgICogICAgLSAgdW5hdXRoZW50aWNhdGVkOiBoYXMgbm8gdmFsaWRhdGUgYWNjZXNzIHRva2VuXG4gICAqL1xuICBhYnN0cmFjdCBnZXRBY2Nlc3NUb2tlbigpOiBQcm9taXNlPHN0cmluZz47XG59XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RGdW5jdGlvbiA9IDxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxUPjtcblxuLyoqIEFuIGludGVyZmFjZSBvZiB0aGUgU2ltcGxlICBXZWIgU3RvcmFnZSBBUEkgICovXG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsZVN0b3JhZ2Uge1xuICAvKipcbiAgICogdmFsdWUgPSBzdG9yYWdlW2tleV1cbiAgICovXG4gIGdldEl0ZW06IChrZXk6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgLyoqXG4gICAqIGRlbGV0ZSBzdG9yYWdlW2tleV1cbiAgICovXG4gIHJlbW92ZUl0ZW06IChrZXk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIHN0b3JhZ2Vba2V5XSA9IHZhbHVlXG4gICAqL1xuICBzZXRJdGVtOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIHZhbHVlID0gc3RvcmFnZVtrZXldXG4gICAqL1xuICBnZXRJdGVtU3luYzogKGtleTogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsO1xuICAvKipcbiAgICogZGVsZXRlIHN0b3JhZ2Vba2V5XVxuICAgKi9cbiAgcmVtb3ZlSXRlbVN5bmM6IChrZXk6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqXG4gICAqIHN0b3JhZ2Vba2V5XSA9IHZhbHVlXG4gICAqL1xuICBzZXRJdGVtU3luYzogKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xufVxuIl19
@@ -0,0 +1,47 @@
1
+ import { SimpleStorage } from './interface';
2
+ import { ErrorType } from './consts';
3
+ export interface Credentials {
4
+ token_type?: string | null;
5
+ access_token?: string | null;
6
+ refresh_token?: string | null;
7
+ scope?: string | null;
8
+ expires_in?: number | null;
9
+ expires_at?: Date | null;
10
+ sub?: string | null;
11
+ }
12
+ export interface ResponseError {
13
+ error: ErrorType;
14
+ error_description?: string | null;
15
+ error_uri?: string | null;
16
+ details?: any | null;
17
+ }
18
+ export interface RequestOptions {
19
+ body?: any | null;
20
+ headers?: any | null;
21
+ method?: string;
22
+ [key: string]: any;
23
+ }
24
+ export declare type RequestFunction = <T>(url: string, options?: RequestOptions) => Promise<T>;
25
+ export interface AuthClientRequestOptions extends RequestOptions {
26
+ headers?: {
27
+ 'x-request-id'?: string;
28
+ [key: string]: any;
29
+ } | null;
30
+ withCredentials?: boolean;
31
+ retry?: number;
32
+ [key: string]: any;
33
+ }
34
+ export interface OAuth2ClientOptions {
35
+ devMode?: boolean;
36
+ apiOrigin: string;
37
+ clientId: string;
38
+ retry?: number;
39
+ baseRequest?: <T>(url: string, options?: RequestOptions) => Promise<T>;
40
+ storage?: SimpleStorage;
41
+ clientSecret?: string;
42
+ refreshTokenFunc?: (refreshToken?: string) => Promise<Credentials>;
43
+ tokenInURL?: boolean;
44
+ headers?: {
45
+ [key: string]: string;
46
+ };
47
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29hdXRoMmNsaWVudC9tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2ltcGxlU3RvcmFnZX0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHtFcnJvclR5cGV9IGZyb20gJy4vY29uc3RzJztcblxuLyoqIENyZWRlbnRpYWxzICoqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVkZW50aWFscyB7XG4gICAgdG9rZW5fdHlwZT86IHN0cmluZyB8IG51bGw7XG4gICAgYWNjZXNzX3Rva2VuPzogc3RyaW5nIHwgbnVsbDtcbiAgICByZWZyZXNoX3Rva2VuPzogc3RyaW5nIHwgbnVsbDtcbiAgICBzY29wZT86IHN0cmluZyB8IG51bGw7XG4gICAgZXhwaXJlc19pbj86IG51bWJlciB8IG51bGw7XG4gICAgZXhwaXJlc19hdD86IERhdGUgfCBudWxsO1xuICAgIHN1Yj86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKiBBbiBFcnJvciBGb3IgYWxsIGNvbmNlcm4gKiovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlRXJyb3Ige1xuICAgIGVycm9yOiBFcnJvclR5cGU7XG4gICAgZXJyb3JfZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVycm9yX3VyaT86IHN0cmluZyB8IG51bGw7XG4gICAgZGV0YWlscz86IGFueSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdE9wdGlvbnMge1xuICAgIGJvZHk/OiBhbnkgfCBudWxsO1xuICAgIGhlYWRlcnM/OiBhbnkgfCBudWxsO1xuICAgIG1ldGhvZD86IHN0cmluZztcblxuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IHR5cGUgUmVxdWVzdEZ1bmN0aW9uID0gPFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyxcbikgPT4gUHJvbWlzZTxUPjtcblxuZXhwb3J0IGludGVyZmFjZSBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMgZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyB7XG4gICAgaGVhZGVycz86IHtcbiAgICAgICAgJ3gtcmVxdWVzdC1pZCc/OiBzdHJpbmc7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICB9IHwgbnVsbDtcbiAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgIHJldHJ5PzogbnVtYmVyO1xuXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoMkNsaWVudE9wdGlvbnMge1xuICAgIGRldk1vZGU/OiBib29sZWFuO1xuICAgIGFwaU9yaWdpbjogc3RyaW5nO1xuICAgIGNsaWVudElkOiBzdHJpbmc7XG4gICAgLy8gZGVmYXVsdCB2YWx1ZSBpcyAxLG1pbiB2YWx1ZSBpcyAwLCBtYXggdmFsdWUgaXMgNVxuICAgIHJldHJ5PzogbnVtYmVyO1xuICAgIGJhc2VSZXF1ZXN0PzogPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VD47XG4gICAgLy8gU3RvcmFnZSwgZGVmYXVsdCBpcyBsb2NhbFN0b3JhZ2UsIHNldEl0ZW0oaywgdiksIGdldEl0ZW0oaykscmVtb3ZlSXRlbShrKVxuICAgIHN0b3JhZ2U/OiBTaW1wbGVTdG9yYWdlO1xuICAgIGNsaWVudFNlY3JldD86IHN0cmluZztcbiAgICByZWZyZXNoVG9rZW5GdW5jPzogKHJlZnJlc2hUb2tlbj86IHN0cmluZykgPT4gUHJvbWlzZTxDcmVkZW50aWFscz47XG4gICAgLy8gc2V0IHRoZSB0b2tlbiBpbiB1cmwgcXVlcnkgaW5zdGVhZCBvZiBoZWFkZXJcbiAgICB0b2tlbkluVVJMPzogYm9vbGVhbjtcbiAgICBoZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cbiJdfQ==