@opentdf/sdk 0.3.1 → 0.3.2-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/dist/cjs/src/access/access-fetch.js +155 -0
  2. package/dist/cjs/src/access/access-rpc.js +131 -0
  3. package/dist/cjs/src/access.js +81 -107
  4. package/dist/cjs/src/auth/oidc.js +2 -2
  5. package/dist/cjs/src/nanotdf/Client.js +17 -13
  6. package/dist/cjs/src/nanotdf/models/Header.js +2 -2
  7. package/dist/cjs/src/nanotdf-crypto/keyAgreement.js +2 -2
  8. package/dist/cjs/src/opentdf.js +42 -8
  9. package/dist/cjs/src/platform/authorization/authorization_pb.js +138 -0
  10. package/dist/cjs/src/platform/buf/validate/validate_pb.js +410 -0
  11. package/dist/cjs/src/platform/common/common_pb.js +79 -0
  12. package/dist/cjs/src/platform/entityresolution/entity_resolution_pb.js +49 -0
  13. package/dist/cjs/src/platform/google/api/annotations_pb.js +30 -0
  14. package/dist/cjs/src/platform/google/api/http_pb.js +37 -0
  15. package/dist/cjs/src/platform/kas/kas_pb.js +96 -0
  16. package/dist/cjs/src/platform/policy/actions/actions_pb.js +70 -0
  17. package/dist/cjs/src/platform/policy/attributes/attributes_pb.js +240 -0
  18. package/dist/cjs/src/platform/policy/kasregistry/key_access_server_registry_pb.js +236 -0
  19. package/dist/cjs/src/platform/policy/keymanagement/key_management_pb.js +70 -0
  20. package/dist/cjs/src/platform/policy/namespaces/namespaces_pb.js +121 -0
  21. package/dist/cjs/src/platform/policy/objects_pb.js +395 -0
  22. package/dist/cjs/src/platform/policy/registeredresources/registered_resources_pb.js +132 -0
  23. package/dist/cjs/src/platform/policy/resourcemapping/resource_mapping_pb.js +139 -0
  24. package/dist/cjs/src/platform/policy/selectors_pb.js +67 -0
  25. package/dist/cjs/src/platform/policy/subjectmapping/subject_mapping_pb.js +146 -0
  26. package/dist/cjs/src/platform/policy/unsafe/unsafe_pb.js +124 -0
  27. package/dist/cjs/src/platform/protoc-gen-openapiv2/options/annotations_pb.js +68 -0
  28. package/dist/cjs/src/platform/protoc-gen-openapiv2/options/openapiv2_pb.js +307 -0
  29. package/dist/cjs/src/platform/wellknownconfiguration/wellknown_configuration_pb.js +33 -0
  30. package/dist/cjs/src/platform.js +124 -0
  31. package/dist/cjs/src/policy/api.js +21 -38
  32. package/dist/cjs/src/policy/attributes.js +4 -1
  33. package/dist/cjs/src/policy/granter.js +9 -9
  34. package/dist/cjs/src/utils.js +31 -1
  35. package/dist/cjs/src/version.js +2 -2
  36. package/dist/cjs/tdf3/src/client/index.js +23 -18
  37. package/dist/cjs/tdf3/src/tdf.js +5 -5
  38. package/dist/types/src/access/access-fetch.d.ts +21 -0
  39. package/dist/types/src/access/access-fetch.d.ts.map +1 -0
  40. package/dist/types/src/access/access-rpc.d.ts +22 -0
  41. package/dist/types/src/access/access-rpc.d.ts.map +1 -0
  42. package/dist/types/src/access.d.ts +19 -11
  43. package/dist/types/src/access.d.ts.map +1 -1
  44. package/dist/types/src/nanotdf/Client.d.ts +3 -1
  45. package/dist/types/src/nanotdf/Client.d.ts.map +1 -1
  46. package/dist/types/src/opentdf.d.ts +5 -1
  47. package/dist/types/src/opentdf.d.ts.map +1 -1
  48. package/dist/types/src/platform/authorization/authorization_pb.d.ts +609 -0
  49. package/dist/types/src/platform/authorization/authorization_pb.d.ts.map +1 -0
  50. package/dist/types/src/platform/buf/validate/validate_pb.d.ts +4466 -0
  51. package/dist/types/src/platform/buf/validate/validate_pb.d.ts.map +1 -0
  52. package/dist/types/src/platform/common/common_pb.d.ts +112 -0
  53. package/dist/types/src/platform/common/common_pb.d.ts.map +1 -0
  54. package/dist/types/src/platform/entityresolution/entity_resolution_pb.d.ts +199 -0
  55. package/dist/types/src/platform/entityresolution/entity_resolution_pb.d.ts.map +1 -0
  56. package/dist/types/src/platform/google/api/annotations_pb.d.ts +14 -0
  57. package/dist/types/src/platform/google/api/annotations_pb.d.ts.map +1 -0
  58. package/dist/types/src/platform/google/api/http_pb.d.ts +441 -0
  59. package/dist/types/src/platform/google/api/http_pb.d.ts.map +1 -0
  60. package/dist/types/src/platform/kas/kas_pb.d.ts +404 -0
  61. package/dist/types/src/platform/kas/kas_pb.d.ts.map +1 -0
  62. package/dist/types/src/platform/policy/actions/actions_pb.d.ts +265 -0
  63. package/dist/types/src/platform/policy/actions/actions_pb.d.ts.map +1 -0
  64. package/dist/types/src/platform/policy/attributes/attributes_pb.d.ts +1022 -0
  65. package/dist/types/src/platform/policy/attributes/attributes_pb.d.ts.map +1 -0
  66. package/dist/types/src/platform/policy/kasregistry/key_access_server_registry_pb.d.ts +1306 -0
  67. package/dist/types/src/platform/policy/kasregistry/key_access_server_registry_pb.d.ts.map +1 -0
  68. package/dist/types/src/platform/policy/keymanagement/key_management_pb.d.ts +269 -0
  69. package/dist/types/src/platform/policy/keymanagement/key_management_pb.d.ts.map +1 -0
  70. package/dist/types/src/platform/policy/namespaces/namespaces_pb.d.ts +448 -0
  71. package/dist/types/src/platform/policy/namespaces/namespaces_pb.d.ts.map +1 -0
  72. package/dist/types/src/platform/policy/objects_pb.d.ts +1112 -0
  73. package/dist/types/src/platform/policy/objects_pb.d.ts.map +1 -0
  74. package/dist/types/src/platform/policy/registeredresources/registered_resources_pb.d.ts +539 -0
  75. package/dist/types/src/platform/policy/registeredresources/registered_resources_pb.d.ts.map +1 -0
  76. package/dist/types/src/platform/policy/resourcemapping/resource_mapping_pb.d.ts +558 -0
  77. package/dist/types/src/platform/policy/resourcemapping/resource_mapping_pb.d.ts.map +1 -0
  78. package/dist/types/src/platform/policy/selectors_pb.d.ts +221 -0
  79. package/dist/types/src/platform/policy/selectors_pb.d.ts.map +1 -0
  80. package/dist/types/src/platform/policy/subjectmapping/subject_mapping_pb.d.ts +582 -0
  81. package/dist/types/src/platform/policy/subjectmapping/subject_mapping_pb.d.ts.map +1 -0
  82. package/dist/types/src/platform/policy/unsafe/unsafe_pb.d.ts +513 -0
  83. package/dist/types/src/platform/policy/unsafe/unsafe_pb.d.ts.map +1 -0
  84. package/dist/types/src/platform/protoc-gen-openapiv2/options/annotations_pb.d.ts +62 -0
  85. package/dist/types/src/platform/protoc-gen-openapiv2/options/annotations_pb.d.ts.map +1 -0
  86. package/dist/types/src/platform/protoc-gen-openapiv2/options/openapiv2_pb.d.ts +1441 -0
  87. package/dist/types/src/platform/protoc-gen-openapiv2/options/openapiv2_pb.d.ts.map +1 -0
  88. package/dist/types/src/platform/wellknownconfiguration/wellknown_configuration_pb.d.ts +59 -0
  89. package/dist/types/src/platform/wellknownconfiguration/wellknown_configuration_pb.d.ts.map +1 -0
  90. package/dist/types/src/platform.d.ts +49 -0
  91. package/dist/types/src/platform.d.ts.map +1 -0
  92. package/dist/types/src/policy/api.d.ts +1 -1
  93. package/dist/types/src/policy/api.d.ts.map +1 -1
  94. package/dist/types/src/policy/attributes.d.ts +10 -87
  95. package/dist/types/src/policy/attributes.d.ts.map +1 -1
  96. package/dist/types/src/policy/granter.d.ts.map +1 -1
  97. package/dist/types/src/utils.d.ts +10 -0
  98. package/dist/types/src/utils.d.ts.map +1 -1
  99. package/dist/types/src/version.d.ts +1 -1
  100. package/dist/types/tdf3/src/client/index.d.ts +8 -3
  101. package/dist/types/tdf3/src/client/index.d.ts.map +1 -1
  102. package/dist/types/tdf3/src/tdf.d.ts.map +1 -1
  103. package/dist/web/src/access/access-fetch.js +150 -0
  104. package/dist/web/src/access/access-rpc.js +125 -0
  105. package/dist/web/src/access.js +82 -110
  106. package/dist/web/src/auth/oidc.js +2 -2
  107. package/dist/web/src/nanotdf/Client.js +18 -14
  108. package/dist/web/src/nanotdf/models/Header.js +2 -2
  109. package/dist/web/src/nanotdf-crypto/keyAgreement.js +2 -2
  110. package/dist/web/src/opentdf.js +43 -9
  111. package/dist/web/src/platform/authorization/authorization_pb.js +135 -0
  112. package/dist/web/src/platform/buf/validate/validate_pb.js +407 -0
  113. package/dist/web/src/platform/common/common_pb.js +76 -0
  114. package/dist/web/src/platform/entityresolution/entity_resolution_pb.js +46 -0
  115. package/dist/web/src/platform/google/api/annotations_pb.js +27 -0
  116. package/dist/web/src/platform/google/api/http_pb.js +34 -0
  117. package/dist/web/src/platform/kas/kas_pb.js +93 -0
  118. package/dist/web/src/platform/policy/actions/actions_pb.js +67 -0
  119. package/dist/web/src/platform/policy/attributes/attributes_pb.js +237 -0
  120. package/dist/web/src/platform/policy/kasregistry/key_access_server_registry_pb.js +233 -0
  121. package/dist/web/src/platform/policy/keymanagement/key_management_pb.js +67 -0
  122. package/dist/web/src/platform/policy/namespaces/namespaces_pb.js +118 -0
  123. package/dist/web/src/platform/policy/objects_pb.js +392 -0
  124. package/dist/web/src/platform/policy/registeredresources/registered_resources_pb.js +129 -0
  125. package/dist/web/src/platform/policy/resourcemapping/resource_mapping_pb.js +136 -0
  126. package/dist/web/src/platform/policy/selectors_pb.js +64 -0
  127. package/dist/web/src/platform/policy/subjectmapping/subject_mapping_pb.js +143 -0
  128. package/dist/web/src/platform/policy/unsafe/unsafe_pb.js +121 -0
  129. package/dist/web/src/platform/protoc-gen-openapiv2/options/annotations_pb.js +65 -0
  130. package/dist/web/src/platform/protoc-gen-openapiv2/options/openapiv2_pb.js +304 -0
  131. package/dist/web/src/platform/wellknownconfiguration/wellknown_configuration_pb.js +30 -0
  132. package/dist/web/src/platform.js +87 -0
  133. package/dist/web/src/policy/api.js +23 -40
  134. package/dist/web/src/policy/attributes.js +3 -2
  135. package/dist/web/src/policy/granter.js +9 -9
  136. package/dist/web/src/utils.js +29 -1
  137. package/dist/web/src/version.js +2 -2
  138. package/dist/web/tdf3/src/client/index.js +25 -20
  139. package/dist/web/tdf3/src/tdf.js +5 -5
  140. package/package.json +17 -1
  141. package/src/access/access-fetch.ts +202 -0
  142. package/src/access/access-rpc.ts +175 -0
  143. package/src/access.ts +113 -138
  144. package/src/auth/oidc.ts +1 -1
  145. package/src/nanotdf/Client.ts +28 -18
  146. package/src/nanotdf/models/Header.ts +1 -1
  147. package/src/nanotdf-crypto/keyAgreement.ts +1 -1
  148. package/src/opentdf.ts +66 -10
  149. package/src/platform/authorization/authorization_pb.ts +689 -0
  150. package/src/platform/buf/validate/validate_pb.ts +4626 -0
  151. package/src/platform/common/common_pb.ts +135 -0
  152. package/src/platform/entityresolution/entity_resolution_pb.ts +233 -0
  153. package/src/platform/google/api/annotations_pb.ts +39 -0
  154. package/src/platform/google/api/http_pb.ts +474 -0
  155. package/src/platform/kas/kas_pb.ts +484 -0
  156. package/src/platform/policy/actions/actions_pb.ts +312 -0
  157. package/src/platform/policy/attributes/attributes_pb.ts +1181 -0
  158. package/src/platform/policy/kasregistry/key_access_server_registry_pb.ts +1482 -0
  159. package/src/platform/policy/keymanagement/key_management_pb.ts +316 -0
  160. package/src/platform/policy/namespaces/namespaces_pb.ts +528 -0
  161. package/src/platform/policy/objects_pb.ts +1319 -0
  162. package/src/platform/policy/registeredresources/registered_resources_pb.ts +623 -0
  163. package/src/platform/policy/resourcemapping/resource_mapping_pb.ts +658 -0
  164. package/src/platform/policy/selectors_pb.ts +277 -0
  165. package/src/platform/policy/subjectmapping/subject_mapping_pb.ts +687 -0
  166. package/src/platform/policy/unsafe/unsafe_pb.ts +593 -0
  167. package/src/platform/protoc-gen-openapiv2/options/annotations_pb.ts +83 -0
  168. package/src/platform/protoc-gen-openapiv2/options/openapiv2_pb.ts +1615 -0
  169. package/src/platform/wellknownconfiguration/wellknown_configuration_pb.ts +78 -0
  170. package/src/platform.ts +122 -0
  171. package/src/policy/api.ts +29 -42
  172. package/src/policy/attributes.ts +12 -108
  173. package/src/policy/granter.ts +7 -8
  174. package/src/utils.ts +30 -0
  175. package/src/version.ts +1 -1
  176. package/tdf3/src/client/index.ts +40 -19
  177. package/tdf3/src/tdf.ts +5 -6
  178. package/src/platform/authorization/authorization_connect.d.ts +0 -44
  179. package/src/platform/authorization/authorization_connect.js +0 -44
  180. package/src/platform/authorization/authorization_pb.d.ts +0 -707
  181. package/src/platform/authorization/authorization_pb.js +0 -372
  182. package/src/platform/common/common_pb.d.ts +0 -129
  183. package/src/platform/common/common_pb.js +0 -58
  184. package/src/platform/entityresolution/entity_resolution_connect.d.ts +0 -35
  185. package/src/platform/entityresolution/entity_resolution_connect.js +0 -35
  186. package/src/platform/entityresolution/entity_resolution_pb.d.ts +0 -242
  187. package/src/platform/entityresolution/entity_resolution_pb.js +0 -139
  188. package/src/platform/kas/kas_connect.d.ts +0 -59
  189. package/src/platform/kas/kas_connect.js +0 -59
  190. package/src/platform/kas/kas_pb.d.ts +0 -200
  191. package/src/platform/kas/kas_pb.js +0 -84
  192. package/src/platform/policy/attributes/attributes_connect.d.ts +0 -168
  193. package/src/platform/policy/attributes/attributes_connect.js +0 -168
  194. package/src/platform/policy/attributes/attributes_pb.d.ts +0 -929
  195. package/src/platform/policy/attributes/attributes_pb.js +0 -363
  196. package/src/platform/policy/kasregistry/key_access_server_registry_connect.d.ts +0 -62
  197. package/src/platform/policy/kasregistry/key_access_server_registry_connect.js +0 -62
  198. package/src/platform/policy/kasregistry/key_access_server_registry_pb.d.ts +0 -283
  199. package/src/platform/policy/kasregistry/key_access_server_registry_pb.js +0 -113
  200. package/src/platform/policy/namespaces/namespaces_connect.d.ts +0 -62
  201. package/src/platform/policy/namespaces/namespaces_connect.js +0 -62
  202. package/src/platform/policy/namespaces/namespaces_pb.d.ts +0 -270
  203. package/src/platform/policy/namespaces/namespaces_pb.js +0 -110
  204. package/src/platform/policy/objects_pb.d.ts +0 -725
  205. package/src/platform/policy/objects_pb.js +0 -288
  206. package/src/platform/policy/resourcemapping/resource_mapping_connect.d.ts +0 -259
  207. package/src/platform/policy/resourcemapping/resource_mapping_connect.js +0 -259
  208. package/src/platform/policy/resourcemapping/resource_mapping_pb.d.ts +0 -314
  209. package/src/platform/policy/resourcemapping/resource_mapping_pb.js +0 -142
  210. package/src/platform/policy/selectors_pb.d.ts +0 -269
  211. package/src/platform/policy/selectors_pb.js +0 -110
  212. package/src/platform/policy/subjectmapping/subject_mapping_connect.d.ts +0 -118
  213. package/src/platform/policy/subjectmapping/subject_mapping_connect.js +0 -118
  214. package/src/platform/policy/subjectmapping/subject_mapping_pb.d.ts +0 -672
  215. package/src/platform/policy/subjectmapping/subject_mapping_pb.js +0 -260
  216. package/src/platform/wellknownconfiguration/wellknown_configuration_connect.d.ts +0 -26
  217. package/src/platform/wellknownconfiguration/wellknown_configuration_connect.js +0 -26
  218. package/src/platform/wellknownconfiguration/wellknown_configuration_pb.d.ts +0 -75
  219. package/src/platform/wellknownconfiguration/wellknown_configuration_pb.js +0 -35
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchWrappedKey = fetchWrappedKey;
4
+ exports.fetchKeyAccessServers = fetchKeyAccessServers;
5
+ exports.fetchKasPubKey = fetchKasPubKey;
6
+ const access_js_1 = require("../access.js");
7
+ const errors_js_1 = require("../errors.js");
8
+ const utils_js_1 = require("../utils.js");
9
+ /**
10
+ * Get a rewrapped access key to the document, if possible
11
+ * @param url Key access server rewrap endpoint
12
+ * @param requestBody a signed request with an encrypted document key
13
+ * @param authProvider Authorization middleware
14
+ */
15
+ async function fetchWrappedKey(url, requestBody, authProvider) {
16
+ const req = await authProvider.withCreds({
17
+ url,
18
+ method: 'POST',
19
+ headers: {
20
+ 'Content-Type': 'application/json',
21
+ },
22
+ body: JSON.stringify(requestBody),
23
+ });
24
+ let response;
25
+ try {
26
+ response = await fetch(req.url, {
27
+ method: req.method,
28
+ mode: 'cors', // no-cors, *cors, same-origin
29
+ cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
30
+ credentials: 'same-origin', // include, *same-origin, omit
31
+ headers: req.headers,
32
+ redirect: 'follow', // manual, *follow, error
33
+ referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
34
+ body: req.body,
35
+ });
36
+ }
37
+ catch (e) {
38
+ throw new errors_js_1.NetworkError(`unable to fetch wrapped key from [${url}]`, e);
39
+ }
40
+ if (!response.ok) {
41
+ switch (response.status) {
42
+ case 400:
43
+ throw new errors_js_1.InvalidFileError(`400 for [${req.url}]: rewrap bad request [${await response.text()}]`);
44
+ case 401:
45
+ throw new errors_js_1.UnauthenticatedError(`401 for [${req.url}]; rewrap auth failure`);
46
+ case 403:
47
+ throw new errors_js_1.PermissionDeniedError(`403 for [${req.url}]; rewrap permission denied`);
48
+ default:
49
+ if (response.status >= 500) {
50
+ throw new errors_js_1.ServiceError(`${response.status} for [${req.url}]: rewrap failure due to service error [${await response.text()}]`);
51
+ }
52
+ throw new errors_js_1.NetworkError(`${req.method} ${req.url} => ${response.status} ${response.statusText}`);
53
+ }
54
+ }
55
+ return response.json();
56
+ }
57
+ async function fetchKeyAccessServers(platformUrl, authProvider) {
58
+ let nextOffset = 0;
59
+ const allServers = [];
60
+ do {
61
+ const req = await authProvider.withCreds({
62
+ url: `${platformUrl}/key-access-servers?pagination.offset=${nextOffset}`,
63
+ method: 'GET',
64
+ headers: {
65
+ 'Content-Type': 'application/json',
66
+ },
67
+ });
68
+ let response;
69
+ try {
70
+ response = await fetch(req.url, {
71
+ method: req.method,
72
+ headers: req.headers,
73
+ body: req.body,
74
+ mode: 'cors',
75
+ cache: 'no-cache',
76
+ credentials: 'same-origin',
77
+ redirect: 'follow',
78
+ referrerPolicy: 'no-referrer',
79
+ });
80
+ }
81
+ catch (e) {
82
+ throw new errors_js_1.NetworkError(`unable to fetch kas list from [${req.url}]`, e);
83
+ }
84
+ // if we get an error from the kas registry, throw an error
85
+ if (!response.ok) {
86
+ throw new errors_js_1.ServiceError(`unable to fetch kas list from [${req.url}], status: ${response.status}`);
87
+ }
88
+ const { keyAccessServers = [], pagination = {} } = await response.json();
89
+ allServers.push(...keyAccessServers);
90
+ nextOffset = pagination.nextOffset || 0;
91
+ } while (nextOffset > 0);
92
+ const serverUrls = allServers.map((server) => server.uri);
93
+ // add base platform kas
94
+ if (!serverUrls.includes(`${platformUrl}/kas`)) {
95
+ serverUrls.push(`${platformUrl}/kas`);
96
+ }
97
+ return new access_js_1.OriginAllowList(serverUrls, false);
98
+ }
99
+ async function fetchKasPubKey(kasEndpoint, algorithm) {
100
+ if (!kasEndpoint) {
101
+ throw new errors_js_1.ConfigurationError('KAS definition not found');
102
+ }
103
+ // Logs insecure KAS. Secure is enforced in constructor
104
+ (0, utils_js_1.validateSecureUrl)(kasEndpoint);
105
+ // Parse kasEndpoint to URL, then append to its path and update its query parameters
106
+ let pkUrlV2;
107
+ try {
108
+ pkUrlV2 = new URL(kasEndpoint);
109
+ }
110
+ catch (e) {
111
+ throw new errors_js_1.ConfigurationError(`KAS definition invalid: [${kasEndpoint}]`, e);
112
+ }
113
+ if (!pkUrlV2.pathname.endsWith('kas_public_key')) {
114
+ if (!pkUrlV2.pathname.endsWith('/')) {
115
+ pkUrlV2.pathname += '/';
116
+ }
117
+ pkUrlV2.pathname += 'v2/kas_public_key';
118
+ }
119
+ pkUrlV2.searchParams.set('algorithm', algorithm || 'rsa:2048');
120
+ if (!pkUrlV2.searchParams.get('v')) {
121
+ pkUrlV2.searchParams.set('v', '2');
122
+ }
123
+ let kasPubKeyResponseV2;
124
+ try {
125
+ kasPubKeyResponseV2 = await fetch(pkUrlV2);
126
+ }
127
+ catch (e) {
128
+ throw new errors_js_1.NetworkError(`unable to fetch public key from [${pkUrlV2}]`, e);
129
+ }
130
+ if (!kasPubKeyResponseV2.ok) {
131
+ switch (kasPubKeyResponseV2.status) {
132
+ case 404:
133
+ throw new errors_js_1.ConfigurationError(`404 for [${pkUrlV2}]`);
134
+ case 401:
135
+ throw new errors_js_1.UnauthenticatedError(`401 for [${pkUrlV2}]`);
136
+ case 403:
137
+ throw new errors_js_1.PermissionDeniedError(`403 for [${pkUrlV2}]`);
138
+ default:
139
+ throw new errors_js_1.NetworkError(`${pkUrlV2} => ${kasPubKeyResponseV2.status} ${kasPubKeyResponseV2.statusText}`);
140
+ }
141
+ }
142
+ const jsonContent = await kasPubKeyResponseV2.json();
143
+ const { publicKey, kid } = jsonContent;
144
+ if (!publicKey) {
145
+ throw new errors_js_1.NetworkError(`invalid response from public key endpoint [${JSON.stringify(jsonContent)}]`);
146
+ }
147
+ return {
148
+ key: (0, access_js_1.noteInvalidPublicKey)(pkUrlV2, (0, utils_js_1.pemToCryptoPublicKey)(publicKey)),
149
+ publicKey,
150
+ url: kasEndpoint,
151
+ algorithm: algorithm || 'rsa:2048',
152
+ ...(kid && { kid }),
153
+ };
154
+ }
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWZldGNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FjY2Vzcy9hY2Nlc3MtZmV0Y2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFrQ0EsMENBc0RDO0FBRUQsc0RBK0NDO0FBRUQsd0NBOERDO0FBek1ELDRDQUtzQjtBQUV0Qiw0Q0FPc0I7QUFDdEIsMENBQXNFO0FBYXRFOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLGVBQWUsQ0FDbkMsR0FBVyxFQUNYLFdBQTBCLEVBQzFCLFlBQTBCO0lBRTFCLE1BQU0sR0FBRyxHQUFHLE1BQU0sWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUN2QyxHQUFHO1FBQ0gsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUU7WUFDUCxjQUFjLEVBQUUsa0JBQWtCO1NBQ25DO1FBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO0tBQ2xDLENBQUMsQ0FBQztJQUVILElBQUksUUFBa0IsQ0FBQztJQUV2QixJQUFJLENBQUM7UUFDSCxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUM5QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07WUFDbEIsSUFBSSxFQUFFLE1BQU0sRUFBRSw4QkFBOEI7WUFDNUMsS0FBSyxFQUFFLFVBQVUsRUFBRSwwREFBMEQ7WUFDN0UsV0FBVyxFQUFFLGFBQWEsRUFBRSw4QkFBOEI7WUFDMUQsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO1lBQ3BCLFFBQVEsRUFBRSxRQUFRLEVBQUUseUJBQXlCO1lBQzdDLGNBQWMsRUFBRSxhQUFhLEVBQUUsc0pBQXNKO1lBQ3JMLElBQUksRUFBRSxHQUFHLENBQUMsSUFBZ0I7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksd0JBQVksQ0FBQyxxQ0FBcUMsR0FBRyxHQUFHLEVB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
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchWrappedKey = fetchWrappedKey;
4
+ exports.fetchKeyAccessServers = fetchKeyAccessServers;
5
+ exports.fetchKasPubKey = fetchKasPubKey;
6
+ exports.fetchKasBasePubKey = fetchKasBasePubKey;
7
+ const access_js_1 = require("../access.js");
8
+ const errors_js_1 = require("../errors.js");
9
+ const platform_js_1 = require("../platform.js");
10
+ const utils_js_1 = require("../utils.js");
11
+ /**
12
+ * Get a rewrapped access key to the document, if possible
13
+ * @param url Key access server rewrap endpoint
14
+ * @param requestBody a signed request with an encrypted document key
15
+ * @param authProvider Authorization middleware
16
+ * @param clientVersion
17
+ */
18
+ async function fetchWrappedKey(url, signedRequestToken, authProvider) {
19
+ const platformUrl = (0, utils_js_1.getPlatformUrlFromKasEndpoint)(url);
20
+ const platform = new platform_js_1.PlatformClient({ authProvider, platformUrl });
21
+ try {
22
+ return await platform.v1.access.rewrap({
23
+ signedRequestToken,
24
+ });
25
+ }
26
+ catch (e) {
27
+ throw new errors_js_1.NetworkError(`[${platformUrl}] [Rewrap] ${(0, utils_js_1.extractRpcErrorMessage)(e)}`);
28
+ }
29
+ }
30
+ async function fetchKeyAccessServers(platformUrl, authProvider) {
31
+ let nextOffset = 0;
32
+ const allServers = [];
33
+ const platform = new platform_js_1.PlatformClient({ authProvider, platformUrl });
34
+ do {
35
+ let response;
36
+ try {
37
+ response = await platform.v1.keyAccessServerRegistry.listKeyAccessServers({
38
+ pagination: {
39
+ offset: nextOffset,
40
+ },
41
+ });
42
+ }
43
+ catch (e) {
44
+ throw new errors_js_1.NetworkError(`[${platformUrl}] [ListKeyAccessServers] ${(0, utils_js_1.extractRpcErrorMessage)(e)}`);
45
+ }
46
+ allServers.push(...response.keyAccessServers);
47
+ nextOffset = response?.pagination?.nextOffset || 0;
48
+ } while (nextOffset > 0);
49
+ const serverUrls = allServers.map((server) => server.uri);
50
+ // add base platform kas
51
+ if (!serverUrls.includes(`${platformUrl}/kas`)) {
52
+ serverUrls.push(`${platformUrl}/kas`);
53
+ }
54
+ return new access_js_1.OriginAllowList(serverUrls, false);
55
+ }
56
+ function isBaseKey(baseKey) {
57
+ if (!baseKey) {
58
+ return false;
59
+ }
60
+ const bk = baseKey;
61
+ return (!!bk.kas_uri &&
62
+ !!bk.public_key &&
63
+ typeof bk.public_key === 'object' &&
64
+ !!bk.public_key.pem &&
65
+ !!bk.public_key.algorithm &&
66
+ (0, access_js_1.isPublicKeyAlgorithm)(bk.public_key.algorithm));
67
+ }
68
+ async function fetchKasPubKey(kasEndpoint, algorithm) {
69
+ if (!kasEndpoint) {
70
+ throw new errors_js_1.ConfigurationError('KAS definition not found');
71
+ }
72
+ // Logs insecure KAS. Secure is enforced in constructor
73
+ (0, utils_js_1.validateSecureUrl)(kasEndpoint);
74
+ const platformUrl = (0, utils_js_1.getPlatformUrlFromKasEndpoint)(kasEndpoint);
75
+ const platform = new platform_js_1.PlatformClient({
76
+ platformUrl,
77
+ });
78
+ try {
79
+ const { kid, publicKey } = await platform.v1.access.publicKey({
80
+ algorithm: algorithm || 'rsa:2048',
81
+ v: '2',
82
+ });
83
+ const result = {
84
+ key: (0, access_js_1.noteInvalidPublicKey)(new URL(platformUrl), (0, utils_js_1.pemToCryptoPublicKey)(publicKey)),
85
+ publicKey,
86
+ url: kasEndpoint,
87
+ algorithm: algorithm || 'rsa:2048',
88
+ ...(kid && { kid }),
89
+ };
90
+ return result;
91
+ }
92
+ catch (e) {
93
+ throw new errors_js_1.NetworkError(`[${platformUrl}] [PublicKey] ${(0, utils_js_1.extractRpcErrorMessage)(e)}`);
94
+ }
95
+ }
96
+ /**
97
+ * Fetch the base public key from WellKnownConfiguration of the platform.
98
+ * @param kasEndpoint The KAS endpoint URL.
99
+ * @throws {ConfigurationError} If the KAS endpoint is not defined.
100
+ * @throws {NetworkError} If there is an error fetching the public key from the KAS endpoint.
101
+ * @returns The base public key information for the KAS endpoint.
102
+ */
103
+ async function fetchKasBasePubKey(kasEndpoint) {
104
+ if (!kasEndpoint) {
105
+ throw new errors_js_1.ConfigurationError('KAS definition not found');
106
+ }
107
+ (0, utils_js_1.validateSecureUrl)(kasEndpoint);
108
+ const platformUrl = (0, utils_js_1.getPlatformUrlFromKasEndpoint)(kasEndpoint);
109
+ const platform = new platform_js_1.PlatformClient({
110
+ platformUrl,
111
+ });
112
+ try {
113
+ const { configuration } = await platform.v1.wellknown.getWellKnownConfiguration({});
114
+ const baseKey = configuration?.base_key;
115
+ if (!isBaseKey(baseKey)) {
116
+ throw new errors_js_1.NetworkError(`Invalid Platform Configuration: [${kasEndpoint}] is missing BaseKey in WellKnownConfiguration`);
117
+ }
118
+ const result = {
119
+ key: (0, access_js_1.noteInvalidPublicKey)(new URL(baseKey.kas_uri), (0, utils_js_1.pemToCryptoPublicKey)(baseKey.public_key.pem)),
120
+ publicKey: baseKey.public_key.pem,
121
+ url: baseKey.kas_uri,
122
+ algorithm: baseKey.public_key.algorithm,
123
+ kid: baseKey.public_key.kid,
124
+ };
125
+ return result;
126
+ }
127
+ catch (e) {
128
+ throw new errors_js_1.NetworkError(`[${platformUrl}] [PublicKey] ${(0, utils_js_1.extractRpcErrorMessage)(e)}`);
129
+ }
130
+ }
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLXJwYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hY2Nlc3MvYWNjZXNzLXJwYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTBCQSwwQ0FjQztBQUVELHNEQWlDQztBQTJCRCx3Q0E4QkM7QUFTRCxnREFpQ0M7QUE5S0QsNENBTXNCO0FBRXRCLDRDQUFnRTtBQUNoRSxnREFBZ0Q7QUFHaEQsMENBS3FCO0FBRXJCOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSxlQUFlLENBQ25DLEdBQVcsRUFDWCxrQkFBMEIsRUFDMUIsWUFBMEI7SUFFMUIsTUFBTSxXQUFXLEdBQUcsSUFBQSx3Q0FBNkIsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUN2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLDRCQUFjLENBQUMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNuRSxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3JDLGtCQUFrQjtTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSx3QkFBWSxDQUFDLElBQUksV0FBVyxjQUFjLElBQUEsaUNBQXNCLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLHFCQUFxQixDQUN6QyxXQUFtQixFQUNuQixZQUEwQjtJQUUxQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDbkIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksNEJBQWMsQ0FBQyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBRW5FLEdBQUcsQ0FBQztRQUNGLElBQUksUUFBc0MsQ0FBQztRQUMzQyxJQUFJLENBQUM7WUFD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
@@ -2,10 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OriginAllowList = exports.publicKeyAlgorithmToJwa = exports.keyAlgorithmToPublicKeyAlgorithm = exports.isPublicKeyAlgorithm = void 0;
4
4
  exports.fetchWrappedKey = fetchWrappedKey;
