@dereekb/firebase-server 13.35.0 → 13.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/calcom/package.json +10 -10
- package/discord/package.json +10 -10
- package/index.cjs.js +1 -1
- package/index.esm.js +1 -1
- package/mailgun/package.json +9 -9
- package/mcp/index.cjs.js +282 -63
- package/mcp/index.esm.js +280 -61
- package/mcp/package.json +13 -12
- package/mcp/src/lib/controller/mcp.controller.d.ts +28 -3
- package/mcp/src/lib/controller/mcp.wellknown.controller.d.ts +21 -1
- package/mcp/src/lib/mcp.config.d.ts +9 -7
- package/mcp/src/lib/mcp.module.d.ts +2 -1
- package/mcp/src/lib/service/mcp.server.factory.d.ts +5 -4
- package/mcp/src/lib/service/mcp.tool-generator.d.ts +1 -1
- package/mcp/src/lib/service/mcp.visibility.d.ts +1 -1
- package/mcp/src/lib/transport/streamable-http.transport.d.ts +16 -11
- package/model/index.cjs.js +1 -1
- package/model/index.esm.js +1 -1
- package/model/package.json +9 -9
- package/oidc/index.cjs.js +257 -67
- package/oidc/index.esm.js +256 -69
- package/oidc/package.json +10 -10
- package/oidc/src/lib/profile.d.ts +21 -0
- package/oidc/src/lib/service/index.d.ts +1 -0
- package/oidc/src/lib/service/oidc.config.service.d.ts +14 -0
- package/oidc/src/lib/service/oidc.interaction-policy.d.ts +35 -0
- package/oidc/src/lib/service/oidc.service.d.ts +29 -0
- package/package.json +14 -13
- package/test/index.cjs.js +8 -8
- package/test/index.esm.js +8 -8
- package/test/package.json +11 -11
- package/twilio/package.json +8 -8
- package/zoho/package.json +10 -10
|
@@ -34,3 +34,24 @@ export interface OidcClientProviderProfileScopes<S extends OidcScope = OidcScope
|
|
|
34
34
|
* @returns The unlocked and required scope sets for the client.
|
|
35
35
|
*/
|
|
36
36
|
export declare function oidcClientProviderProfileScopes<S extends OidcScope = OidcScope>(providerProfiles: readonly OidcProviderProfile<S>[] | undefined, clientProfileKeys: readonly OidcProviderProfileKey[] | undefined): OidcClientProviderProfileScopes<S>;
|
|
37
|
+
/**
|
|
38
|
+
* The subset of an {@link OidcProviderConfig} needed to resolve its admin-only scopes. Declared
|
|
39
|
+
* structurally so this module stays free of a dependency on the config type.
|
|
40
|
+
*/
|
|
41
|
+
export interface OidcAdminOnlyScopesInput<S extends OidcScope = OidcScope> {
|
|
42
|
+
readonly adminOnlyScopes?: readonly string[];
|
|
43
|
+
readonly providerProfiles?: readonly OidcProviderProfile<S>[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resolves every scope restricted to admin users: the provider config's own `adminOnlyScopes`
|
|
47
|
+
* unioned with the scopes of each profile marked {@link OidcProviderProfile.adminOnly}.
|
|
48
|
+
*
|
|
49
|
+
* The single choke point for that union — the consent admin-only gate (which hard-rejects a
|
|
50
|
+
* non-admin who consented to one) and the consent URL builder (which withholds them from a
|
|
51
|
+
* non-admin's consent screen in the first place) both read through it, so the set a user is
|
|
52
|
+
* offered and the set they are judged against cannot drift apart.
|
|
53
|
+
*
|
|
54
|
+
* @param providerConfig - The provider config supplying `adminOnlyScopes` and the profile registry.
|
|
55
|
+
* @returns The union of config-level and profile-level admin-only scopes.
|
|
56
|
+
*/
|
|
57
|
+
export declare function adminOnlyScopesForOidcProviderConfig<S extends OidcScope = OidcScope>(providerConfig: OidcAdminOnlyScopesInput<S>): Set<string>;
|
|
@@ -81,6 +81,20 @@ export declare class OidcProviderConfigService {
|
|
|
81
81
|
* Scopes derived from the claims configuration keys.
|
|
82
82
|
*/
|
|
83
83
|
readonly scopesSupported: string[];
|
|
84
|
+
/**
|
|
85
|
+
* {@link scopesSupported} minus the scopes only an admin-assigned {@link OidcProviderProfile}
|
|
86
|
+
* unlocks — what an arbitrary client (a dynamically registered one included) may actually put in
|
|
87
|
+
* an authorization request.
|
|
88
|
+
*
|
|
89
|
+
* The issuer's own discovery document keeps advertising the full {@link scopesSupported}: the
|
|
90
|
+
* provider does support those scopes, for the clients holding the profile. This narrower list is
|
|
91
|
+
* for metadata a client treats as a request template — notably an MCP protected-resource
|
|
92
|
+
* document's `scopes_supported`, which dynamic-registration clients (the Claude Code CLI) copy
|
|
93
|
+
* verbatim onto `/authorize`. An assignment-only scope advertised there ends the flow in
|
|
94
|
+
* `access_denied`: the consent unlock gate judges the REQUEST, so unlike an admin-only scope
|
|
95
|
+
* there is no deselect-at-consent way through.
|
|
96
|
+
*/
|
|
97
|
+
readonly clientRequestableScopesSupported: string[];
|
|
84
98
|
/**
|
|
85
99
|
* Flat list of all unique claim names from the claims configuration.
|
|
86
100
|
*/
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type interactionPolicy } from 'oidc-provider';
|
|
2
|
+
/**
|
|
3
|
+
* Reason string of the check {@link buildOidcInteractionPolicy} adds to the `login` prompt.
|
|
4
|
+
*/
|
|
5
|
+
export declare const STALE_SESSION_ACCOUNT_CHECK_REASON = "stale_session_account";
|
|
6
|
+
/**
|
|
7
|
+
* The `interactionPolicy` namespace as imported at runtime.
|
|
8
|
+
*
|
|
9
|
+
* Passed in rather than imported here because `oidc-provider` is ESM-only and the service reaches
|
|
10
|
+
* it through a dynamic `import()`; taking it as an argument keeps this module synchronously
|
|
11
|
+
* testable.
|
|
12
|
+
*/
|
|
13
|
+
export type OidcInteractionPolicyNamespace = typeof interactionPolicy;
|
|
14
|
+
/**
|
|
15
|
+
* Builds the interaction policy: oidc-provider's default prompts, plus a `login` check that
|
|
16
|
+
* catches a session whose account no longer resolves.
|
|
17
|
+
*
|
|
18
|
+
* The default policy crashes on that case. `login`'s `no_session` check passes on
|
|
19
|
+
* `oidc.session.accountId` alone — the value in the `_session` cookie — while `loadAccount` puts
|
|
20
|
+
* the result of `findAccount` on `oidc.account`, and `loadGrant` establishes `oidc.grant` ONLY when
|
|
21
|
+
* that account resolved. So a cookie naming a deleted account skips the login prompt, reaches the
|
|
22
|
+
* `consent` prompt's `op_scopes_missing` check, and dereferences `oidc.grant.getOIDCScopeEncountered()`
|
|
23
|
+
* on `undefined` — a `TypeError` that oidc-provider renders as an opaque `server_error`, on every
|
|
24
|
+
* authorization request, until the user clears the cookie by hand.
|
|
25
|
+
*
|
|
26
|
+
* Deleted accounts are ordinary: an emulator database reset in development, an account deletion in
|
|
27
|
+
* production. Re-authenticating is the correct response, so this requests the `login` prompt and the
|
|
28
|
+
* user recovers by logging in. The check is added to `login` rather than guarding `consent` so the
|
|
29
|
+
* prompt loop short-circuits before any consent check runs (it breaks on the first prompt that
|
|
30
|
+
* fires).
|
|
31
|
+
*
|
|
32
|
+
* @param policyNamespace - The `interactionPolicy` namespace from the runtime `oidc-provider` import.
|
|
33
|
+
* @returns The default policy with the stale-session check installed on the `login` prompt.
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildOidcInteractionPolicy(policyNamespace: OidcInteractionPolicyNamespace): interactionPolicy.DefaultPolicy;
|
|
@@ -34,6 +34,7 @@ export declare class OidcService {
|
|
|
34
34
|
private readonly accountService;
|
|
35
35
|
private readonly collections;
|
|
36
36
|
private readonly encryptionService;
|
|
37
|
+
private readonly _logger;
|
|
37
38
|
private readonly _getProvider;
|
|
38
39
|
constructor(config: OidcModuleConfig, providerConfigService: OidcProviderConfigService, jwksService: JwksService, accountService: OidcAccountService, collections: OidcServerFirestoreCollections, encryptionService: OidcEncryptionService);
|
|
39
40
|
/**
|
|
@@ -108,4 +109,32 @@ export declare class OidcService {
|
|
|
108
109
|
*/
|
|
109
110
|
buildProviderConfiguration(cookieKeys: string[]): Configuration;
|
|
110
111
|
private _buildProvider;
|
|
112
|
+
/**
|
|
113
|
+
* Whether the user an interaction resolved to is an admin.
|
|
114
|
+
*
|
|
115
|
+
* Reads the same `isAdminUser` delegate the consent admin-only gate uses. Fails closed — an
|
|
116
|
+
* interaction with no resolved account (the login prompt, before authentication) or a delegate
|
|
117
|
+
* that does not implement the hook is treated as non-admin, so admin-only scopes are withheld
|
|
118
|
+
* unless admin status is positively established.
|
|
119
|
+
*
|
|
120
|
+
* @param interaction - The interaction whose session account should be checked.
|
|
121
|
+
* @returns True when the interaction's account resolves to an admin user.
|
|
122
|
+
*/
|
|
123
|
+
private _isAdminInteractionUser;
|
|
124
|
+
/**
|
|
125
|
+
* Wires oidc-provider's error events to the Nest logger.
|
|
126
|
+
*
|
|
127
|
+
* oidc-provider catches everything thrown inside its koa stack and renders the generic
|
|
128
|
+
* `{"error":"server_error","error_description":"oops! something went wrong"}` body. The real
|
|
129
|
+
* cause is only ever handed to the `server_error` event — with no listener it is dropped, and a
|
|
130
|
+
* failing authorization request is undiagnosable from either the response or the function logs.
|
|
131
|
+
*
|
|
132
|
+
* `grant.error` / `introspection.error` / `revocation.error` cover the token-endpoint equivalents.
|
|
133
|
+
* These are all genuine server-side faults; expected protocol rejections (`invalid_client`,
|
|
134
|
+
* `access_denied`, …) travel as normal responses and are NOT emitted here, so this stays quiet in
|
|
135
|
+
* healthy operation.
|
|
136
|
+
*
|
|
137
|
+
* @param provider - The constructed oidc-provider instance to attach listeners to.
|
|
138
|
+
*/
|
|
139
|
+
private _attachProviderErrorLogging;
|
|
111
140
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/firebase-server",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.37.0",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"exports": {
|
|
6
6
|
"./test": {
|
|
@@ -69,20 +69,21 @@
|
|
|
69
69
|
"types": "./src/index.d.ts",
|
|
70
70
|
"peerDependencies": {
|
|
71
71
|
"@cantoo/pdf-lib": "^2.6.5",
|
|
72
|
-
"@dereekb/analytics": "13.
|
|
73
|
-
"@dereekb/calcom": "13.
|
|
74
|
-
"@dereekb/date": "13.
|
|
75
|
-
"@dereekb/dbx-core": "13.
|
|
76
|
-
"@dereekb/discord": "13.
|
|
77
|
-
"@dereekb/firebase": "13.
|
|
78
|
-
"@dereekb/model": "13.
|
|
79
|
-
"@dereekb/nestjs": "13.
|
|
80
|
-
"@dereekb/rxjs": "13.
|
|
81
|
-
"@dereekb/util": "13.
|
|
82
|
-
"@dereekb/zoho": "13.
|
|
72
|
+
"@dereekb/analytics": "13.37.0",
|
|
73
|
+
"@dereekb/calcom": "13.37.0",
|
|
74
|
+
"@dereekb/date": "13.37.0",
|
|
75
|
+
"@dereekb/dbx-core": "13.37.0",
|
|
76
|
+
"@dereekb/discord": "13.37.0",
|
|
77
|
+
"@dereekb/firebase": "13.37.0",
|
|
78
|
+
"@dereekb/model": "13.37.0",
|
|
79
|
+
"@dereekb/nestjs": "13.37.0",
|
|
80
|
+
"@dereekb/rxjs": "13.37.0",
|
|
81
|
+
"@dereekb/util": "13.37.0",
|
|
82
|
+
"@dereekb/zoho": "13.37.0",
|
|
83
83
|
"@google-cloud/firestore": "^7.11.6",
|
|
84
84
|
"@google-cloud/storage": "^7.19.0",
|
|
85
|
-
"@modelcontextprotocol/
|
|
85
|
+
"@modelcontextprotocol/node": "2.0.0",
|
|
86
|
+
"@modelcontextprotocol/server": "2.0.0",
|
|
86
87
|
"@nestjs/common": "^11.1.19",
|
|
87
88
|
"@nestjs/config": "^4.0.4",
|
|
88
89
|
"@nestjs/core": "^11.1.19",
|
package/test/index.cjs.js
CHANGED
|
@@ -824,7 +824,7 @@ function _ts_generator$a(thisArg, body) {
|
|
|
824
824
|
auth_time: decoded.iat,
|
|
825
825
|
firebase: (_ref = (_decoded_claims = decoded.claims) === null || _decoded_claims === void 0 ? void 0 : _decoded_claims.firebase) !== null && _ref !== void 0 ? _ref : {}
|
|
826
826
|
});
|
|
827
|
-
delete decodedToken
|
|
827
|
+
delete decodedToken['claims']; // remove the "claims" item if it exists.
|
|
828
828
|
return decodedToken;
|
|
829
829
|
}
|
|
830
830
|
/**
|
|
@@ -1318,8 +1318,8 @@ var adminEnvironmentInitialized = false;
|
|
|
1318
1318
|
* @returns The newly generated project ID.
|
|
1319
1319
|
*/ function rollNewGCloudProjectEnvironmentVariable() {
|
|
1320
1320
|
var projectId = generateNewProjectId();
|
|
1321
|
-
process.env
|
|
1322
|
-
process.env
|
|
1321
|
+
process.env['GCLOUD_TEST_PROJECT'] = projectId;
|
|
1322
|
+
process.env['GCLOUD_PROJECT'] = projectId;
|
|
1323
1323
|
applyFirebaseGCloudTestProjectIdToFirebaseConfigEnv();
|
|
1324
1324
|
return projectId;
|
|
1325
1325
|
}
|
|
@@ -1330,7 +1330,7 @@ var adminEnvironmentInitialized = false;
|
|
|
1330
1330
|
*
|
|
1331
1331
|
* @returns The current value of `process.env.GCLOUD_PROJECT`, or `undefined` when unset.
|
|
1332
1332
|
*/ function getGCloudProjectId() {
|
|
1333
|
-
return process.env
|
|
1333
|
+
return process.env['GCLOUD_PROJECT'];
|
|
1334
1334
|
}
|
|
1335
1335
|
/**
|
|
1336
1336
|
* Reads the current `GCLOUD_TEST_PROJECT` environment variable.
|
|
@@ -1341,7 +1341,7 @@ var adminEnvironmentInitialized = false;
|
|
|
1341
1341
|
*
|
|
1342
1342
|
* @returns The current value of `process.env.GCLOUD_TEST_PROJECT`, or `undefined` when unset.
|
|
1343
1343
|
*/ function getGCloudTestProjectId() {
|
|
1344
|
-
return process.env
|
|
1344
|
+
return process.env['GCLOUD_TEST_PROJECT'];
|
|
1345
1345
|
}
|
|
1346
1346
|
/**
|
|
1347
1347
|
* Applies the current GCLOUD_PROJECT to FIREBASE_CONFIG.
|
|
@@ -1360,10 +1360,10 @@ var adminEnvironmentInitialized = false;
|
|
|
1360
1360
|
if (!testProjectId) {
|
|
1361
1361
|
throw new Error('No test project id was available in the environment. Did you call initFirebaseAdminTestEnvironment() first?');
|
|
1362
1362
|
}
|
|
1363
|
-
var config = JSON.parse((_process_env_FIREBASE_CONFIG = process.env
|
|
1363
|
+
var config = JSON.parse((_process_env_FIREBASE_CONFIG = process.env['FIREBASE_CONFIG']) !== null && _process_env_FIREBASE_CONFIG !== void 0 ? _process_env_FIREBASE_CONFIG : '{}');
|
|
1364
1364
|
config.projectId = testProjectId;
|
|
1365
|
-
process.env
|
|
1366
|
-
process.env
|
|
1365
|
+
process.env['FIREBASE_CONFIG'] = JSON.stringify(config);
|
|
1366
|
+
process.env['GCLOUD_PROJECT'] = testProjectId; // re-apply to GCLOUD_PROJECT too
|
|
1367
1367
|
return testProjectId;
|
|
1368
1368
|
}
|
|
1369
1369
|
/**
|
package/test/index.esm.js
CHANGED
|
@@ -823,7 +823,7 @@ function _ts_generator$a(thisArg, body) {
|
|
|
823
823
|
auth_time: decoded.iat,
|
|
824
824
|
firebase: (_ref = (_decoded_claims = decoded.claims) === null || _decoded_claims === void 0 ? void 0 : _decoded_claims.firebase) !== null && _ref !== void 0 ? _ref : {}
|
|
825
825
|
});
|
|
826
|
-
delete decodedToken
|
|
826
|
+
delete decodedToken['claims']; // remove the "claims" item if it exists.
|
|
827
827
|
return decodedToken;
|
|
828
828
|
}
|
|
829
829
|
/**
|
|
@@ -1317,8 +1317,8 @@ var adminEnvironmentInitialized = false;
|
|
|
1317
1317
|
* @returns The newly generated project ID.
|
|
1318
1318
|
*/ function rollNewGCloudProjectEnvironmentVariable() {
|
|
1319
1319
|
var projectId = generateNewProjectId();
|
|
1320
|
-
process.env
|
|
1321
|
-
process.env
|
|
1320
|
+
process.env['GCLOUD_TEST_PROJECT'] = projectId;
|
|
1321
|
+
process.env['GCLOUD_PROJECT'] = projectId;
|
|
1322
1322
|
applyFirebaseGCloudTestProjectIdToFirebaseConfigEnv();
|
|
1323
1323
|
return projectId;
|
|
1324
1324
|
}
|
|
@@ -1329,7 +1329,7 @@ var adminEnvironmentInitialized = false;
|
|
|
1329
1329
|
*
|
|
1330
1330
|
* @returns The current value of `process.env.GCLOUD_PROJECT`, or `undefined` when unset.
|
|
1331
1331
|
*/ function getGCloudProjectId() {
|
|
1332
|
-
return process.env
|
|
1332
|
+
return process.env['GCLOUD_PROJECT'];
|
|
1333
1333
|
}
|
|
1334
1334
|
/**
|
|
1335
1335
|
* Reads the current `GCLOUD_TEST_PROJECT` environment variable.
|
|
@@ -1340,7 +1340,7 @@ var adminEnvironmentInitialized = false;
|
|
|
1340
1340
|
*
|
|
1341
1341
|
* @returns The current value of `process.env.GCLOUD_TEST_PROJECT`, or `undefined` when unset.
|
|
1342
1342
|
*/ function getGCloudTestProjectId() {
|
|
1343
|
-
return process.env
|
|
1343
|
+
return process.env['GCLOUD_TEST_PROJECT'];
|
|
1344
1344
|
}
|
|
1345
1345
|
/**
|
|
1346
1346
|
* Applies the current GCLOUD_PROJECT to FIREBASE_CONFIG.
|
|
@@ -1359,10 +1359,10 @@ var adminEnvironmentInitialized = false;
|
|
|
1359
1359
|
if (!testProjectId) {
|
|
1360
1360
|
throw new Error('No test project id was available in the environment. Did you call initFirebaseAdminTestEnvironment() first?');
|
|
1361
1361
|
}
|
|
1362
|
-
var config = JSON.parse((_process_env_FIREBASE_CONFIG = process.env
|
|
1362
|
+
var config = JSON.parse((_process_env_FIREBASE_CONFIG = process.env['FIREBASE_CONFIG']) !== null && _process_env_FIREBASE_CONFIG !== void 0 ? _process_env_FIREBASE_CONFIG : '{}');
|
|
1363
1363
|
config.projectId = testProjectId;
|
|
1364
|
-
process.env
|
|
1365
|
-
process.env
|
|
1364
|
+
process.env['FIREBASE_CONFIG'] = JSON.stringify(config);
|
|
1365
|
+
process.env['GCLOUD_PROJECT'] = testProjectId; // re-apply to GCLOUD_PROJECT too
|
|
1366
1366
|
return testProjectId;
|
|
1367
1367
|
}
|
|
1368
1368
|
/**
|
package/test/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/firebase-server/test",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.37.0",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@dereekb/analytics": "13.
|
|
6
|
-
"@dereekb/date": "13.
|
|
7
|
-
"@dereekb/firebase": "13.
|
|
8
|
-
"@dereekb/firebase-server": "13.
|
|
9
|
-
"@dereekb/firebase-server/oidc": "13.
|
|
10
|
-
"@dereekb/model": "13.
|
|
11
|
-
"@dereekb/nestjs": "13.
|
|
12
|
-
"@dereekb/rxjs": "13.
|
|
13
|
-
"@dereekb/util": "13.
|
|
5
|
+
"@dereekb/analytics": "13.37.0",
|
|
6
|
+
"@dereekb/date": "13.37.0",
|
|
7
|
+
"@dereekb/firebase": "13.37.0",
|
|
8
|
+
"@dereekb/firebase-server": "13.37.0",
|
|
9
|
+
"@dereekb/firebase-server/oidc": "13.37.0",
|
|
10
|
+
"@dereekb/model": "13.37.0",
|
|
11
|
+
"@dereekb/nestjs": "13.37.0",
|
|
12
|
+
"@dereekb/rxjs": "13.37.0",
|
|
13
|
+
"@dereekb/util": "13.37.0",
|
|
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.
|
|
26
|
+
"@dereekb/nestjs": "13.37.0"
|
|
27
27
|
},
|
|
28
28
|
"exports": {
|
|
29
29
|
"./package.json": "./package.json",
|
package/twilio/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/firebase-server/twilio",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.37.0",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@dereekb/date": "13.
|
|
6
|
-
"@dereekb/firebase": "13.
|
|
7
|
-
"@dereekb/firebase-server": "13.
|
|
8
|
-
"@dereekb/model": "13.
|
|
9
|
-
"@dereekb/nestjs": "13.
|
|
10
|
-
"@dereekb/rxjs": "13.
|
|
11
|
-
"@dereekb/util": "13.
|
|
5
|
+
"@dereekb/date": "13.37.0",
|
|
6
|
+
"@dereekb/firebase": "13.37.0",
|
|
7
|
+
"@dereekb/firebase-server": "13.37.0",
|
|
8
|
+
"@dereekb/model": "13.37.0",
|
|
9
|
+
"@dereekb/nestjs": "13.37.0",
|
|
10
|
+
"@dereekb/rxjs": "13.37.0",
|
|
11
|
+
"@dereekb/util": "13.37.0"
|
|
12
12
|
},
|
|
13
13
|
"exports": {
|
|
14
14
|
"./package.json": "./package.json",
|
package/zoho/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/firebase-server/zoho",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.37.0",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@dereekb/analytics": "13.
|
|
6
|
-
"@dereekb/date": "13.
|
|
7
|
-
"@dereekb/model": "13.
|
|
8
|
-
"@dereekb/nestjs": "13.
|
|
9
|
-
"@dereekb/rxjs": "13.
|
|
10
|
-
"@dereekb/firebase": "13.
|
|
11
|
-
"@dereekb/firebase-server": "13.
|
|
12
|
-
"@dereekb/util": "13.
|
|
13
|
-
"@dereekb/zoho": "13.
|
|
5
|
+
"@dereekb/analytics": "13.37.0",
|
|
6
|
+
"@dereekb/date": "13.37.0",
|
|
7
|
+
"@dereekb/model": "13.37.0",
|
|
8
|
+
"@dereekb/nestjs": "13.37.0",
|
|
9
|
+
"@dereekb/rxjs": "13.37.0",
|
|
10
|
+
"@dereekb/firebase": "13.37.0",
|
|
11
|
+
"@dereekb/firebase-server": "13.37.0",
|
|
12
|
+
"@dereekb/util": "13.37.0",
|
|
13
|
+
"@dereekb/zoho": "13.37.0",
|
|
14
14
|
"@nestjs/common": "^11.1.19",
|
|
15
15
|
"@nestjs/config": "^4.0.4",
|
|
16
16
|
"express": "^5.2.1"
|