@dereekb/firebase-server 13.11.8 → 13.11.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.cjs.js +95 -39
- package/index.esm.js +95 -39
- package/mailgun/package.json +9 -9
- package/model/package.json +9 -9
- package/oidc/index.cjs.js +32 -14
- package/oidc/index.esm.js +32 -15
- package/oidc/package.json +10 -10
- package/oidc/src/lib/controller/oidc.interaction.controller.d.ts +26 -0
- package/package.json +10 -10
- package/src/lib/auth/auth.context.d.ts +5 -1
- package/src/lib/nest/controller/model/model.api.get.service.d.ts +3 -0
- package/test/package.json +11 -11
- package/zoho/package.json +9 -9
package/index.cjs.js
CHANGED
|
@@ -35,7 +35,7 @@ function _define_property$z(obj, key, value) {
|
|
|
35
35
|
}
|
|
36
36
|
return obj;
|
|
37
37
|
}
|
|
38
|
-
function _object_spread$
|
|
38
|
+
function _object_spread$l(target) {
|
|
39
39
|
for(var i = 1; i < arguments.length; i++){
|
|
40
40
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
41
41
|
var ownKeys = Object.keys(source);
|
|
@@ -102,7 +102,7 @@ function _type_of$7(obj) {
|
|
|
102
102
|
*/ function unauthenticatedError(messageOrError) {
|
|
103
103
|
var _serverError_message;
|
|
104
104
|
var serverError = util.partialServerError(messageOrError);
|
|
105
|
-
return new https.HttpsError('unauthenticated', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'unauthenticated', _object_spread_props$e(_object_spread$
|
|
105
|
+
return new https.HttpsError('unauthenticated', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'unauthenticated', _object_spread_props$e(_object_spread$l({
|
|
106
106
|
status: 401,
|
|
107
107
|
code: firebase.UNAUTHENTICATED_ERROR_CODE
|
|
108
108
|
}, serverError), {
|
|
@@ -117,7 +117,7 @@ function _type_of$7(obj) {
|
|
|
117
117
|
*/ function forbiddenError(messageOrError) {
|
|
118
118
|
var _serverError_message;
|
|
119
119
|
var serverError = util.partialServerError(messageOrError);
|
|
120
|
-
return new https.HttpsError('permission-denied', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'forbidden', _object_spread_props$e(_object_spread$
|
|
120
|
+
return new https.HttpsError('permission-denied', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'forbidden', _object_spread_props$e(_object_spread$l({
|
|
121
121
|
status: 403,
|
|
122
122
|
code: firebase.FORBIDDEN_ERROR_CODE
|
|
123
123
|
}, serverError), {
|
|
@@ -132,7 +132,7 @@ function _type_of$7(obj) {
|
|
|
132
132
|
*/ function permissionDeniedError(messageOrError) {
|
|
133
133
|
var _serverError_message;
|
|
134
134
|
var serverError = util.partialServerError(messageOrError);
|
|
135
|
-
return new https.HttpsError('permission-denied', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'permission denied', _object_spread_props$e(_object_spread$
|
|
135
|
+
return new https.HttpsError('permission-denied', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'permission denied', _object_spread_props$e(_object_spread$l({
|
|
136
136
|
status: 403,
|
|
137
137
|
code: firebase.PERMISSION_DENIED_ERROR_CODE
|
|
138
138
|
}, serverError), {
|
|
@@ -147,7 +147,7 @@ function _type_of$7(obj) {
|
|
|
147
147
|
*/ function notFoundError(messageOrError) {
|
|
148
148
|
var _serverError_message;
|
|
149
149
|
var serverError = util.partialServerError(messageOrError);
|
|
150
|
-
return new https.HttpsError('not-found', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'not found', _object_spread_props$e(_object_spread$
|
|
150
|
+
return new https.HttpsError('not-found', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'not found', _object_spread_props$e(_object_spread$l({
|
|
151
151
|
status: 404,
|
|
152
152
|
code: firebase.NOT_FOUND_ERROR_CODE
|
|
153
153
|
}, serverError), {
|
|
@@ -162,7 +162,7 @@ function _type_of$7(obj) {
|
|
|
162
162
|
*/ function modelNotAvailableError(messageOrError) {
|
|
163
163
|
var _serverError_message;
|
|
164
164
|
var serverError = util.partialServerError(messageOrError);
|
|
165
|
-
return new https.HttpsError('not-found', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'model was not available', _object_spread_props$e(_object_spread$
|
|
165
|
+
return new https.HttpsError('not-found', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'model was not available', _object_spread_props$e(_object_spread$l({
|
|
166
166
|
status: 404,
|
|
167
167
|
code: firebase.MODEL_NOT_AVAILABLE_ERROR_CODE
|
|
168
168
|
}, serverError), {
|
|
@@ -177,7 +177,7 @@ function _type_of$7(obj) {
|
|
|
177
177
|
*/ function badRequestError(messageOrError) {
|
|
178
178
|
var _serverError_message;
|
|
179
179
|
var serverError = util.partialServerError(messageOrError);
|
|
180
|
-
return new https.HttpsError('invalid-argument', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'bad request', _object_spread_props$e(_object_spread$
|
|
180
|
+
return new https.HttpsError('invalid-argument', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'bad request', _object_spread_props$e(_object_spread$l({
|
|
181
181
|
status: 400,
|
|
182
182
|
code: firebase.BAD_REQUEST_ERROR_CODE
|
|
183
183
|
}, serverError), {
|
|
@@ -192,7 +192,7 @@ function _type_of$7(obj) {
|
|
|
192
192
|
*/ function preconditionConflictError(messageOrError) {
|
|
193
193
|
var _serverError_message;
|
|
194
194
|
var serverError = util.partialServerError(messageOrError);
|
|
195
|
-
return new https.HttpsError('failed-precondition', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'conflict', _object_spread_props$e(_object_spread$
|
|
195
|
+
return new https.HttpsError('failed-precondition', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'conflict', _object_spread_props$e(_object_spread$l({
|
|
196
196
|
status: 409,
|
|
197
197
|
code: firebase.CONFLICT_ERROR_CODE
|
|
198
198
|
}, serverError), {
|
|
@@ -207,7 +207,7 @@ function _type_of$7(obj) {
|
|
|
207
207
|
*/ function alreadyExistsError(messageOrError) {
|
|
208
208
|
var _serverError_message;
|
|
209
209
|
var serverError = util.partialServerError(messageOrError);
|
|
210
|
-
return new https.HttpsError('already-exists', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'already exists', _object_spread_props$e(_object_spread$
|
|
210
|
+
return new https.HttpsError('already-exists', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'already exists', _object_spread_props$e(_object_spread$l({
|
|
211
211
|
status: 409,
|
|
212
212
|
code: firebase.ALREADY_EXISTS_ERROR_CODE
|
|
213
213
|
}, serverError), {
|
|
@@ -222,7 +222,7 @@ function _type_of$7(obj) {
|
|
|
222
222
|
*/ function unavailableError(messageOrError) {
|
|
223
223
|
var _serverError_message;
|
|
224
224
|
var serverError = util.partialServerError(messageOrError);
|
|
225
|
-
return new https.HttpsError('unavailable', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'service unavailable', _object_spread_props$e(_object_spread$
|
|
225
|
+
return new https.HttpsError('unavailable', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'service unavailable', _object_spread_props$e(_object_spread$l({
|
|
226
226
|
status: 503,
|
|
227
227
|
code: firebase.UNAVAILABLE_ERROR_CODE
|
|
228
228
|
}, serverError), {
|
|
@@ -237,7 +237,7 @@ function _type_of$7(obj) {
|
|
|
237
237
|
*/ function unavailableOrDeactivatedFunctionError(messageOrError) {
|
|
238
238
|
var _serverError_message;
|
|
239
239
|
var serverError = util.partialServerError(messageOrError);
|
|
240
|
-
return new https.HttpsError('unimplemented', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'the requested function is not available or has been deactivated for use', _object_spread_props$e(_object_spread$
|
|
240
|
+
return new https.HttpsError('unimplemented', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'the requested function is not available or has been deactivated for use', _object_spread_props$e(_object_spread$l({
|
|
241
241
|
status: 501,
|
|
242
242
|
code: firebase.UNAVAILABLE_OR_DEACTIVATED_FUNCTION_ERROR_CODE
|
|
243
243
|
}, serverError), {
|
|
@@ -252,7 +252,7 @@ function _type_of$7(obj) {
|
|
|
252
252
|
*/ function internalServerError(messageOrError) {
|
|
253
253
|
var _serverError_message;
|
|
254
254
|
var serverError = util.partialServerError(messageOrError);
|
|
255
|
-
return new https.HttpsError('internal', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'internal error', _object_spread_props$e(_object_spread$
|
|
255
|
+
return new https.HttpsError('internal', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'internal error', _object_spread_props$e(_object_spread$l({
|
|
256
256
|
status: 500,
|
|
257
257
|
code: firebase.INTERNAL_SERVER_ERROR_CODE
|
|
258
258
|
}, serverError), {
|
|
@@ -412,7 +412,11 @@ function _type_of$7(obj) {
|
|
|
412
412
|
* Converts a Firebase Admin {@link admin.auth.DecodedIdToken} into a normalized {@link FirebaseAuthToken}.
|
|
413
413
|
*
|
|
414
414
|
* Maps Firebase Admin token fields (snake_case) to the application's token interface (camelCase),
|
|
415
|
-
* including email, phone, and sign-in timestamps.
|
|
415
|
+
* including email, phone, and sign-in timestamps. `auth_time`/`iat` are Unix seconds per the
|
|
416
|
+
* Firebase Admin types, so they are converted to milliseconds before being formatted. Missing
|
|
417
|
+
* or non-finite values map to `undefined` (the {@link FirebaseAuthToken} fields are optional) —
|
|
418
|
+
* synthetic tokens built from OIDC bearer auth do not always carry those claims, and we must
|
|
419
|
+
* not throw `RangeError("Invalid time value")` from this path.
|
|
416
420
|
*
|
|
417
421
|
* @param token - The decoded ID token from Firebase Admin Auth.
|
|
418
422
|
* @returns A normalized {@link FirebaseAuthToken} with camelCase fields.
|
|
@@ -427,10 +431,20 @@ function _type_of$7(obj) {
|
|
|
427
431
|
email: token.email,
|
|
428
432
|
emailVerified: token.email_verified,
|
|
429
433
|
phoneNumber: token.phone_number,
|
|
430
|
-
lastSignInTime:
|
|
431
|
-
lastRefreshTime:
|
|
434
|
+
lastSignInTime: toIsoStringFromUnixSeconds(token.auth_time),
|
|
435
|
+
lastRefreshTime: toIsoStringFromUnixSeconds(token.iat)
|
|
432
436
|
};
|
|
433
437
|
}
|
|
438
|
+
function toIsoStringFromUnixSeconds(value) {
|
|
439
|
+
var result;
|
|
440
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
441
|
+
var date = new Date(value * 1000);
|
|
442
|
+
if (Number.isFinite(date.getTime())) {
|
|
443
|
+
result = date.toISOString();
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
return result;
|
|
447
|
+
}
|
|
434
448
|
|
|
435
449
|
function asyncGeneratorStep$h(gen, resolve, reject, _next, _throw, key, arg) {
|
|
436
450
|
try {
|
|
@@ -975,7 +989,7 @@ function _non_iterable_rest$4() {
|
|
|
975
989
|
function _non_iterable_spread$a() {
|
|
976
990
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
977
991
|
}
|
|
978
|
-
function _object_spread$
|
|
992
|
+
function _object_spread$k(target) {
|
|
979
993
|
for(var i = 1; i < arguments.length; i++){
|
|
980
994
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
981
995
|
var ownKeys = Object.keys(source);
|
|
@@ -1407,7 +1421,7 @@ function _ts_generator$g(thisArg, body) {
|
|
|
1407
1421
|
return _async_to_generator$g(function() {
|
|
1408
1422
|
var claims;
|
|
1409
1423
|
return _ts_generator$g(this, function(_state) {
|
|
1410
|
-
claims = _object_spread$
|
|
1424
|
+
claims = _object_spread$k({}, claimsToRetain, this._claimsForRolesChange(_to_consumable_array$a(roles)));
|
|
1411
1425
|
return [
|
|
1412
1426
|
2,
|
|
1413
1427
|
this.setClaims(claims)
|
|
@@ -1451,7 +1465,7 @@ function _ts_generator$g(thisArg, body) {
|
|
|
1451
1465
|
];
|
|
1452
1466
|
case 1:
|
|
1453
1467
|
currentClaims = _state.sent();
|
|
1454
|
-
newClaims = _object_spread$
|
|
1468
|
+
newClaims = _object_spread$k({}, currentClaims, util.filterUndefinedValues(claims, false));
|
|
1455
1469
|
newClaims = util.filterNullAndUndefinedValues(newClaims);
|
|
1456
1470
|
return [
|
|
1457
1471
|
2,
|
|
@@ -3220,7 +3234,7 @@ function _iterable_to_array$9(iter) {
|
|
|
3220
3234
|
function _non_iterable_spread$9() {
|
|
3221
3235
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
3222
3236
|
}
|
|
3223
|
-
function _object_spread$
|
|
3237
|
+
function _object_spread$j(target) {
|
|
3224
3238
|
for(var i = 1; i < arguments.length; i++){
|
|
3225
3239
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
3226
3240
|
var ownKeys = Object.keys(source);
|
|
@@ -3277,7 +3291,7 @@ function _unsupported_iterable_to_array$d(o, minLen) {
|
|
|
3277
3291
|
}
|
|
3278
3292
|
return result;
|
|
3279
3293
|
}
|
|
3280
|
-
var updateData = _object_spread$
|
|
3294
|
+
var updateData = _object_spread$j({}, createUpdatesWithArrayFunction(union, firestore.FieldValue.arrayUnion), createUpdatesWithArrayFunction(remove, firestore.FieldValue.arrayRemove));
|
|
3281
3295
|
return updateData;
|
|
3282
3296
|
}
|
|
3283
3297
|
|
|
@@ -4127,7 +4141,7 @@ function _iterable_to_array$8(iter) {
|
|
|
4127
4141
|
function _non_iterable_spread$8() {
|
|
4128
4142
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
4129
4143
|
}
|
|
4130
|
-
function _object_spread$
|
|
4144
|
+
function _object_spread$i(target) {
|
|
4131
4145
|
for(var i = 1; i < arguments.length; i++){
|
|
4132
4146
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
4133
4147
|
var ownKeys = Object.keys(source);
|
|
@@ -4240,7 +4254,7 @@ var _obj;
|
|
|
4240
4254
|
* const queryDriver = googleCloudFirestoreQueryDriver();
|
|
4241
4255
|
* ```
|
|
4242
4256
|
*/ function googleCloudFirestoreQueryDriver() {
|
|
4243
|
-
return _object_spread_props$d(_object_spread$
|
|
4257
|
+
return _object_spread_props$d(_object_spread$i({}, firestoreClientQueryConstraintFunctionsDriver()), {
|
|
4244
4258
|
countDocs: function countDocs(query) {
|
|
4245
4259
|
return query.count().get().then(function(x) {
|
|
4246
4260
|
return x.data().count;
|
|
@@ -5446,7 +5460,7 @@ function _define_property$q(obj, key, value) {
|
|
|
5446
5460
|
}
|
|
5447
5461
|
return obj;
|
|
5448
5462
|
}
|
|
5449
|
-
function _object_spread$
|
|
5463
|
+
function _object_spread$h(target) {
|
|
5450
5464
|
for(var i = 1; i < arguments.length; i++){
|
|
5451
5465
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
5452
5466
|
var ownKeys = Object.keys(source);
|
|
@@ -5624,7 +5638,7 @@ function _object_spread_props$c(target, source) {
|
|
|
5624
5638
|
modelType: modelType,
|
|
5625
5639
|
specifier: specifier
|
|
5626
5640
|
});
|
|
5627
|
-
return crudFn(_object_spread_props$c(_object_spread$
|
|
5641
|
+
return crudFn(_object_spread_props$c(_object_spread$h({}, request), {
|
|
5628
5642
|
specifier: specifier,
|
|
5629
5643
|
data: request.data.data
|
|
5630
5644
|
}));
|
|
@@ -6278,7 +6292,7 @@ function _inherits$2(subClass, superClass) {
|
|
|
6278
6292
|
});
|
|
6279
6293
|
if (superClass) _set_prototype_of$2(subClass, superClass);
|
|
6280
6294
|
}
|
|
6281
|
-
function _object_spread$
|
|
6295
|
+
function _object_spread$g(target) {
|
|
6282
6296
|
for(var i = 1; i < arguments.length; i++){
|
|
6283
6297
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
6284
6298
|
var ownKeys = Object.keys(source);
|
|
@@ -6359,7 +6373,7 @@ function _is_native_reflect_construct$2() {
|
|
|
6359
6373
|
{
|
|
6360
6374
|
key: "handleOnCallAnalyticsEvent",
|
|
6361
6375
|
value: function handleOnCallAnalyticsEvent(event) {
|
|
6362
|
-
var properties = _object_spread$
|
|
6376
|
+
var properties = _object_spread$g(_object_spread_props$b(_object_spread$g({}, analytics.asAnalyticsEventData(event.properties)), {
|
|
6363
6377
|
call: event.call,
|
|
6364
6378
|
modelType: event.modelType,
|
|
6365
6379
|
lifecycle: event.lifecycle
|
|
@@ -6489,7 +6503,7 @@ function _define_property$o(obj, key, value) {
|
|
|
6489
6503
|
}
|
|
6490
6504
|
return obj;
|
|
6491
6505
|
}
|
|
6492
|
-
function _object_spread$
|
|
6506
|
+
function _object_spread$f(target) {
|
|
6493
6507
|
for(var i = 1; i < arguments.length; i++){
|
|
6494
6508
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
6495
6509
|
var ownKeys = Object.keys(source);
|
|
@@ -6570,7 +6584,7 @@ exports.FirebaseServerAuthModule = __decorate([
|
|
|
6570
6584
|
*/ function provideFirebaseServerAuthService(provider) {
|
|
6571
6585
|
var _provider_inject;
|
|
6572
6586
|
return [
|
|
6573
|
-
_object_spread_props$a(_object_spread$
|
|
6587
|
+
_object_spread_props$a(_object_spread$f({}, provider), {
|
|
6574
6588
|
inject: (_provider_inject = provider.inject) !== null && _provider_inject !== void 0 ? _provider_inject : [
|
|
6575
6589
|
FIREBASE_AUTH_TOKEN
|
|
6576
6590
|
]
|
|
@@ -6771,7 +6785,7 @@ function _define_property$n(obj, key, value) {
|
|
|
6771
6785
|
}
|
|
6772
6786
|
return obj;
|
|
6773
6787
|
}
|
|
6774
|
-
function _object_spread$
|
|
6788
|
+
function _object_spread$e(target) {
|
|
6775
6789
|
for(var i = 1; i < arguments.length; i++){
|
|
6776
6790
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
6777
6791
|
var ownKeys = Object.keys(source);
|
|
@@ -6816,7 +6830,7 @@ function _object_spread_props$9(target, source) {
|
|
|
6816
6830
|
* @param request - The base request to augment (must include the nestApplication reference).
|
|
6817
6831
|
* @returns A new object combining the request properties with the nest context.
|
|
6818
6832
|
*/ function injectNestIntoRequest(nest, request) {
|
|
6819
|
-
return _object_spread_props$9(_object_spread$
|
|
6833
|
+
return _object_spread_props$9(_object_spread$e({}, request), {
|
|
6820
6834
|
nest: nest
|
|
6821
6835
|
});
|
|
6822
6836
|
}
|
|
@@ -6830,7 +6844,7 @@ function _object_spread_props$9(target, source) {
|
|
|
6830
6844
|
* @param request - The base request to augment.
|
|
6831
6845
|
* @returns A new object combining the request properties with the application context.
|
|
6832
6846
|
*/ function injectNestApplicationContextIntoRequest(nestContext, request) {
|
|
6833
|
-
return _object_spread_props$9(_object_spread$
|
|
6847
|
+
return _object_spread_props$9(_object_spread$e({}, request), {
|
|
6834
6848
|
nestApplication: nestContext
|
|
6835
6849
|
});
|
|
6836
6850
|
}
|
|
@@ -6895,6 +6909,21 @@ function _define_property$m(obj, key, value) {
|
|
|
6895
6909
|
}
|
|
6896
6910
|
return obj;
|
|
6897
6911
|
}
|
|
6912
|
+
function _object_spread$d(target) {
|
|
6913
|
+
for(var i = 1; i < arguments.length; i++){
|
|
6914
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
6915
|
+
var ownKeys = Object.keys(source);
|
|
6916
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
6917
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
6918
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
6919
|
+
}));
|
|
6920
|
+
}
|
|
6921
|
+
ownKeys.forEach(function(key) {
|
|
6922
|
+
_define_property$m(target, key, source[key]);
|
|
6923
|
+
});
|
|
6924
|
+
}
|
|
6925
|
+
return target;
|
|
6926
|
+
}
|
|
6898
6927
|
function _ts_generator$a(thisArg, body) {
|
|
6899
6928
|
var f, y, t, _ = {
|
|
6900
6929
|
label: 0,
|
|
@@ -7053,14 +7082,17 @@ function _ts_generator$a(thisArg, body) {
|
|
|
7053
7082
|
* @returns The handler's return value.
|
|
7054
7083
|
*/ function dispatch(params, auth, rawRequest) {
|
|
7055
7084
|
return _async_to_generator$a(function() {
|
|
7056
|
-
var _auth_oidcValidatedToken, callableRequest, appRequest, contextRequest;
|
|
7085
|
+
var _auth_token, _auth_oidcValidatedToken, callableRequest, appRequest, contextRequest;
|
|
7057
7086
|
return _ts_generator$a(this, function(_state) {
|
|
7058
|
-
// Build a synthetic CallableRequest that the dispatch chain expects
|
|
7087
|
+
// Build a synthetic CallableRequest that the dispatch chain expects. Layer the
|
|
7088
|
+
// OIDC-validated claim subset over the base token so standard JWT claims
|
|
7089
|
+
// (`iat`, `auth_time`, `email`, …) survive — the callModel chain and any
|
|
7090
|
+
// `authContextInfo` consumer downstream rely on them being present.
|
|
7059
7091
|
callableRequest = {
|
|
7060
7092
|
data: params,
|
|
7061
7093
|
auth: auth ? {
|
|
7062
7094
|
uid: auth.uid,
|
|
7063
|
-
token: (_auth_oidcValidatedToken = auth.oidcValidatedToken) !== null && _auth_oidcValidatedToken !== void 0 ? _auth_oidcValidatedToken : {}
|
|
7095
|
+
token: _object_spread$d({}, (_auth_token = auth.token) !== null && _auth_token !== void 0 ? _auth_token : {}, (_auth_oidcValidatedToken = auth.oidcValidatedToken) !== null && _auth_oidcValidatedToken !== void 0 ? _auth_oidcValidatedToken : {})
|
|
7064
7096
|
} : undefined,
|
|
7065
7097
|
rawRequest: rawRequest,
|
|
7066
7098
|
acceptsStreaming: false
|
|
@@ -7156,6 +7188,21 @@ function _define_property$l(obj, key, value) {
|
|
|
7156
7188
|
}
|
|
7157
7189
|
return obj;
|
|
7158
7190
|
}
|
|
7191
|
+
function _object_spread$c(target) {
|
|
7192
|
+
for(var i = 1; i < arguments.length; i++){
|
|
7193
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
7194
|
+
var ownKeys = Object.keys(source);
|
|
7195
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
7196
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
7197
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
7198
|
+
}));
|
|
7199
|
+
}
|
|
7200
|
+
ownKeys.forEach(function(key) {
|
|
7201
|
+
_define_property$l(target, key, source[key]);
|
|
7202
|
+
});
|
|
7203
|
+
}
|
|
7204
|
+
return target;
|
|
7205
|
+
}
|
|
7159
7206
|
function _ts_generator$9(thisArg, body) {
|
|
7160
7207
|
var f, y, t, _ = {
|
|
7161
7208
|
label: 0,
|
|
@@ -7410,17 +7457,26 @@ function _ts_generator$9(thisArg, body) {
|
|
|
7410
7457
|
* Builds an {@link AuthDataRef} compatible with `useModel()` from the HTTP request auth.
|
|
7411
7458
|
*
|
|
7412
7459
|
* Uses the same synthetic auth pattern as {@link ModelApiDispatchService.dispatch}.
|
|
7460
|
+
* The OIDC-validated claim subset is layered over the base token so the synthetic
|
|
7461
|
+
* `auth.token` keeps standard JWT claims (`iat`, `auth_time`, `email`, …) that
|
|
7462
|
+
* downstream consumers like `authContextInfo` rely on.
|
|
7413
7463
|
*
|
|
7414
7464
|
* @param auth - The Firebase server auth data from the HTTP request, or undefined for unauthenticated requests.
|
|
7415
7465
|
* @returns An object containing a synthetic {@link AuthData} for use with `useModel()`, or undefined auth.
|
|
7416
7466
|
*/ key: "_makeAuthRef",
|
|
7417
7467
|
value: function _makeAuthRef(auth) {
|
|
7418
|
-
var
|
|
7419
|
-
|
|
7420
|
-
|
|
7468
|
+
var synthetic;
|
|
7469
|
+
if (auth) {
|
|
7470
|
+
var _auth_token, _auth_oidcValidatedToken;
|
|
7471
|
+
var baseToken = (_auth_token = auth.token) !== null && _auth_token !== void 0 ? _auth_token : {};
|
|
7472
|
+
var oidcToken = (_auth_oidcValidatedToken = auth.oidcValidatedToken) !== null && _auth_oidcValidatedToken !== void 0 ? _auth_oidcValidatedToken : {};
|
|
7473
|
+
synthetic = {
|
|
7421
7474
|
uid: auth.uid,
|
|
7422
|
-
token: (
|
|
7423
|
-
}
|
|
7475
|
+
token: _object_spread$c({}, baseToken, oidcToken)
|
|
7476
|
+
};
|
|
7477
|
+
}
|
|
7478
|
+
return {
|
|
7479
|
+
auth: synthetic
|
|
7424
7480
|
};
|
|
7425
7481
|
}
|
|
7426
7482
|
}
|
package/index.esm.js
CHANGED
|
@@ -33,7 +33,7 @@ function _define_property$z(obj, key, value) {
|
|
|
33
33
|
}
|
|
34
34
|
return obj;
|
|
35
35
|
}
|
|
36
|
-
function _object_spread$
|
|
36
|
+
function _object_spread$l(target) {
|
|
37
37
|
for(var i = 1; i < arguments.length; i++){
|
|
38
38
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
39
39
|
var ownKeys = Object.keys(source);
|
|
@@ -100,7 +100,7 @@ function _type_of$7(obj) {
|
|
|
100
100
|
*/ function unauthenticatedError(messageOrError) {
|
|
101
101
|
var _serverError_message;
|
|
102
102
|
var serverError = partialServerError(messageOrError);
|
|
103
|
-
return new HttpsError('unauthenticated', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'unauthenticated', _object_spread_props$e(_object_spread$
|
|
103
|
+
return new HttpsError('unauthenticated', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'unauthenticated', _object_spread_props$e(_object_spread$l({
|
|
104
104
|
status: 401,
|
|
105
105
|
code: UNAUTHENTICATED_ERROR_CODE
|
|
106
106
|
}, serverError), {
|
|
@@ -115,7 +115,7 @@ function _type_of$7(obj) {
|
|
|
115
115
|
*/ function forbiddenError(messageOrError) {
|
|
116
116
|
var _serverError_message;
|
|
117
117
|
var serverError = partialServerError(messageOrError);
|
|
118
|
-
return new HttpsError('permission-denied', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'forbidden', _object_spread_props$e(_object_spread$
|
|
118
|
+
return new HttpsError('permission-denied', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'forbidden', _object_spread_props$e(_object_spread$l({
|
|
119
119
|
status: 403,
|
|
120
120
|
code: FORBIDDEN_ERROR_CODE
|
|
121
121
|
}, serverError), {
|
|
@@ -130,7 +130,7 @@ function _type_of$7(obj) {
|
|
|
130
130
|
*/ function permissionDeniedError(messageOrError) {
|
|
131
131
|
var _serverError_message;
|
|
132
132
|
var serverError = partialServerError(messageOrError);
|
|
133
|
-
return new HttpsError('permission-denied', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'permission denied', _object_spread_props$e(_object_spread$
|
|
133
|
+
return new HttpsError('permission-denied', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'permission denied', _object_spread_props$e(_object_spread$l({
|
|
134
134
|
status: 403,
|
|
135
135
|
code: PERMISSION_DENIED_ERROR_CODE
|
|
136
136
|
}, serverError), {
|
|
@@ -145,7 +145,7 @@ function _type_of$7(obj) {
|
|
|
145
145
|
*/ function notFoundError(messageOrError) {
|
|
146
146
|
var _serverError_message;
|
|
147
147
|
var serverError = partialServerError(messageOrError);
|
|
148
|
-
return new HttpsError('not-found', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'not found', _object_spread_props$e(_object_spread$
|
|
148
|
+
return new HttpsError('not-found', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'not found', _object_spread_props$e(_object_spread$l({
|
|
149
149
|
status: 404,
|
|
150
150
|
code: NOT_FOUND_ERROR_CODE
|
|
151
151
|
}, serverError), {
|
|
@@ -160,7 +160,7 @@ function _type_of$7(obj) {
|
|
|
160
160
|
*/ function modelNotAvailableError(messageOrError) {
|
|
161
161
|
var _serverError_message;
|
|
162
162
|
var serverError = partialServerError(messageOrError);
|
|
163
|
-
return new HttpsError('not-found', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'model was not available', _object_spread_props$e(_object_spread$
|
|
163
|
+
return new HttpsError('not-found', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'model was not available', _object_spread_props$e(_object_spread$l({
|
|
164
164
|
status: 404,
|
|
165
165
|
code: MODEL_NOT_AVAILABLE_ERROR_CODE
|
|
166
166
|
}, serverError), {
|
|
@@ -175,7 +175,7 @@ function _type_of$7(obj) {
|
|
|
175
175
|
*/ function badRequestError(messageOrError) {
|
|
176
176
|
var _serverError_message;
|
|
177
177
|
var serverError = partialServerError(messageOrError);
|
|
178
|
-
return new HttpsError('invalid-argument', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'bad request', _object_spread_props$e(_object_spread$
|
|
178
|
+
return new HttpsError('invalid-argument', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'bad request', _object_spread_props$e(_object_spread$l({
|
|
179
179
|
status: 400,
|
|
180
180
|
code: BAD_REQUEST_ERROR_CODE
|
|
181
181
|
}, serverError), {
|
|
@@ -190,7 +190,7 @@ function _type_of$7(obj) {
|
|
|
190
190
|
*/ function preconditionConflictError(messageOrError) {
|
|
191
191
|
var _serverError_message;
|
|
192
192
|
var serverError = partialServerError(messageOrError);
|
|
193
|
-
return new HttpsError('failed-precondition', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'conflict', _object_spread_props$e(_object_spread$
|
|
193
|
+
return new HttpsError('failed-precondition', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'conflict', _object_spread_props$e(_object_spread$l({
|
|
194
194
|
status: 409,
|
|
195
195
|
code: CONFLICT_ERROR_CODE
|
|
196
196
|
}, serverError), {
|
|
@@ -205,7 +205,7 @@ function _type_of$7(obj) {
|
|
|
205
205
|
*/ function alreadyExistsError(messageOrError) {
|
|
206
206
|
var _serverError_message;
|
|
207
207
|
var serverError = partialServerError(messageOrError);
|
|
208
|
-
return new HttpsError('already-exists', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'already exists', _object_spread_props$e(_object_spread$
|
|
208
|
+
return new HttpsError('already-exists', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'already exists', _object_spread_props$e(_object_spread$l({
|
|
209
209
|
status: 409,
|
|
210
210
|
code: ALREADY_EXISTS_ERROR_CODE
|
|
211
211
|
}, serverError), {
|
|
@@ -220,7 +220,7 @@ function _type_of$7(obj) {
|
|
|
220
220
|
*/ function unavailableError(messageOrError) {
|
|
221
221
|
var _serverError_message;
|
|
222
222
|
var serverError = partialServerError(messageOrError);
|
|
223
|
-
return new HttpsError('unavailable', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'service unavailable', _object_spread_props$e(_object_spread$
|
|
223
|
+
return new HttpsError('unavailable', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'service unavailable', _object_spread_props$e(_object_spread$l({
|
|
224
224
|
status: 503,
|
|
225
225
|
code: UNAVAILABLE_ERROR_CODE
|
|
226
226
|
}, serverError), {
|
|
@@ -235,7 +235,7 @@ function _type_of$7(obj) {
|
|
|
235
235
|
*/ function unavailableOrDeactivatedFunctionError(messageOrError) {
|
|
236
236
|
var _serverError_message;
|
|
237
237
|
var serverError = partialServerError(messageOrError);
|
|
238
|
-
return new HttpsError('unimplemented', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'the requested function is not available or has been deactivated for use', _object_spread_props$e(_object_spread$
|
|
238
|
+
return new HttpsError('unimplemented', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'the requested function is not available or has been deactivated for use', _object_spread_props$e(_object_spread$l({
|
|
239
239
|
status: 501,
|
|
240
240
|
code: UNAVAILABLE_OR_DEACTIVATED_FUNCTION_ERROR_CODE
|
|
241
241
|
}, serverError), {
|
|
@@ -250,7 +250,7 @@ function _type_of$7(obj) {
|
|
|
250
250
|
*/ function internalServerError(messageOrError) {
|
|
251
251
|
var _serverError_message;
|
|
252
252
|
var serverError = partialServerError(messageOrError);
|
|
253
|
-
return new HttpsError('internal', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'internal error', _object_spread_props$e(_object_spread$
|
|
253
|
+
return new HttpsError('internal', (_serverError_message = serverError.message) !== null && _serverError_message !== void 0 ? _serverError_message : 'internal error', _object_spread_props$e(_object_spread$l({
|
|
254
254
|
status: 500,
|
|
255
255
|
code: INTERNAL_SERVER_ERROR_CODE
|
|
256
256
|
}, serverError), {
|
|
@@ -410,7 +410,11 @@ function _type_of$7(obj) {
|
|
|
410
410
|
* Converts a Firebase Admin {@link admin.auth.DecodedIdToken} into a normalized {@link FirebaseAuthToken}.
|
|
411
411
|
*
|
|
412
412
|
* Maps Firebase Admin token fields (snake_case) to the application's token interface (camelCase),
|
|
413
|
-
* including email, phone, and sign-in timestamps.
|
|
413
|
+
* including email, phone, and sign-in timestamps. `auth_time`/`iat` are Unix seconds per the
|
|
414
|
+
* Firebase Admin types, so they are converted to milliseconds before being formatted. Missing
|
|
415
|
+
* or non-finite values map to `undefined` (the {@link FirebaseAuthToken} fields are optional) —
|
|
416
|
+
* synthetic tokens built from OIDC bearer auth do not always carry those claims, and we must
|
|
417
|
+
* not throw `RangeError("Invalid time value")` from this path.
|
|
414
418
|
*
|
|
415
419
|
* @param token - The decoded ID token from Firebase Admin Auth.
|
|
416
420
|
* @returns A normalized {@link FirebaseAuthToken} with camelCase fields.
|
|
@@ -425,10 +429,20 @@ function _type_of$7(obj) {
|
|
|
425
429
|
email: token.email,
|
|
426
430
|
emailVerified: token.email_verified,
|
|
427
431
|
phoneNumber: token.phone_number,
|
|
428
|
-
lastSignInTime:
|
|
429
|
-
lastRefreshTime:
|
|
432
|
+
lastSignInTime: toIsoStringFromUnixSeconds(token.auth_time),
|
|
433
|
+
lastRefreshTime: toIsoStringFromUnixSeconds(token.iat)
|
|
430
434
|
};
|
|
431
435
|
}
|
|
436
|
+
function toIsoStringFromUnixSeconds(value) {
|
|
437
|
+
var result;
|
|
438
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
439
|
+
var date = new Date(value * 1000);
|
|
440
|
+
if (Number.isFinite(date.getTime())) {
|
|
441
|
+
result = date.toISOString();
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
return result;
|
|
445
|
+
}
|
|
432
446
|
|
|
433
447
|
function asyncGeneratorStep$h(gen, resolve, reject, _next, _throw, key, arg) {
|
|
434
448
|
try {
|
|
@@ -973,7 +987,7 @@ function _non_iterable_rest$4() {
|
|
|
973
987
|
function _non_iterable_spread$a() {
|
|
974
988
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
975
989
|
}
|
|
976
|
-
function _object_spread$
|
|
990
|
+
function _object_spread$k(target) {
|
|
977
991
|
for(var i = 1; i < arguments.length; i++){
|
|
978
992
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
979
993
|
var ownKeys = Object.keys(source);
|
|
@@ -1405,7 +1419,7 @@ function _ts_generator$g(thisArg, body) {
|
|
|
1405
1419
|
return _async_to_generator$g(function() {
|
|
1406
1420
|
var claims;
|
|
1407
1421
|
return _ts_generator$g(this, function(_state) {
|
|
1408
|
-
claims = _object_spread$
|
|
1422
|
+
claims = _object_spread$k({}, claimsToRetain, this._claimsForRolesChange(_to_consumable_array$a(roles)));
|
|
1409
1423
|
return [
|
|
1410
1424
|
2,
|
|
1411
1425
|
this.setClaims(claims)
|
|
@@ -1449,7 +1463,7 @@ function _ts_generator$g(thisArg, body) {
|
|
|
1449
1463
|
];
|
|
1450
1464
|
case 1:
|
|
1451
1465
|
currentClaims = _state.sent();
|
|
1452
|
-
newClaims = _object_spread$
|
|
1466
|
+
newClaims = _object_spread$k({}, currentClaims, filterUndefinedValues(claims, false));
|
|
1453
1467
|
newClaims = filterNullAndUndefinedValues(newClaims);
|
|
1454
1468
|
return [
|
|
1455
1469
|
2,
|
|
@@ -3218,7 +3232,7 @@ function _iterable_to_array$9(iter) {
|
|
|
3218
3232
|
function _non_iterable_spread$9() {
|
|
3219
3233
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
3220
3234
|
}
|
|
3221
|
-
function _object_spread$
|
|
3235
|
+
function _object_spread$j(target) {
|
|
3222
3236
|
for(var i = 1; i < arguments.length; i++){
|
|
3223
3237
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
3224
3238
|
var ownKeys = Object.keys(source);
|
|
@@ -3275,7 +3289,7 @@ function _unsupported_iterable_to_array$d(o, minLen) {
|
|
|
3275
3289
|
}
|
|
3276
3290
|
return result;
|
|
3277
3291
|
}
|
|
3278
|
-
var updateData = _object_spread$
|
|
3292
|
+
var updateData = _object_spread$j({}, createUpdatesWithArrayFunction(union, FieldValue.arrayUnion), createUpdatesWithArrayFunction(remove, FieldValue.arrayRemove));
|
|
3279
3293
|
return updateData;
|
|
3280
3294
|
}
|
|
3281
3295
|
|
|
@@ -4125,7 +4139,7 @@ function _iterable_to_array$8(iter) {
|
|
|
4125
4139
|
function _non_iterable_spread$8() {
|
|
4126
4140
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
4127
4141
|
}
|
|
4128
|
-
function _object_spread$
|
|
4142
|
+
function _object_spread$i(target) {
|
|
4129
4143
|
for(var i = 1; i < arguments.length; i++){
|
|
4130
4144
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
4131
4145
|
var ownKeys = Object.keys(source);
|
|
@@ -4238,7 +4252,7 @@ var _obj;
|
|
|
4238
4252
|
* const queryDriver = googleCloudFirestoreQueryDriver();
|
|
4239
4253
|
* ```
|
|
4240
4254
|
*/ function googleCloudFirestoreQueryDriver() {
|
|
4241
|
-
return _object_spread_props$d(_object_spread$
|
|
4255
|
+
return _object_spread_props$d(_object_spread$i({}, firestoreClientQueryConstraintFunctionsDriver()), {
|
|
4242
4256
|
countDocs: function countDocs(query) {
|
|
4243
4257
|
return query.count().get().then(function(x) {
|
|
4244
4258
|
return x.data().count;
|
|
@@ -5444,7 +5458,7 @@ function _define_property$q(obj, key, value) {
|
|
|
5444
5458
|
}
|
|
5445
5459
|
return obj;
|
|
5446
5460
|
}
|
|
5447
|
-
function _object_spread$
|
|
5461
|
+
function _object_spread$h(target) {
|
|
5448
5462
|
for(var i = 1; i < arguments.length; i++){
|
|
5449
5463
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
5450
5464
|
var ownKeys = Object.keys(source);
|
|
@@ -5622,7 +5636,7 @@ function _object_spread_props$c(target, source) {
|
|
|
5622
5636
|
modelType: modelType,
|
|
5623
5637
|
specifier: specifier
|
|
5624
5638
|
});
|
|
5625
|
-
return crudFn(_object_spread_props$c(_object_spread$
|
|
5639
|
+
return crudFn(_object_spread_props$c(_object_spread$h({}, request), {
|
|
5626
5640
|
specifier: specifier,
|
|
5627
5641
|
data: request.data.data
|
|
5628
5642
|
}));
|
|
@@ -6276,7 +6290,7 @@ function _inherits$2(subClass, superClass) {
|
|
|
6276
6290
|
});
|
|
6277
6291
|
if (superClass) _set_prototype_of$2(subClass, superClass);
|
|
6278
6292
|
}
|
|
6279
|
-
function _object_spread$
|
|
6293
|
+
function _object_spread$g(target) {
|
|
6280
6294
|
for(var i = 1; i < arguments.length; i++){
|
|
6281
6295
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
6282
6296
|
var ownKeys = Object.keys(source);
|
|
@@ -6357,7 +6371,7 @@ function _is_native_reflect_construct$2() {
|
|
|
6357
6371
|
{
|
|
6358
6372
|
key: "handleOnCallAnalyticsEvent",
|
|
6359
6373
|
value: function handleOnCallAnalyticsEvent(event) {
|
|
6360
|
-
var properties = _object_spread$
|
|
6374
|
+
var properties = _object_spread$g(_object_spread_props$b(_object_spread$g({}, asAnalyticsEventData(event.properties)), {
|
|
6361
6375
|
call: event.call,
|
|
6362
6376
|
modelType: event.modelType,
|
|
6363
6377
|
lifecycle: event.lifecycle
|
|
@@ -6487,7 +6501,7 @@ function _define_property$o(obj, key, value) {
|
|
|
6487
6501
|
}
|
|
6488
6502
|
return obj;
|
|
6489
6503
|
}
|
|
6490
|
-
function _object_spread$
|
|
6504
|
+
function _object_spread$f(target) {
|
|
6491
6505
|
for(var i = 1; i < arguments.length; i++){
|
|
6492
6506
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
6493
6507
|
var ownKeys = Object.keys(source);
|
|
@@ -6568,7 +6582,7 @@ FirebaseServerAuthModule = __decorate([
|
|
|
6568
6582
|
*/ function provideFirebaseServerAuthService(provider) {
|
|
6569
6583
|
var _provider_inject;
|
|
6570
6584
|
return [
|
|
6571
|
-
_object_spread_props$a(_object_spread$
|
|
6585
|
+
_object_spread_props$a(_object_spread$f({}, provider), {
|
|
6572
6586
|
inject: (_provider_inject = provider.inject) !== null && _provider_inject !== void 0 ? _provider_inject : [
|
|
6573
6587
|
FIREBASE_AUTH_TOKEN
|
|
6574
6588
|
]
|
|
@@ -6769,7 +6783,7 @@ function _define_property$n(obj, key, value) {
|
|
|
6769
6783
|
}
|
|
6770
6784
|
return obj;
|
|
6771
6785
|
}
|
|
6772
|
-
function _object_spread$
|
|
6786
|
+
function _object_spread$e(target) {
|
|
6773
6787
|
for(var i = 1; i < arguments.length; i++){
|
|
6774
6788
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
6775
6789
|
var ownKeys = Object.keys(source);
|
|
@@ -6814,7 +6828,7 @@ function _object_spread_props$9(target, source) {
|
|
|
6814
6828
|
* @param request - The base request to augment (must include the nestApplication reference).
|
|
6815
6829
|
* @returns A new object combining the request properties with the nest context.
|
|
6816
6830
|
*/ function injectNestIntoRequest(nest, request) {
|
|
6817
|
-
return _object_spread_props$9(_object_spread$
|
|
6831
|
+
return _object_spread_props$9(_object_spread$e({}, request), {
|
|
6818
6832
|
nest: nest
|
|
6819
6833
|
});
|
|
6820
6834
|
}
|
|
@@ -6828,7 +6842,7 @@ function _object_spread_props$9(target, source) {
|
|
|
6828
6842
|
* @param request - The base request to augment.
|
|
6829
6843
|
* @returns A new object combining the request properties with the application context.
|
|
6830
6844
|
*/ function injectNestApplicationContextIntoRequest(nestContext, request) {
|
|
6831
|
-
return _object_spread_props$9(_object_spread$
|
|
6845
|
+
return _object_spread_props$9(_object_spread$e({}, request), {
|
|
6832
6846
|
nestApplication: nestContext
|
|
6833
6847
|
});
|
|
6834
6848
|
}
|
|
@@ -6893,6 +6907,21 @@ function _define_property$m(obj, key, value) {
|
|
|
6893
6907
|
}
|
|
6894
6908
|
return obj;
|
|
6895
6909
|
}
|
|
6910
|
+
function _object_spread$d(target) {
|
|
6911
|
+
for(var i = 1; i < arguments.length; i++){
|
|
6912
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
6913
|
+
var ownKeys = Object.keys(source);
|
|
6914
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
6915
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
6916
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
6917
|
+
}));
|
|
6918
|
+
}
|
|
6919
|
+
ownKeys.forEach(function(key) {
|
|
6920
|
+
_define_property$m(target, key, source[key]);
|
|
6921
|
+
});
|
|
6922
|
+
}
|
|
6923
|
+
return target;
|
|
6924
|
+
}
|
|
6896
6925
|
function _ts_generator$a(thisArg, body) {
|
|
6897
6926
|
var f, y, t, _ = {
|
|
6898
6927
|
label: 0,
|
|
@@ -7051,14 +7080,17 @@ function _ts_generator$a(thisArg, body) {
|
|
|
7051
7080
|
* @returns The handler's return value.
|
|
7052
7081
|
*/ function dispatch(params, auth, rawRequest) {
|
|
7053
7082
|
return _async_to_generator$a(function() {
|
|
7054
|
-
var _auth_oidcValidatedToken, callableRequest, appRequest, contextRequest;
|
|
7083
|
+
var _auth_token, _auth_oidcValidatedToken, callableRequest, appRequest, contextRequest;
|
|
7055
7084
|
return _ts_generator$a(this, function(_state) {
|
|
7056
|
-
// Build a synthetic CallableRequest that the dispatch chain expects
|
|
7085
|
+
// Build a synthetic CallableRequest that the dispatch chain expects. Layer the
|
|
7086
|
+
// OIDC-validated claim subset over the base token so standard JWT claims
|
|
7087
|
+
// (`iat`, `auth_time`, `email`, …) survive — the callModel chain and any
|
|
7088
|
+
// `authContextInfo` consumer downstream rely on them being present.
|
|
7057
7089
|
callableRequest = {
|
|
7058
7090
|
data: params,
|
|
7059
7091
|
auth: auth ? {
|
|
7060
7092
|
uid: auth.uid,
|
|
7061
|
-
token: (_auth_oidcValidatedToken = auth.oidcValidatedToken) !== null && _auth_oidcValidatedToken !== void 0 ? _auth_oidcValidatedToken : {}
|
|
7093
|
+
token: _object_spread$d({}, (_auth_token = auth.token) !== null && _auth_token !== void 0 ? _auth_token : {}, (_auth_oidcValidatedToken = auth.oidcValidatedToken) !== null && _auth_oidcValidatedToken !== void 0 ? _auth_oidcValidatedToken : {})
|
|
7062
7094
|
} : undefined,
|
|
7063
7095
|
rawRequest: rawRequest,
|
|
7064
7096
|
acceptsStreaming: false
|
|
@@ -7154,6 +7186,21 @@ function _define_property$l(obj, key, value) {
|
|
|
7154
7186
|
}
|
|
7155
7187
|
return obj;
|
|
7156
7188
|
}
|
|
7189
|
+
function _object_spread$c(target) {
|
|
7190
|
+
for(var i = 1; i < arguments.length; i++){
|
|
7191
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
7192
|
+
var ownKeys = Object.keys(source);
|
|
7193
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
7194
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
7195
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
7196
|
+
}));
|
|
7197
|
+
}
|
|
7198
|
+
ownKeys.forEach(function(key) {
|
|
7199
|
+
_define_property$l(target, key, source[key]);
|
|
7200
|
+
});
|
|
7201
|
+
}
|
|
7202
|
+
return target;
|
|
7203
|
+
}
|
|
7157
7204
|
function _ts_generator$9(thisArg, body) {
|
|
7158
7205
|
var f, y, t, _ = {
|
|
7159
7206
|
label: 0,
|
|
@@ -7408,17 +7455,26 @@ function _ts_generator$9(thisArg, body) {
|
|
|
7408
7455
|
* Builds an {@link AuthDataRef} compatible with `useModel()` from the HTTP request auth.
|
|
7409
7456
|
*
|
|
7410
7457
|
* Uses the same synthetic auth pattern as {@link ModelApiDispatchService.dispatch}.
|
|
7458
|
+
* The OIDC-validated claim subset is layered over the base token so the synthetic
|
|
7459
|
+
* `auth.token` keeps standard JWT claims (`iat`, `auth_time`, `email`, …) that
|
|
7460
|
+
* downstream consumers like `authContextInfo` rely on.
|
|
7411
7461
|
*
|
|
7412
7462
|
* @param auth - The Firebase server auth data from the HTTP request, or undefined for unauthenticated requests.
|
|
7413
7463
|
* @returns An object containing a synthetic {@link AuthData} for use with `useModel()`, or undefined auth.
|
|
7414
7464
|
*/ key: "_makeAuthRef",
|
|
7415
7465
|
value: function _makeAuthRef(auth) {
|
|
7416
|
-
var
|
|
7417
|
-
|
|
7418
|
-
|
|
7466
|
+
var synthetic;
|
|
7467
|
+
if (auth) {
|
|
7468
|
+
var _auth_token, _auth_oidcValidatedToken;
|
|
7469
|
+
var baseToken = (_auth_token = auth.token) !== null && _auth_token !== void 0 ? _auth_token : {};
|
|
7470
|
+
var oidcToken = (_auth_oidcValidatedToken = auth.oidcValidatedToken) !== null && _auth_oidcValidatedToken !== void 0 ? _auth_oidcValidatedToken : {};
|
|
7471
|
+
synthetic = {
|
|
7419
7472
|
uid: auth.uid,
|
|
7420
|
-
token: (
|
|
7421
|
-
}
|
|
7473
|
+
token: _object_spread$c({}, baseToken, oidcToken)
|
|
7474
|
+
};
|
|
7475
|
+
}
|
|
7476
|
+
return {
|
|
7477
|
+
auth: synthetic
|
|
7422
7478
|
};
|
|
7423
7479
|
}
|
|
7424
7480
|
}
|
package/mailgun/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/firebase-server/mailgun",
|
|
3
|
-
"version": "13.11.
|
|
3
|
+
"version": "13.11.10",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@dereekb/analytics": "13.11.
|
|
6
|
-
"@dereekb/firebase": "13.11.
|
|
7
|
-
"@dereekb/firebase-server": "13.11.
|
|
8
|
-
"@dereekb/date": "13.11.
|
|
9
|
-
"@dereekb/nestjs": "13.11.
|
|
10
|
-
"@dereekb/model": "13.11.
|
|
11
|
-
"@dereekb/rxjs": "13.11.
|
|
12
|
-
"@dereekb/util": "13.11.
|
|
5
|
+
"@dereekb/analytics": "13.11.10",
|
|
6
|
+
"@dereekb/firebase": "13.11.10",
|
|
7
|
+
"@dereekb/firebase-server": "13.11.10",
|
|
8
|
+
"@dereekb/date": "13.11.10",
|
|
9
|
+
"@dereekb/nestjs": "13.11.10",
|
|
10
|
+
"@dereekb/model": "13.11.10",
|
|
11
|
+
"@dereekb/rxjs": "13.11.10",
|
|
12
|
+
"@dereekb/util": "13.11.10"
|
|
13
13
|
},
|
|
14
14
|
"exports": {
|
|
15
15
|
"./package.json": "./package.json",
|
package/model/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/firebase-server/model",
|
|
3
|
-
"version": "13.11.
|
|
3
|
+
"version": "13.11.10",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@dereekb/analytics": "13.11.
|
|
6
|
-
"@dereekb/date": "13.11.
|
|
7
|
-
"@dereekb/firebase": "13.11.
|
|
8
|
-
"@dereekb/firebase-server": "13.11.
|
|
9
|
-
"@dereekb/model": "13.11.
|
|
10
|
-
"@dereekb/nestjs": "13.11.
|
|
11
|
-
"@dereekb/rxjs": "13.11.
|
|
12
|
-
"@dereekb/util": "13.11.
|
|
5
|
+
"@dereekb/analytics": "13.11.10",
|
|
6
|
+
"@dereekb/date": "13.11.10",
|
|
7
|
+
"@dereekb/firebase": "13.11.10",
|
|
8
|
+
"@dereekb/firebase-server": "13.11.10",
|
|
9
|
+
"@dereekb/model": "13.11.10",
|
|
10
|
+
"@dereekb/nestjs": "13.11.10",
|
|
11
|
+
"@dereekb/rxjs": "13.11.10",
|
|
12
|
+
"@dereekb/util": "13.11.10",
|
|
13
13
|
"@nestjs/common": "^11.1.19",
|
|
14
14
|
"@nestjs/config": "^4.0.4",
|
|
15
15
|
"archiver": "^7.0.1",
|
package/oidc/index.cjs.js
CHANGED
|
@@ -5283,7 +5283,7 @@ function _ts_generator$2(thisArg, body) {
|
|
|
5283
5283
|
* @throws {HttpException} 400 when the consent interaction cannot be completed.
|
|
5284
5284
|
*/ function postConsent(uid, body, res) {
|
|
5285
5285
|
return _async_to_generator$2(function() {
|
|
5286
|
-
var _ref, _ref1, _prompt_details_missingOIDCScope, _prompt_details_missingOIDCClaims, _prompt_details_missingResourceScopes, redirectTo, interaction, prompt, params, session, clientId, requestedRawTtl, clientPayload, clientMaxSessionTtl, expiresInSeconds, grant, missingOIDCScope, _resolveEffectiveSubset, granted, rejected, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, value, missingOIDCClaims, _resolveEffectiveSubset1, granted1, rejected1, missingResourceScopes, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _step_value, indicator, scopes, _body_grantedResourceScopes, requestedSubset, _resolveEffectiveSubset2, granted2, rejected2, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, value1, grantId, redirectTo1, err;
|
|
5286
|
+
var _ref, _ref1, _prompt_details_missingOIDCScope, _prompt_details_missingOIDCClaims, _prompt_details_missingResourceScopes, redirectTo, interaction, prompt, params, session, clientId, requestedRawTtl, clientPayload, clientMaxSessionTtl, expiresInSeconds, grant, encounteredOIDCScopes, missingOIDCScope, _resolveEffectiveSubset, granted, rejected, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, value, encounteredOIDCClaims, missingOIDCClaims, _resolveEffectiveSubset1, granted1, rejected1, missingResourceScopes, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _step_value, indicator, scopes, _body_grantedResourceScopes, requestedSubset, encounteredResourceScopes, _resolveEffectiveSubset2, granted2, rejected2, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, value1, grantId, redirectTo1, err;
|
|
5287
5287
|
return _ts_generator$2(this, function(_state) {
|
|
5288
5288
|
switch(_state.label){
|
|
5289
5289
|
case 0:
|
|
@@ -5353,9 +5353,15 @@ function _ts_generator$2(thisArg, body) {
|
|
|
5353
5353
|
];
|
|
5354
5354
|
case 7:
|
|
5355
5355
|
grant = _state.sent();
|
|
5356
|
+
// Encountered = scopes/claims already granted (or rejected) on the existing Grant. oidc-provider
|
|
5357
|
+
// excludes these from `missingOIDCScope` etc. when the consent prompt is re-shown via `prompt=consent`,
|
|
5358
|
+
// but the consent UI sources its checkbox list from the auth URL's `scope=` param (the full request set)
|
|
5359
|
+
// and re-submits them all. We accept already-encountered values as silent no-ops so a re-consent on a
|
|
5360
|
+
// client the user has previously authorized doesn't fail validation.
|
|
5361
|
+
encounteredOIDCScopes = grant.getOIDCScopeEncountered().split(' ').filter(Boolean);
|
|
5356
5362
|
missingOIDCScope = (_prompt_details_missingOIDCScope = prompt.details.missingOIDCScope) !== null && _prompt_details_missingOIDCScope !== void 0 ? _prompt_details_missingOIDCScope : [];
|
|
5357
5363
|
if (missingOIDCScope.length > 0) {
|
|
5358
|
-
_resolveEffectiveSubset = resolveEffectiveSubset(missingOIDCScope, body.grantedOIDCScopes, ALWAYS_GRANTED_OIDC_SCOPES), granted = _resolveEffectiveSubset.granted, rejected = _resolveEffectiveSubset.rejected;
|
|
5364
|
+
_resolveEffectiveSubset = resolveEffectiveSubset(missingOIDCScope, body.grantedOIDCScopes, ALWAYS_GRANTED_OIDC_SCOPES, encounteredOIDCScopes), granted = _resolveEffectiveSubset.granted, rejected = _resolveEffectiveSubset.rejected;
|
|
5359
5365
|
if (granted.length > 0) {
|
|
5360
5366
|
grant.addOIDCScope(granted.join(' '));
|
|
5361
5367
|
}
|
|
@@ -5380,9 +5386,10 @@ function _ts_generator$2(thisArg, body) {
|
|
|
5380
5386
|
}
|
|
5381
5387
|
}
|
|
5382
5388
|
}
|
|
5389
|
+
encounteredOIDCClaims = grant.getOIDCClaimsEncountered();
|
|
5383
5390
|
missingOIDCClaims = (_prompt_details_missingOIDCClaims = prompt.details.missingOIDCClaims) !== null && _prompt_details_missingOIDCClaims !== void 0 ? _prompt_details_missingOIDCClaims : [];
|
|
5384
5391
|
if (missingOIDCClaims.length > 0) {
|
|
5385
|
-
_resolveEffectiveSubset1 = resolveEffectiveSubset(missingOIDCClaims, body.grantedOIDCClaims), granted1 = _resolveEffectiveSubset1.granted, rejected1 = _resolveEffectiveSubset1.rejected;
|
|
5392
|
+
_resolveEffectiveSubset1 = resolveEffectiveSubset(missingOIDCClaims, body.grantedOIDCClaims, [], encounteredOIDCClaims), granted1 = _resolveEffectiveSubset1.granted, rejected1 = _resolveEffectiveSubset1.rejected;
|
|
5386
5393
|
if (granted1.length > 0) {
|
|
5387
5394
|
grant.addOIDCClaims(granted1);
|
|
5388
5395
|
}
|
|
@@ -5397,7 +5404,8 @@ function _ts_generator$2(thisArg, body) {
|
|
|
5397
5404
|
_step_value = _sliced_to_array(_step1.value, 2), indicator = _step_value[0], scopes = _step_value[1];
|
|
5398
5405
|
;
|
|
5399
5406
|
requestedSubset = (_body_grantedResourceScopes = body.grantedResourceScopes) === null || _body_grantedResourceScopes === void 0 ? void 0 : _body_grantedResourceScopes[indicator];
|
|
5400
|
-
|
|
5407
|
+
encounteredResourceScopes = grant.getResourceScopeEncountered(indicator).split(' ').filter(Boolean);
|
|
5408
|
+
_resolveEffectiveSubset2 = resolveEffectiveSubset(scopes, requestedSubset, [], encounteredResourceScopes), granted2 = _resolveEffectiveSubset2.granted, rejected2 = _resolveEffectiveSubset2.rejected;
|
|
5401
5409
|
if (granted2.length > 0) {
|
|
5402
5410
|
grant.addResourceScope(indicator, granted2.join(' '));
|
|
5403
5411
|
}
|
|
@@ -5551,24 +5559,29 @@ exports.OidcInteractionController = __decorate([
|
|
|
5551
5559
|
], exports.OidcInteractionController);
|
|
5552
5560
|
/**
|
|
5553
5561
|
* Resolves the effective set to grant — and the complementary set to
|
|
5554
|
-
* reject — from a missing set, an optional caller-provided subset,
|
|
5555
|
-
*
|
|
5562
|
+
* reject — from a missing set, an optional caller-provided subset, an
|
|
5563
|
+
* optional list of always-granted entries, and an optional list of
|
|
5564
|
+
* already-encountered entries (granted or rejected on the existing Grant).
|
|
5556
5565
|
*
|
|
5557
|
-
* Throws `400 BAD_REQUEST` if the requested subset contains
|
|
5558
|
-
*
|
|
5566
|
+
* Throws `400 BAD_REQUEST` if the requested subset contains an entry that
|
|
5567
|
+
* is in neither the missing set nor the already-encountered set (no
|
|
5568
|
+
* privilege escalation).
|
|
5559
5569
|
*
|
|
5560
5570
|
* - When `requestedSubset` is undefined → grants everything in `missing` (back-compat); rejects nothing.
|
|
5561
|
-
* - When `requestedSubset` is provided → grants
|
|
5562
|
-
* oidc-provider does not re-prompt for them.
|
|
5571
|
+
* - When `requestedSubset` is provided → grants the intersection with `missing`; rejects every other missing
|
|
5572
|
+
* entry so oidc-provider does not re-prompt for them. Values in `alreadyEncountered` pass validation but
|
|
5573
|
+
* are not re-applied to the grant (no-op).
|
|
5563
5574
|
* - Always-granted entries are union'd into `granted` (clamped to `missing`).
|
|
5564
5575
|
*
|
|
5565
5576
|
* @param missing - Entries the OIDC prompt indicated were missing for this consent.
|
|
5566
|
-
* @param requestedSubset - Optional subset the caller wants to grant; must be
|
|
5577
|
+
* @param requestedSubset - Optional subset the caller wants to grant; each value must be in `missing` or `alreadyEncountered`.
|
|
5567
5578
|
* @param alwaysGranted - Entries that must be granted whenever they appear in `missing`, regardless of `requestedSubset`.
|
|
5579
|
+
* @param alreadyEncountered - Entries the existing Grant has previously granted or rejected. Tolerated as no-ops on re-consent.
|
|
5568
5580
|
* @returns `granted` to add to the grant and `rejected` to record on the grant.
|
|
5569
5581
|
*/ function resolveEffectiveSubset(missing, requestedSubset) {
|
|
5570
|
-
var alwaysGranted = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [];
|
|
5582
|
+
var alwaysGranted = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [], alreadyEncountered = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : [];
|
|
5571
5583
|
var missingSet = new Set(missing);
|
|
5584
|
+
var encounteredSet = new Set(alreadyEncountered);
|
|
5572
5585
|
var baseSelection;
|
|
5573
5586
|
if (requestedSubset === undefined) {
|
|
5574
5587
|
baseSelection = missing;
|
|
@@ -5577,7 +5590,7 @@ exports.OidcInteractionController = __decorate([
|
|
|
5577
5590
|
try {
|
|
5578
5591
|
for(var _iterator = requestedSubset[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
5579
5592
|
var value = _step.value;
|
|
5580
|
-
if (!missingSet.has(value)) {
|
|
5593
|
+
if (!missingSet.has(value) && !encounteredSet.has(value)) {
|
|
5581
5594
|
throw new common.HttpException('Granted value "'.concat(value, '" is not in the requested set.'), common.HttpStatus.BAD_REQUEST);
|
|
5582
5595
|
}
|
|
5583
5596
|
}
|
|
@@ -5595,7 +5608,11 @@ exports.OidcInteractionController = __decorate([
|
|
|
5595
5608
|
}
|
|
5596
5609
|
}
|
|
5597
5610
|
}
|
|
5598
|
-
|
|
5611
|
+
// Filter to `missing` only — already-encountered values pass validation but
|
|
5612
|
+
// do not need to be re-applied (oidc-provider's Grant tracks them already).
|
|
5613
|
+
baseSelection = requestedSubset.filter(function(value) {
|
|
5614
|
+
return missingSet.has(value);
|
|
5615
|
+
});
|
|
5599
5616
|
}
|
|
5600
5617
|
var grantedSet = new Set(baseSelection);
|
|
5601
5618
|
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
@@ -6582,6 +6599,7 @@ exports.oidcModelServerActions = oidcModelServerActions;
|
|
|
6582
6599
|
exports.oidcModelServerActionsFactory = oidcModelServerActionsFactory;
|
|
6583
6600
|
exports.oidcModuleConfigFactory = oidcModuleConfigFactory;
|
|
6584
6601
|
exports.oidcModuleMetadata = oidcModuleMetadata;
|
|
6602
|
+
exports.resolveEffectiveSubset = resolveEffectiveSubset;
|
|
6585
6603
|
exports.rotateOidcClientSecretFactory = rotateOidcClientSecretFactory;
|
|
6586
6604
|
exports.rotatedJwksKeysQuery = rotatedJwksKeysQuery;
|
|
6587
6605
|
exports.updateOidcClientFactory = updateOidcClientFactory;
|
package/oidc/index.esm.js
CHANGED
|
@@ -5281,7 +5281,7 @@ function _ts_generator$2(thisArg, body) {
|
|
|
5281
5281
|
* @throws {HttpException} 400 when the consent interaction cannot be completed.
|
|
5282
5282
|
*/ function postConsent(uid, body, res) {
|
|
5283
5283
|
return _async_to_generator$2(function() {
|
|
5284
|
-
var _ref, _ref1, _prompt_details_missingOIDCScope, _prompt_details_missingOIDCClaims, _prompt_details_missingResourceScopes, redirectTo, interaction, prompt, params, session, clientId, requestedRawTtl, clientPayload, clientMaxSessionTtl, expiresInSeconds, grant, missingOIDCScope, _resolveEffectiveSubset, granted, rejected, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, value, missingOIDCClaims, _resolveEffectiveSubset1, granted1, rejected1, missingResourceScopes, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _step_value, indicator, scopes, _body_grantedResourceScopes, requestedSubset, _resolveEffectiveSubset2, granted2, rejected2, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, value1, grantId, redirectTo1, err;
|
|
5284
|
+
var _ref, _ref1, _prompt_details_missingOIDCScope, _prompt_details_missingOIDCClaims, _prompt_details_missingResourceScopes, redirectTo, interaction, prompt, params, session, clientId, requestedRawTtl, clientPayload, clientMaxSessionTtl, expiresInSeconds, grant, encounteredOIDCScopes, missingOIDCScope, _resolveEffectiveSubset, granted, rejected, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, value, encounteredOIDCClaims, missingOIDCClaims, _resolveEffectiveSubset1, granted1, rejected1, missingResourceScopes, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _step_value, indicator, scopes, _body_grantedResourceScopes, requestedSubset, encounteredResourceScopes, _resolveEffectiveSubset2, granted2, rejected2, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, value1, grantId, redirectTo1, err;
|
|
5285
5285
|
return _ts_generator$2(this, function(_state) {
|
|
5286
5286
|
switch(_state.label){
|
|
5287
5287
|
case 0:
|
|
@@ -5351,9 +5351,15 @@ function _ts_generator$2(thisArg, body) {
|
|
|
5351
5351
|
];
|
|
5352
5352
|
case 7:
|
|
5353
5353
|
grant = _state.sent();
|
|
5354
|
+
// Encountered = scopes/claims already granted (or rejected) on the existing Grant. oidc-provider
|
|
5355
|
+
// excludes these from `missingOIDCScope` etc. when the consent prompt is re-shown via `prompt=consent`,
|
|
5356
|
+
// but the consent UI sources its checkbox list from the auth URL's `scope=` param (the full request set)
|
|
5357
|
+
// and re-submits them all. We accept already-encountered values as silent no-ops so a re-consent on a
|
|
5358
|
+
// client the user has previously authorized doesn't fail validation.
|
|
5359
|
+
encounteredOIDCScopes = grant.getOIDCScopeEncountered().split(' ').filter(Boolean);
|
|
5354
5360
|
missingOIDCScope = (_prompt_details_missingOIDCScope = prompt.details.missingOIDCScope) !== null && _prompt_details_missingOIDCScope !== void 0 ? _prompt_details_missingOIDCScope : [];
|
|
5355
5361
|
if (missingOIDCScope.length > 0) {
|
|
5356
|
-
_resolveEffectiveSubset = resolveEffectiveSubset(missingOIDCScope, body.grantedOIDCScopes, ALWAYS_GRANTED_OIDC_SCOPES), granted = _resolveEffectiveSubset.granted, rejected = _resolveEffectiveSubset.rejected;
|
|
5362
|
+
_resolveEffectiveSubset = resolveEffectiveSubset(missingOIDCScope, body.grantedOIDCScopes, ALWAYS_GRANTED_OIDC_SCOPES, encounteredOIDCScopes), granted = _resolveEffectiveSubset.granted, rejected = _resolveEffectiveSubset.rejected;
|
|
5357
5363
|
if (granted.length > 0) {
|
|
5358
5364
|
grant.addOIDCScope(granted.join(' '));
|
|
5359
5365
|
}
|
|
@@ -5378,9 +5384,10 @@ function _ts_generator$2(thisArg, body) {
|
|
|
5378
5384
|
}
|
|
5379
5385
|
}
|
|
5380
5386
|
}
|
|
5387
|
+
encounteredOIDCClaims = grant.getOIDCClaimsEncountered();
|
|
5381
5388
|
missingOIDCClaims = (_prompt_details_missingOIDCClaims = prompt.details.missingOIDCClaims) !== null && _prompt_details_missingOIDCClaims !== void 0 ? _prompt_details_missingOIDCClaims : [];
|
|
5382
5389
|
if (missingOIDCClaims.length > 0) {
|
|
5383
|
-
_resolveEffectiveSubset1 = resolveEffectiveSubset(missingOIDCClaims, body.grantedOIDCClaims), granted1 = _resolveEffectiveSubset1.granted, rejected1 = _resolveEffectiveSubset1.rejected;
|
|
5390
|
+
_resolveEffectiveSubset1 = resolveEffectiveSubset(missingOIDCClaims, body.grantedOIDCClaims, [], encounteredOIDCClaims), granted1 = _resolveEffectiveSubset1.granted, rejected1 = _resolveEffectiveSubset1.rejected;
|
|
5384
5391
|
if (granted1.length > 0) {
|
|
5385
5392
|
grant.addOIDCClaims(granted1);
|
|
5386
5393
|
}
|
|
@@ -5395,7 +5402,8 @@ function _ts_generator$2(thisArg, body) {
|
|
|
5395
5402
|
_step_value = _sliced_to_array(_step1.value, 2), indicator = _step_value[0], scopes = _step_value[1];
|
|
5396
5403
|
;
|
|
5397
5404
|
requestedSubset = (_body_grantedResourceScopes = body.grantedResourceScopes) === null || _body_grantedResourceScopes === void 0 ? void 0 : _body_grantedResourceScopes[indicator];
|
|
5398
|
-
|
|
5405
|
+
encounteredResourceScopes = grant.getResourceScopeEncountered(indicator).split(' ').filter(Boolean);
|
|
5406
|
+
_resolveEffectiveSubset2 = resolveEffectiveSubset(scopes, requestedSubset, [], encounteredResourceScopes), granted2 = _resolveEffectiveSubset2.granted, rejected2 = _resolveEffectiveSubset2.rejected;
|
|
5399
5407
|
if (granted2.length > 0) {
|
|
5400
5408
|
grant.addResourceScope(indicator, granted2.join(' '));
|
|
5401
5409
|
}
|
|
@@ -5549,24 +5557,29 @@ OidcInteractionController = __decorate([
|
|
|
5549
5557
|
], OidcInteractionController);
|
|
5550
5558
|
/**
|
|
5551
5559
|
* Resolves the effective set to grant — and the complementary set to
|
|
5552
|
-
* reject — from a missing set, an optional caller-provided subset,
|
|
5553
|
-
*
|
|
5560
|
+
* reject — from a missing set, an optional caller-provided subset, an
|
|
5561
|
+
* optional list of always-granted entries, and an optional list of
|
|
5562
|
+
* already-encountered entries (granted or rejected on the existing Grant).
|
|
5554
5563
|
*
|
|
5555
|
-
* Throws `400 BAD_REQUEST` if the requested subset contains
|
|
5556
|
-
*
|
|
5564
|
+
* Throws `400 BAD_REQUEST` if the requested subset contains an entry that
|
|
5565
|
+
* is in neither the missing set nor the already-encountered set (no
|
|
5566
|
+
* privilege escalation).
|
|
5557
5567
|
*
|
|
5558
5568
|
* - When `requestedSubset` is undefined → grants everything in `missing` (back-compat); rejects nothing.
|
|
5559
|
-
* - When `requestedSubset` is provided → grants
|
|
5560
|
-
* oidc-provider does not re-prompt for them.
|
|
5569
|
+
* - When `requestedSubset` is provided → grants the intersection with `missing`; rejects every other missing
|
|
5570
|
+
* entry so oidc-provider does not re-prompt for them. Values in `alreadyEncountered` pass validation but
|
|
5571
|
+
* are not re-applied to the grant (no-op).
|
|
5561
5572
|
* - Always-granted entries are union'd into `granted` (clamped to `missing`).
|
|
5562
5573
|
*
|
|
5563
5574
|
* @param missing - Entries the OIDC prompt indicated were missing for this consent.
|
|
5564
|
-
* @param requestedSubset - Optional subset the caller wants to grant; must be
|
|
5575
|
+
* @param requestedSubset - Optional subset the caller wants to grant; each value must be in `missing` or `alreadyEncountered`.
|
|
5565
5576
|
* @param alwaysGranted - Entries that must be granted whenever they appear in `missing`, regardless of `requestedSubset`.
|
|
5577
|
+
* @param alreadyEncountered - Entries the existing Grant has previously granted or rejected. Tolerated as no-ops on re-consent.
|
|
5566
5578
|
* @returns `granted` to add to the grant and `rejected` to record on the grant.
|
|
5567
5579
|
*/ function resolveEffectiveSubset(missing, requestedSubset) {
|
|
5568
|
-
var alwaysGranted = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [];
|
|
5580
|
+
var alwaysGranted = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [], alreadyEncountered = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : [];
|
|
5569
5581
|
var missingSet = new Set(missing);
|
|
5582
|
+
var encounteredSet = new Set(alreadyEncountered);
|
|
5570
5583
|
var baseSelection;
|
|
5571
5584
|
if (requestedSubset === undefined) {
|
|
5572
5585
|
baseSelection = missing;
|
|
@@ -5575,7 +5588,7 @@ OidcInteractionController = __decorate([
|
|
|
5575
5588
|
try {
|
|
5576
5589
|
for(var _iterator = requestedSubset[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
5577
5590
|
var value = _step.value;
|
|
5578
|
-
if (!missingSet.has(value)) {
|
|
5591
|
+
if (!missingSet.has(value) && !encounteredSet.has(value)) {
|
|
5579
5592
|
throw new HttpException('Granted value "'.concat(value, '" is not in the requested set.'), HttpStatus.BAD_REQUEST);
|
|
5580
5593
|
}
|
|
5581
5594
|
}
|
|
@@ -5593,7 +5606,11 @@ OidcInteractionController = __decorate([
|
|
|
5593
5606
|
}
|
|
5594
5607
|
}
|
|
5595
5608
|
}
|
|
5596
|
-
|
|
5609
|
+
// Filter to `missing` only — already-encountered values pass validation but
|
|
5610
|
+
// do not need to be re-applied (oidc-provider's Grant tracks them already).
|
|
5611
|
+
baseSelection = requestedSubset.filter(function(value) {
|
|
5612
|
+
return missingSet.has(value);
|
|
5613
|
+
});
|
|
5597
5614
|
}
|
|
5598
5615
|
var grantedSet = new Set(baseSelection);
|
|
5599
5616
|
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
@@ -6529,4 +6546,4 @@ function _unsupported_iterable_to_array(o, minLen) {
|
|
|
6529
6546
|
return fn;
|
|
6530
6547
|
}
|
|
6531
6548
|
|
|
6532
|
-
export { DEFAULT_APP_OAUTH_CONSENT_PATH_PART, DEFAULT_APP_OAUTH_INTERACTION_PATH, DEFAULT_APP_OAUTH_LOGIN_PATH_PART, DEFAULT_MAX_REQUESTED_LOGIN_DURATION_SECONDS, DEFAULT_MIN_REQUESTED_LOGIN_DURATION_SECONDS, DEFAULT_OIDC_CODE_CHALLENGE_METHODS, DEFAULT_OIDC_ID_TOKEN_SIGNING_ALG_VALUES, DEFAULT_OIDC_ISSUER_PATH, DEFAULT_OIDC_ROUTES, DEFAULT_OIDC_SUBJECT_TYPES, DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS, DEFAULT_OIDC_TOKEN_LIFETIMES, DEFAULT_ROTATED_KEY_MAX_AGE, FIREBASE_SERVER_OIDC_ROUTES_FOR_GLOBAL_ROUTE_EXCLUDE, GRANTABLE_MODEL_NAMES, JwksFirestoreCollections, JwksKeyDocument, JwksService, JwksServiceConfig, JwksServiceStorageConfig, OIDC_ENCRYPTED_PAYLOAD_FIELDS, OIDC_JWKS_ENCRYPTION_SECRET_ENV_KEY, OidcAccountService, OidcAccountServiceDelegate, OidcAccountServiceUserContext, OidcAuth, OidcAuthBearerTokenMiddleware, OidcAuthMiddlewareConfig, OidcClientService, OidcEncryptionService, OidcInteractionController, OidcInteractionService, OidcModelServerActions, OidcModuleConfig, OidcProviderConfigService, OidcProviderController, OidcServerFirestoreCollections, OidcService, OidcWellKnownController, activeJwksKeysQuery, appOidcModelModuleMetadata, applyOidcAuthMiddleware, applyOidcCorsMiddleware, createAdapterFactory, createOidcClientFactory, deleteOidcClientFactory, deleteOidcTokenFactory, getOidcScopesFromRequest, jwksKeyCollectionReference, jwksKeyConverter, jwksKeyFirestoreCollection, jwksKeyIdentity, jwksKeysWithStatusQuery, nonRetiredJwksKeysQuery, oidcCallModelScopePreAssert, oidcFirestoreCollectionsFactory, oidcModelServerActions, oidcModelServerActionsFactory, oidcModuleConfigFactory, oidcModuleMetadata, rotateOidcClientSecretFactory, rotatedJwksKeysQuery, updateOidcClientFactory };
|
|
6549
|
+
export { DEFAULT_APP_OAUTH_CONSENT_PATH_PART, DEFAULT_APP_OAUTH_INTERACTION_PATH, DEFAULT_APP_OAUTH_LOGIN_PATH_PART, DEFAULT_MAX_REQUESTED_LOGIN_DURATION_SECONDS, DEFAULT_MIN_REQUESTED_LOGIN_DURATION_SECONDS, DEFAULT_OIDC_CODE_CHALLENGE_METHODS, DEFAULT_OIDC_ID_TOKEN_SIGNING_ALG_VALUES, DEFAULT_OIDC_ISSUER_PATH, DEFAULT_OIDC_ROUTES, DEFAULT_OIDC_SUBJECT_TYPES, DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS, DEFAULT_OIDC_TOKEN_LIFETIMES, DEFAULT_ROTATED_KEY_MAX_AGE, FIREBASE_SERVER_OIDC_ROUTES_FOR_GLOBAL_ROUTE_EXCLUDE, GRANTABLE_MODEL_NAMES, JwksFirestoreCollections, JwksKeyDocument, JwksService, JwksServiceConfig, JwksServiceStorageConfig, OIDC_ENCRYPTED_PAYLOAD_FIELDS, OIDC_JWKS_ENCRYPTION_SECRET_ENV_KEY, OidcAccountService, OidcAccountServiceDelegate, OidcAccountServiceUserContext, OidcAuth, OidcAuthBearerTokenMiddleware, OidcAuthMiddlewareConfig, OidcClientService, OidcEncryptionService, OidcInteractionController, OidcInteractionService, OidcModelServerActions, OidcModuleConfig, OidcProviderConfigService, OidcProviderController, OidcServerFirestoreCollections, OidcService, OidcWellKnownController, activeJwksKeysQuery, appOidcModelModuleMetadata, applyOidcAuthMiddleware, applyOidcCorsMiddleware, createAdapterFactory, createOidcClientFactory, deleteOidcClientFactory, deleteOidcTokenFactory, getOidcScopesFromRequest, jwksKeyCollectionReference, jwksKeyConverter, jwksKeyFirestoreCollection, jwksKeyIdentity, jwksKeysWithStatusQuery, nonRetiredJwksKeysQuery, oidcCallModelScopePreAssert, oidcFirestoreCollectionsFactory, oidcModelServerActions, oidcModelServerActionsFactory, oidcModuleConfigFactory, oidcModuleMetadata, resolveEffectiveSubset, rotateOidcClientSecretFactory, rotatedJwksKeysQuery, updateOidcClientFactory };
|
package/oidc/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/firebase-server/oidc",
|
|
3
|
-
"version": "13.11.
|
|
3
|
+
"version": "13.11.10",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@dereekb/analytics": "13.11.
|
|
6
|
-
"@dereekb/date": "13.11.
|
|
7
|
-
"@dereekb/firebase": "13.11.
|
|
8
|
-
"@dereekb/firebase-server": "13.11.
|
|
9
|
-
"@dereekb/model": "13.11.
|
|
10
|
-
"@dereekb/nestjs": "13.11.
|
|
11
|
-
"@dereekb/rxjs": "13.11.
|
|
12
|
-
"@dereekb/util": "13.11.
|
|
13
|
-
"@dereekb/zoho": "13.11.
|
|
5
|
+
"@dereekb/analytics": "13.11.10",
|
|
6
|
+
"@dereekb/date": "13.11.10",
|
|
7
|
+
"@dereekb/firebase": "13.11.10",
|
|
8
|
+
"@dereekb/firebase-server": "13.11.10",
|
|
9
|
+
"@dereekb/model": "13.11.10",
|
|
10
|
+
"@dereekb/nestjs": "13.11.10",
|
|
11
|
+
"@dereekb/rxjs": "13.11.10",
|
|
12
|
+
"@dereekb/util": "13.11.10",
|
|
13
|
+
"@dereekb/zoho": "13.11.10",
|
|
14
14
|
"@nestjs/common": "^11.1.19",
|
|
15
15
|
"@nestjs/config": "^4.0.4",
|
|
16
16
|
"express": "^5.2.1",
|
|
@@ -66,3 +66,29 @@ export declare class OidcInteractionController {
|
|
|
66
66
|
*/
|
|
67
67
|
private _verifyIdToken;
|
|
68
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Resolves the effective set to grant — and the complementary set to
|
|
71
|
+
* reject — from a missing set, an optional caller-provided subset, an
|
|
72
|
+
* optional list of always-granted entries, and an optional list of
|
|
73
|
+
* already-encountered entries (granted or rejected on the existing Grant).
|
|
74
|
+
*
|
|
75
|
+
* Throws `400 BAD_REQUEST` if the requested subset contains an entry that
|
|
76
|
+
* is in neither the missing set nor the already-encountered set (no
|
|
77
|
+
* privilege escalation).
|
|
78
|
+
*
|
|
79
|
+
* - When `requestedSubset` is undefined → grants everything in `missing` (back-compat); rejects nothing.
|
|
80
|
+
* - When `requestedSubset` is provided → grants the intersection with `missing`; rejects every other missing
|
|
81
|
+
* entry so oidc-provider does not re-prompt for them. Values in `alreadyEncountered` pass validation but
|
|
82
|
+
* are not re-applied to the grant (no-op).
|
|
83
|
+
* - Always-granted entries are union'd into `granted` (clamped to `missing`).
|
|
84
|
+
*
|
|
85
|
+
* @param missing - Entries the OIDC prompt indicated were missing for this consent.
|
|
86
|
+
* @param requestedSubset - Optional subset the caller wants to grant; each value must be in `missing` or `alreadyEncountered`.
|
|
87
|
+
* @param alwaysGranted - Entries that must be granted whenever they appear in `missing`, regardless of `requestedSubset`.
|
|
88
|
+
* @param alreadyEncountered - Entries the existing Grant has previously granted or rejected. Tolerated as no-ops on re-consent.
|
|
89
|
+
* @returns `granted` to add to the grant and `rejected` to record on the grant.
|
|
90
|
+
*/
|
|
91
|
+
export declare function resolveEffectiveSubset(missing: readonly string[], requestedSubset: readonly string[] | undefined, alwaysGranted?: readonly string[], alreadyEncountered?: readonly string[]): {
|
|
92
|
+
granted: string[];
|
|
93
|
+
rejected: string[];
|
|
94
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/firebase-server",
|
|
3
|
-
"version": "13.11.
|
|
3
|
+
"version": "13.11.10",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"exports": {
|
|
6
6
|
"./test": {
|
|
@@ -44,15 +44,15 @@
|
|
|
44
44
|
"main": "./index.cjs.js",
|
|
45
45
|
"types": "./src/index.d.ts",
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"@dereekb/analytics": "13.11.
|
|
48
|
-
"@dereekb/date": "13.11.
|
|
49
|
-
"@dereekb/dbx-core": "13.11.
|
|
50
|
-
"@dereekb/firebase": "13.11.
|
|
51
|
-
"@dereekb/model": "13.11.
|
|
52
|
-
"@dereekb/nestjs": "13.11.
|
|
53
|
-
"@dereekb/rxjs": "13.11.
|
|
54
|
-
"@dereekb/util": "13.11.
|
|
55
|
-
"@dereekb/zoho": "13.11.
|
|
47
|
+
"@dereekb/analytics": "13.11.10",
|
|
48
|
+
"@dereekb/date": "13.11.10",
|
|
49
|
+
"@dereekb/dbx-core": "13.11.10",
|
|
50
|
+
"@dereekb/firebase": "13.11.10",
|
|
51
|
+
"@dereekb/model": "13.11.10",
|
|
52
|
+
"@dereekb/nestjs": "13.11.10",
|
|
53
|
+
"@dereekb/rxjs": "13.11.10",
|
|
54
|
+
"@dereekb/util": "13.11.10",
|
|
55
|
+
"@dereekb/zoho": "13.11.10",
|
|
56
56
|
"@google-cloud/firestore": "^7.11.6",
|
|
57
57
|
"@google-cloud/storage": "^7.19.0",
|
|
58
58
|
"@nestjs/common": "^11.1.19",
|
|
@@ -14,7 +14,11 @@ export interface AuthDataRef<T extends AuthData = AuthData> {
|
|
|
14
14
|
* Converts a Firebase Admin {@link admin.auth.DecodedIdToken} into a normalized {@link FirebaseAuthToken}.
|
|
15
15
|
*
|
|
16
16
|
* Maps Firebase Admin token fields (snake_case) to the application's token interface (camelCase),
|
|
17
|
-
* including email, phone, and sign-in timestamps.
|
|
17
|
+
* including email, phone, and sign-in timestamps. `auth_time`/`iat` are Unix seconds per the
|
|
18
|
+
* Firebase Admin types, so they are converted to milliseconds before being formatted. Missing
|
|
19
|
+
* or non-finite values map to `undefined` (the {@link FirebaseAuthToken} fields are optional) —
|
|
20
|
+
* synthetic tokens built from OIDC bearer auth do not always carry those claims, and we must
|
|
21
|
+
* not throw `RangeError("Invalid time value")` from this path.
|
|
18
22
|
*
|
|
19
23
|
* @param token - The decoded ID token from Firebase Admin Auth.
|
|
20
24
|
* @returns A normalized {@link FirebaseAuthToken} with camelCase fields.
|
|
@@ -65,6 +65,9 @@ export declare class ModelApiGetService {
|
|
|
65
65
|
* Builds an {@link AuthDataRef} compatible with `useModel()` from the HTTP request auth.
|
|
66
66
|
*
|
|
67
67
|
* Uses the same synthetic auth pattern as {@link ModelApiDispatchService.dispatch}.
|
|
68
|
+
* The OIDC-validated claim subset is layered over the base token so the synthetic
|
|
69
|
+
* `auth.token` keeps standard JWT claims (`iat`, `auth_time`, `email`, …) that
|
|
70
|
+
* downstream consumers like `authContextInfo` rely on.
|
|
68
71
|
*
|
|
69
72
|
* @param auth - The Firebase server auth data from the HTTP request, or undefined for unauthenticated requests.
|
|
70
73
|
* @returns An object containing a synthetic {@link AuthData} for use with `useModel()`, or undefined auth.
|
package/test/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/firebase-server/test",
|
|
3
|
-
"version": "13.11.
|
|
3
|
+
"version": "13.11.10",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@dereekb/analytics": "13.11.
|
|
6
|
-
"@dereekb/date": "13.11.
|
|
7
|
-
"@dereekb/firebase": "13.11.
|
|
8
|
-
"@dereekb/firebase-server": "13.11.
|
|
9
|
-
"@dereekb/firebase-server/oidc": "13.11.
|
|
10
|
-
"@dereekb/model": "13.11.
|
|
11
|
-
"@dereekb/nestjs": "13.11.
|
|
12
|
-
"@dereekb/rxjs": "13.11.
|
|
13
|
-
"@dereekb/util": "13.11.
|
|
5
|
+
"@dereekb/analytics": "13.11.10",
|
|
6
|
+
"@dereekb/date": "13.11.10",
|
|
7
|
+
"@dereekb/firebase": "13.11.10",
|
|
8
|
+
"@dereekb/firebase-server": "13.11.10",
|
|
9
|
+
"@dereekb/firebase-server/oidc": "13.11.10",
|
|
10
|
+
"@dereekb/model": "13.11.10",
|
|
11
|
+
"@dereekb/nestjs": "13.11.10",
|
|
12
|
+
"@dereekb/rxjs": "13.11.10",
|
|
13
|
+
"@dereekb/util": "13.11.10",
|
|
14
14
|
"@google-cloud/firestore": "^7.11.6",
|
|
15
15
|
"@google-cloud/storage": "^7.19.0",
|
|
16
16
|
"@nestjs/common": "^11.1.19",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"supertest": "^7.2.2"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@dereekb/nestjs": "13.11.
|
|
26
|
+
"@dereekb/nestjs": "13.11.10"
|
|
27
27
|
},
|
|
28
28
|
"exports": {
|
|
29
29
|
"./package.json": "./package.json",
|
package/zoho/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/firebase-server/zoho",
|
|
3
|
-
"version": "13.11.
|
|
3
|
+
"version": "13.11.10",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@dereekb/analytics": "13.11.
|
|
6
|
-
"@dereekb/date": "13.11.
|
|
7
|
-
"@dereekb/model": "13.11.
|
|
8
|
-
"@dereekb/nestjs": "13.11.
|
|
9
|
-
"@dereekb/rxjs": "13.11.
|
|
10
|
-
"@dereekb/firebase": "13.11.
|
|
11
|
-
"@dereekb/util": "13.11.
|
|
12
|
-
"@dereekb/zoho": "13.11.
|
|
5
|
+
"@dereekb/analytics": "13.11.10",
|
|
6
|
+
"@dereekb/date": "13.11.10",
|
|
7
|
+
"@dereekb/model": "13.11.10",
|
|
8
|
+
"@dereekb/nestjs": "13.11.10",
|
|
9
|
+
"@dereekb/rxjs": "13.11.10",
|
|
10
|
+
"@dereekb/firebase": "13.11.10",
|
|
11
|
+
"@dereekb/util": "13.11.10",
|
|
12
|
+
"@dereekb/zoho": "13.11.10"
|
|
13
13
|
},
|
|
14
14
|
"exports": {
|
|
15
15
|
"./package.json": "./package.json",
|