5
+ exports.noteInvalidPublicKey = noteInvalidPublicKey;
6
+ exports.fetchKeyAccessServers = fetchKeyAccessServers;
5
7
  exports.fetchECKasPubKey = fetchECKasPubKey;
6
8
  exports.fetchKasPubKey = fetchKasPubKey;
7
9
  const errors_js_1 = require("./errors.js");
8
10
  const utils_js_1 = require("./utils.js");
11
+ const access_rpc_js_1 = require("./access/access-rpc.js");
12
+ const access_fetch_js_1 = require("./access/access-fetch.js");
13
+ const access_rpc_js_2 = require("./access/access-rpc.js");
14
+ const access_fetch_js_2 = require("./access/access-fetch.js");
15
+ const access_rpc_js_3 = require("./access/access-rpc.js");
16
+ const access_fetch_js_3 = require("./access/access-fetch.js");
9
17
  /**
10
18
  * Get a rewrapped access key to the document, if possible
11
19
  * @param url Key access server rewrap endpoint
@@ -13,70 +21,41 @@ const utils_js_1 = require("./utils.js");
13
21
  * @param authProvider Authorization middleware
14
22
  * @param clientVersion
15
23
  */
16
- async function fetchWrappedKey(url, requestBody, authProvider, clientVersion) {
17
- const req = await authProvider.withCreds({
18
- url,
19
- method: 'POST',
20
- headers: {
21
- 'Content-Type': 'application/json',
22
- },
23
- body: JSON.stringify(requestBody),
24
- });
25
- let response;
26
- try {
27
- response = await fetch(req.url, {
28
- method: req.method,
29
- mode: 'cors', // no-cors, *cors, same-origin
30
- cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
31
- credentials: 'same-origin', // include, *same-origin, omit
32
- headers: req.headers,
33
- redirect: 'follow', // manual, *follow, error
34
- referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
35
- body: req.body,
36
- });
37
- }
38
- catch (e) {
39
- throw new errors_js_1.NetworkError(`unable to fetch wrapped key from [${url}]`, e);
40
- }
41
- if (!response.ok) {
42
- switch (response.status) {
43
- case 400:
44
- throw new errors_js_1.InvalidFileError(`400 for [${req.url}]: rewrap bad request [${await response.text()}]`);
45
- case 401:
46
- throw new errors_js_1.UnauthenticatedError(`401 for [${req.url}]; rewrap auth failure`);
47
- case 403:
48
- throw new errors_js_1.PermissionDeniedError(`403 for [${req.url}]; rewrap permission denied`);
49
- default:
50
- if (response.status >= 500) {
51
- throw new errors_js_1.ServiceError(`${response.status} for [${req.url}]: rewrap failure due to service error [${await response.text()}]`);
52
- }
53
- throw new errors_js_1.NetworkError(`${req.method} ${req.url} => ${response.status} ${response.statusText}`);
54
- }
55
- }
56
- return response.json();
24
+ async function fetchWrappedKey(url, signedRequestToken, authProvider) {
25
+ const platformUrl = (0, utils_js_1.getPlatformUrlFromKasEndpoint)(url);
26
+ return await tryPromisesUntilFirstSuccess(() => (0, access_rpc_js_2.fetchWrappedKey)(platformUrl, signedRequestToken, authProvider), () => (0, access_fetch_js_2.fetchWrappedKey)(url, { signedRequestToken }, authProvider));
57
27
  }
58
28
  const isPublicKeyAlgorithm = (a) => {
59
29
  return a === 'ec:secp256r1' || a === 'rsa:2048';
60
30
  };
61
31
  exports.isPublicKeyAlgorithm = isPublicKeyAlgorithm;
62
- const keyAlgorithmToPublicKeyAlgorithm = (a) => {
32
+ const keyAlgorithmToPublicKeyAlgorithm = (k) => {
33
+ const a = k.algorithm;
63
34
  if (a.name === 'ECDSA' || a.name === 'ECDH') {
64
35
  const eca = a;
65
- if (eca.namedCurve === 'P-256') {
66
- return 'ec:secp256r1';
36
+ switch (eca.namedCurve) {
37
+ case 'P-256':
38
+ return 'ec:secp256r1';
39
+ case 'P-384':
40
+ return 'ec:secp384r1';
41
+ case 'P-521':
42
+ return 'ec:secp521r1';
43
+ default:
44
+ throw new Error(`unsupported EC curve: ${eca.namedCurve}`);
67
45
  }
68
- throw new Error(`unsupported EC curve: ${eca.namedCurve}`);
69
46
  }
70
- if (a.name === 'RSA-OAEP') {
47
+ if (a.name === 'RSA-OAEP' || a.name === 'RSASSA-PKCS1-v1_5') {
71
48
  const rsaa = a;
72
- if (rsaa.modulusLength === 2048) {
73
- // if (rsaa.hash.name !== 'RSASSA-PKCS1-v1_5') {
74
- // throw new Error(`unsupported RSA hash: ${rsaa.hash.name}`);
75
- // }
76
- if (rsaa.publicExponent.toString() !== '1,0,1') {
77
- throw new Error(`unsupported RSA public exponent: ${rsaa.publicExponent}`);
78
- }
79
- return 'rsa:2048';
49
+ if (rsaa.publicExponent.toString() !== '1,0,1') {
50
+ throw new Error(`unsupported RSA public exponent: ${rsaa.publicExponent}`);
51
+ }
52
+ switch (rsaa.modulusLength) {
53
+ case 2048:
54
+ return 'rsa:2048';
55
+ case 4096:
56
+ return 'rsa:4096';
57
+ default:
58
+ throw new Error(`unsupported RSA modulus length: ${rsaa.modulusLength}`);
80
59
  }
81
60
  }
82
61
  throw new Error(`unsupported key algorithm: ${a.name}`);
@@ -88,6 +67,14 @@ const publicKeyAlgorithmToJwa = (a) => {
88
67
  return 'ES256';
89
68
  case 'rsa:2048':
90
69
  return 'RS256';
70
+ case 'rsa:4096':
71
+ return 'RS512';
72
+ case 'ec:secp384r1':
73
+ return 'ES384';
74
+ case 'ec:secp521r1':
75
+ return 'ES512';
76
+ default:
77
+ throw new Error(`unsupported public key algorithm: ${a}`);
91
78
  }
92
79
  };
93
80
  exports.publicKeyAlgorithmToJwa = publicKeyAlgorithmToJwa;
@@ -102,68 +89,35 @@ async function noteInvalidPublicKey(url, r) {
102
89
  throw e;
103
90
  }
104
91
  }
92
+ async function fetchKeyAccessServers(platformUrl, authProvider) {
93
+ return await tryPromisesUntilFirstSuccess(() => (0, access_rpc_js_1.fetchKeyAccessServers)(platformUrl, authProvider), () => (0, access_fetch_js_1.fetchKeyAccessServers)(platformUrl, authProvider));
94
+ }
105
95
  /**
106
- * If we have KAS url but not public key we can fetch it from KAS, fetching
107
- * the value from `${kas}/kas_public_key`.
96
+ * Fetch the EC (secp256r1) public key for a KAS endpoint.
97
+ * @param kasEndpoint The KAS endpoint URL.
98
+ * @returns The public key information for the KAS endpoint.
108
99
  */
109
100
  async function fetchECKasPubKey(kasEndpoint) {
110
101
  return fetchKasPubKey(kasEndpoint, 'ec:secp256r1');
111
102
  }
103
+ /**
104
+ * Fetch the public key for a KAS endpoint.
105
+ * This function will first try to fetch the base public key,
106
+ * then it will try to fetch the public key using the RPC method,
107
+ * and finally it will try to fetch the public key using the legacy method.
108
+ * If all attempts fail, it will return the error from RPC Public Key fetch.
109
+ * @param kasEndpoint The KAS endpoint URL.
110
+ * @param algorithm Optional algorithm to fetch the public key for.
111
+ * @returns The public key information.
112
+ */
112
113
  async function fetchKasPubKey(kasEndpoint, algorithm) {
113
- if (!kasEndpoint) {
114
- throw new errors_js_1.ConfigurationError('KAS definition not found');
115
- }
116
- // Logs insecure KAS. Secure is enforced in constructor
117
- (0, utils_js_1.validateSecureUrl)(kasEndpoint);
118
- // Parse kasEndpoint to URL, then append to its path and update its query parameters
119
- let pkUrlV2;
120
114
  try {
121
- pkUrlV2 = new URL(kasEndpoint);
115
+ return await (0, access_rpc_js_1.fetchKasBasePubKey)(kasEndpoint);
122
116
  }
123
117
  catch (e) {
124
- throw new errors_js_1.ConfigurationError(`KAS definition invalid: [${kasEndpoint}]`, e);
125
- }
126
- if (!pkUrlV2.pathname.endsWith('kas_public_key')) {
127
- if (!pkUrlV2.pathname.endsWith('/')) {
128
- pkUrlV2.pathname += '/';
129
- }
130
- pkUrlV2.pathname += 'v2/kas_public_key';
131
- }
132
- pkUrlV2.searchParams.set('algorithm', algorithm || 'rsa:2048');
133
- if (!pkUrlV2.searchParams.get('v')) {
134
- pkUrlV2.searchParams.set('v', '2');
118
+ console.log(e);
135
119
  }
136
- let kasPubKeyResponseV2;
137
- try {
138
- kasPubKeyResponseV2 = await fetch(pkUrlV2);
139
- }
140
- catch (e) {
141
- throw new errors_js_1.NetworkError(`unable to fetch public key from [${pkUrlV2}]`, e);
142
- }
143
- if (!kasPubKeyResponseV2.ok) {
144
- switch (kasPubKeyResponseV2.status) {
145
- case 404:
146
- throw new errors_js_1.ConfigurationError(`404 for [${pkUrlV2}]`);
147
- case 401:
148
- throw new errors_js_1.UnauthenticatedError(`401 for [${pkUrlV2}]`);
149
- case 403:
150
- throw new errors_js_1.PermissionDeniedError(`403 for [${pkUrlV2}]`);
151
- default:
152
- throw new errors_js_1.NetworkError(`${pkUrlV2} => ${kasPubKeyResponseV2.status} ${kasPubKeyResponseV2.statusText}`);
153
- }
154
- }
155
- const jsonContent = await kasPubKeyResponseV2.json();
156
- const { publicKey, kid } = jsonContent;
157
- if (!publicKey) {
158
- throw new errors_js_1.NetworkError(`invalid response from public key endpoint [${JSON.stringify(jsonContent)}]`);
159
- }
160
- return {
161
- key: noteInvalidPublicKey(pkUrlV2, (0, utils_js_1.pemToCryptoPublicKey)(publicKey)),
162
- publicKey,
163
- url: kasEndpoint,
164
- algorithm: algorithm || 'rsa:2048',
165
- ...(kid && { kid }),
166
- };
120
+ return await tryPromisesUntilFirstSuccess(() => (0, access_rpc_js_3.fetchKasPubKey)(kasEndpoint, algorithm), () => (0, access_fetch_js_3.fetchKasPubKey)(kasEndpoint, algorithm));
167
121
  }
168
122
  const origin = (u) => {
169
123
  try {
@@ -188,4 +142,24 @@ class OriginAllowList {
188
142
  }
189
143
  }
190
144
  exports.OriginAllowList = OriginAllowList;
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FjY2Vzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE2QkEsMENBdURDO0FBOEVELDRDQUVDO0FBRUQsd0NBOERDO0FBbk9ELDJDQU9xQjtBQUNyQix5Q0FBcUU7QUFhckU7Ozs7OztHQU1HO0FBQ0ksS0FBSyxVQUFVLGVBQWUsQ0FDbkMsR0FBVyxFQUNYLFdBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLGFBQXFCO0lBRXJCLE1BQU0sR0FBRyxHQUFHLE1BQU0sWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUN2QyxHQUFHO1FBQ0gsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUU7WUFDUCxjQUFjLEVBQUUsa0JBQWtCO1NBQ25DO1FBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO0tBQ2xDLENBQUMsQ0FBQztJQUVILElBQUksUUFBa0IsQ0FBQztJQUV2QixJQUFJLENBQUM7UUFDSCxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUM5QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07WUFDbEIsSUFBSSxFQUFFLE1BQU0sRUFBRSw4QkFBOEI7WUFDNUMsS0FBSyxFQUFFLFVBQVUsRUFBRSwwREFBMEQ7WUFDN0UsV0FBVyxFQUFFLGFBQWEsRUFBRSw4QkFBOEI7WUFDMUQsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO1lBQ3BCLFFBQVEsRUFBRSxRQUFRLEVBQUUseUJBQXlCO1lBQzdDLGNBQWMsRUFBRSxhQUFhLEVBQUUsc0pBQXNKO1lBQ3JMLElBQUksRUFBRSxHQUFHLENBQUMsSUFBZ0I7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksd0JBQVksQ0FBQyxxQ0FBcUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFD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
145
+ /**
146
+ * Tries two promise-returning functions in order and returns the first successful result.
147
+ * If both fail, throws the error from the second.
148
+ * @param first First function returning a promise to try.
149
+ * @param second Second function returning a promise to try if the first fails.
150
+ */
151
+ async function tryPromisesUntilFirstSuccess(first, second) {
152
+ try {
153
+ return await first();
154
+ }
155
+ catch (e1) {
156
+ console.info('v2 request error', e1);
157
+ try {
158
+ return await second();
159
+ }
160
+ catch (err) {
161
+ throw err;
162
+ }
163
+ }
164
+ }
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FjY2Vzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEwQkEsMENBZ0JDO0FBcUZELG9EQVNDO0FBRUQsc0RBUUM7QUFPRCw0Q0FFQztBQVlELHdDQWNDO0FBcExELDJDQUEyQztBQUUzQyx5Q0FBOEU7QUFFOUUsMERBR2dDO0FBQ2hDLDhEQUFnRztBQUNoRywwREFBZ0Y7QUFDaEYsOERBQXFGO0FBQ3JGLDBEQUE2RTtBQUM3RSw4REFBa0Y7QUFNbEY7Ozs7OztHQU1HO0FBQ0ksS0FBSyxVQUFVLGVBQWUsQ0FDbkMsR0FBVyxFQUNYLGtCQUEwQixFQUMxQixZQUEwQjtJQUUxQixNQUFNLFdBQVcsR0FBRyxJQUFBLHdDQUE2QixFQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXZELE9BQU8sTUFBTSw0QkFBNEIsQ0FDdkMsR0FBRyxFQUFFLENBQUMsSUFBQSwrQkFBbUIsRUFBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLEVBQ3hFLEdBQUcsRUFBRSxDQUNILElBQUEsaUNBQXNCLEVBQ3BCLEdBQUcsRUFDSCxFQUFFLGtCQUFrQixFQUFFLEVBQ3RCLFlBQVksQ0FDeUIsQ0FDMUMsQ0FBQztBQUNKLENBQUM7QUFTTSxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBUyxFQUE4QixFQUFFO0lBQzVFLE9BQU8sQ0FBQyxLQUFLLGNBQWMsSUFBSSxDQUFDLEtBQUssVUFBVSxDQUFDO0FBQ2xELENBQUMsQ0FBQztBQUZXLFFBQUEsb0JBQW9CLHdCQUUvQjtBQUVLLE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQyxDQUFZLEVBQXlCLEVBQUU7SUFDdEYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDNUMsTUFBTSxH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
@@ -148,7 +148,7 @@ class AccessToken {
148
148
  }
149
149
  catch (e) {
150
150
  console.log('access_token fails on user_info endpoint; attempting to renew', e);
151
- if (this.data.refresh_token) {
151
+ if (this.data?.refresh_token) {
152
152
  // Prefer the latest refresh_token if present over creds passed in
153
153
  // to constructor
154
154
  this.config = {
@@ -219,4 +219,4 @@ class AccessToken {
219
219
  }
220
220
  }
221
221
  exports.AccessToken = AccessToken;
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2lkYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hdXRoL29pZGMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0RBQXlDO0FBQ3pDLHVDQUFxRDtBQUNyRCxvREFBK0M7QUFDL0MsNENBQTREO0FBQzVELDBDQUF3RDtBQWtEeEQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUEyQixFQUFFLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQU94Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBYSxXQUFXO0lBZXRCLFlBQVksR0FBb0IsRUFBRSxPQUFzQjtRQUp4RCxpQkFBWSxHQUEyQixFQUFFLENBQUM7UUFLeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksOEJBQWtCLENBQzFCLDRFQUE0RSxDQUM3RSxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbkQsTUFBTSxJQUFJLDhCQUFrQixDQUMxQiw0RUFBNEUsQ0FDN0UsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BELE1BQU0sSUFBSSw4QkFBa0IsQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1FBQzdGLENBQUM7UUFDRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssVUFBVSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BELE1BQU0sSUFBSSw4QkFBa0IsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xC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
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2lkYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hdXRoL29pZGMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0RBQXlDO0FBQ3pDLHVDQUFxRDtBQUNyRCxvREFBK0M7QUFDL0MsNENBQTREO0FBQzVELDBDQUF3RDtBQWtEeEQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUEyQixFQUFFLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQU94Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBYSxXQUFXO0lBZXRCLFlBQVksR0FBb0IsRUFBRSxPQUFzQjtRQUp4RCxpQkFBWSxHQUEyQixFQUFFLENBQUM7UUFLeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksOEJBQWtCLENBQzFCLDRFQUE0RSxDQUM3RSxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbkQsTUFBTSxJQUFJLDhCQUFrQixDQUMxQiw0RUFBNEUsQ0FDN0UsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BELE1BQU0sSUFBSSw4QkFBa0IsQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1FBQzdGLENBQUM7UUFDRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssVUFBVSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BELE1BQU0sSUFBSSw4QkFBa0IsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xC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