@dereekb/firebase-server 13.32.0 → 13.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/calcom/index.cjs.default.js +1 -0
  2. package/calcom/index.cjs.js +1451 -0
  3. package/calcom/index.cjs.mjs +2 -0
  4. package/calcom/index.d.ts +1 -0
  5. package/calcom/index.esm.js +1437 -0
  6. package/calcom/package.json +29 -0
  7. package/calcom/src/index.d.ts +1 -0
  8. package/calcom/src/lib/calcom.oauth.connection.cache.d.ts +49 -0
  9. package/calcom/src/lib/calcom.oauth.connection.config.d.ts +75 -0
  10. package/calcom/src/lib/calcom.oauth.connection.context.d.ts +84 -0
  11. package/calcom/src/lib/calcom.oauth.connection.controller.d.ts +18 -0
  12. package/calcom/src/lib/calcom.oauth.connection.module.d.ts +55 -0
  13. package/calcom/src/lib/calcom.oauth.connection.service.d.ts +33 -0
  14. package/calcom/src/lib/index.d.ts +6 -0
  15. package/discord/index.cjs.default.js +1 -0
  16. package/discord/index.cjs.js +761 -0
  17. package/discord/index.cjs.mjs +2 -0
  18. package/discord/index.d.ts +1 -0
  19. package/discord/index.esm.js +753 -0
  20. package/discord/package.json +29 -0
  21. package/discord/src/index.d.ts +1 -0
  22. package/discord/src/lib/discord.oauth.connection.config.d.ts +69 -0
  23. package/discord/src/lib/discord.oauth.connection.controller.d.ts +18 -0
  24. package/discord/src/lib/discord.oauth.connection.module.d.ts +39 -0
  25. package/discord/src/lib/discord.oauth.connection.service.d.ts +43 -0
  26. package/discord/src/lib/index.d.ts +4 -0
  27. package/index.cjs.js +14 -3
  28. package/index.esm.js +14 -3
  29. package/mailgun/package.json +9 -9
  30. package/mcp/package.json +11 -11
  31. package/model/index.cjs.js +3986 -855
  32. package/model/index.esm.js +3934 -862
  33. package/model/package.json +10 -9
  34. package/model/src/lib/index.d.ts +1 -0
  35. package/model/src/lib/userexternalconnection/index.d.ts +8 -0
  36. package/model/src/lib/userexternalconnection/oauth/index.d.ts +7 -0
  37. package/model/src/lib/userexternalconnection/oauth/userexternalconnection.oauth.config.d.ts +110 -0
  38. package/model/src/lib/userexternalconnection/oauth/userexternalconnection.oauth.controller.d.ts +68 -0
  39. package/model/src/lib/userexternalconnection/oauth/userexternalconnection.oauth.error.d.ts +29 -0
  40. package/model/src/lib/userexternalconnection/oauth/userexternalconnection.oauth.refresh.d.ts +24 -0
  41. package/model/src/lib/userexternalconnection/oauth/userexternalconnection.oauth.registry.d.ts +54 -0
  42. package/model/src/lib/userexternalconnection/oauth/userexternalconnection.oauth.service.d.ts +216 -0
  43. package/model/src/lib/userexternalconnection/oauth/userexternalconnection.oauth.state.d.ts +114 -0
  44. package/model/src/lib/userexternalconnection/userexternalconnection.accessor.service.d.ts +111 -0
  45. package/model/src/lib/userexternalconnection/userexternalconnection.action.server.d.ts +172 -0
  46. package/model/src/lib/userexternalconnection/userexternalconnection.error.d.ts +44 -0
  47. package/model/src/lib/userexternalconnection/userexternalconnection.module.d.ts +129 -0
  48. package/model/src/lib/userexternalconnection/userexternalconnection.private.d.ts +192 -0
  49. package/model/src/lib/userexternalconnection/userexternalconnection.reader.service.d.ts +157 -0
  50. package/model/src/lib/userexternalconnection/userexternalconnection.refresh.service.d.ts +46 -0
  51. package/oidc/index.cjs.js +104 -78
  52. package/oidc/index.esm.js +104 -78
  53. package/oidc/package.json +10 -10
  54. package/package.json +24 -10
  55. package/src/lib/env/env.config.d.ts +15 -0
  56. package/src/lib/env/env.service.d.ts +7 -0
  57. package/src/lib/nest/env/env.service.d.ts +1 -0
  58. package/test/index.cjs.js +14 -2
  59. package/test/index.esm.js +15 -3
  60. package/test/package.json +11 -11
  61. package/test/src/lib/firebase/firebase.admin.auth.d.ts +1 -1
  62. package/twilio/package.json +8 -8
  63. package/zoho/README.md +8 -0
  64. package/zoho/index.cjs.js +1223 -33
  65. package/zoho/index.esm.js +1212 -36
  66. package/zoho/package.json +12 -9
  67. package/zoho/src/lib/index.d.ts +5 -0
  68. package/zoho/src/lib/zoho.oauth.connection.cache.d.ts +45 -0
  69. package/zoho/src/lib/zoho.oauth.connection.config.d.ts +80 -0
  70. package/zoho/src/lib/zoho.oauth.connection.controller.d.ts +18 -0
  71. package/zoho/src/lib/zoho.oauth.connection.module.d.ts +43 -0
  72. package/zoho/src/lib/zoho.oauth.connection.service.d.ts +107 -0
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "@dereekb/firebase-server/discord",
3
+ "version": "13.33.0",
4
+ "peerDependencies": {
5
+ "@dereekb/analytics": "13.33.0",
6
+ "@dereekb/date": "13.33.0",
7
+ "@dereekb/discord": "13.33.0",
8
+ "@dereekb/firebase": "13.33.0",
9
+ "@dereekb/firebase-server": "13.33.0",
10
+ "@dereekb/model": "13.33.0",
11
+ "@dereekb/nestjs": "13.33.0",
12
+ "@dereekb/rxjs": "13.33.0",
13
+ "@dereekb/util": "13.33.0",
14
+ "@nestjs/common": "^11.1.19",
15
+ "express": "^5.2.1"
16
+ },
17
+ "exports": {
18
+ "./package.json": "./package.json",
19
+ ".": {
20
+ "module": "./index.esm.js",
21
+ "types": "./index.d.ts",
22
+ "import": "./index.cjs.mjs",
23
+ "default": "./index.cjs.js"
24
+ }
25
+ },
26
+ "module": "./index.esm.js",
27
+ "main": "./index.cjs.js",
28
+ "types": "./index.d.ts"
29
+ }
@@ -0,0 +1 @@
1
+ export * from './lib';
@@ -0,0 +1,69 @@
1
+ import { type DiscordOAuthScope } from '@dereekb/discord';
2
+ import { type FirebaseServerEnvService } from '@dereekb/firebase-server';
3
+ import { UserExternalConnectionOAuthServiceConfig } from '@dereekb/firebase-server/model';
4
+ import { type Maybe } from '@dereekb/util';
5
+ /**
6
+ * Controller path the Discord external-connection OAuth endpoints are mounted at.
7
+ *
8
+ * Derived from the framework's path factory, the same expression the redirect URI and the
9
+ * global-prefix exclusion are built from, so the three cannot drift apart.
10
+ */
11
+ export declare const DISCORD_USER_EXTERNAL_CONNECTION_OAUTH_CONTROLLER_PATH: string;
12
+ /**
13
+ * Routes to exclude from an app's global API route prefix so the Discord callback controller stays
14
+ * mounted at `/oauth/discord/*`.
15
+ *
16
+ * Spread this into the `exclude` list of the app's `globalApiRoutePrefix` config, alongside
17
+ * `FIREBASE_SERVER_OIDC_ROUTES_FOR_GLOBAL_ROUTE_EXCLUDE`.
18
+ */
19
+ export declare const DISCORD_USER_EXTERNAL_CONNECTION_OAUTH_ROUTES_FOR_GLOBAL_ROUTE_EXCLUDE: string[];
20
+ /**
21
+ * The scopes requested when an app does not declare its own.
22
+ *
23
+ * Declared in code, deliberately NOT read from the environment: the set to request follows from what
24
+ * the integration actually does, so it is a property of the code rather than of a deployment.
25
+ *
26
+ * `identify` alone. It is the least-privilege scope that still makes a Discord connection meaningful
27
+ * — a token granted no scopes can do nothing — and it is what lets the connection be labeled with the
28
+ * account it belongs to. Excludes `email`, which is a real privilege escalation the label does not
29
+ * need, and `guilds` / `connections` / `bot`, which nothing here reads.
30
+ */
31
+ export declare const DEFAULT_DISCORD_OAUTH_SCOPES: readonly DiscordOAuthScope[];
32
+ /**
33
+ * Configuration for the {@link DiscordUserExternalConnectionOAuthService}.
34
+ *
35
+ * Extends the framework config with the one thing that is Discord's own — which scopes to request.
36
+ *
37
+ * The client credentials are NOT here: they belong to `DiscordOAuthServiceConfig` in
38
+ * `@dereekb/discord/nestjs`, and the service reads them through the injected `DiscordOAuthApi`.
39
+ */
40
+ export declare abstract class DiscordUserExternalConnectionOAuthServiceConfig extends UserExternalConnectionOAuthServiceConfig {
41
+ readonly scopes: readonly DiscordOAuthScope[];
42
+ }
43
+ export interface DiscordUserExternalConnectionOAuthServiceConfigFactoryConfig {
44
+ readonly envService: FirebaseServerEnvService;
45
+ /**
46
+ * Path on the app URL the user is returned to after connecting, e.g. `/app/settings`.
47
+ */
48
+ readonly successPath: string;
49
+ /**
50
+ * Path on the app URL the user is returned to after a failed connect. Defaults to `successPath`.
51
+ */
52
+ readonly failurePath?: Maybe<string>;
53
+ /**
54
+ * The scopes to request. Defaults to {@link DEFAULT_DISCORD_OAUTH_SCOPES}.
55
+ */
56
+ readonly scopes?: Maybe<readonly DiscordOAuthScope[]>;
57
+ }
58
+ /**
59
+ * Builds the Discord connect flow's configuration from the app's configured origins.
60
+ *
61
+ * Nothing here is read from the environment as a value: the redirect URI is derived from the app's
62
+ * OAuth origin plus the mounted controller path, and the return URLs from the app URL plus
63
+ * code-declared paths. The client credentials are read by `discordOAuthServiceConfigFactory` in
64
+ * `@dereekb/discord/nestjs`, so registering Discord adds no deployment configuration here.
65
+ *
66
+ * @param config - The env service, the return paths, and the optional scope override.
67
+ * @returns The validated service configuration.
68
+ */
69
+ export declare function discordUserExternalConnectionOAuthServiceConfigFactory(config: DiscordUserExternalConnectionOAuthServiceConfigFactoryConfig): DiscordUserExternalConnectionOAuthServiceConfig;
@@ -0,0 +1,18 @@
1
+ import { AbstractUserExternalConnectionOAuthController } from '@dereekb/firebase-server/model';
2
+ import { DiscordUserExternalConnectionOAuthService } from './discord.oauth.connection.service';
3
+ /**
4
+ * Endpoints for the Discord external-connection authorization-code handoff.
5
+ *
6
+ * Mounted at `/oauth/discord`, matching the Angular registry's default authorize path of
7
+ * `/oauth/<providerType>/authorize`. Hosting rewrites do not strip the path, so this prefix is the
8
+ * public path — but an app with a global API route prefix must ALSO exclude these routes from it via
9
+ * {@link DISCORD_USER_EXTERNAL_CONNECTION_OAUTH_ROUTES_FOR_GLOBAL_ROUTE_EXCLUDE}, or they land under
10
+ * that prefix instead and no longer match the redirect URI registered with Discord.
11
+ *
12
+ * The `authorize` and `callback` routes come from the base class, so this declares only where they
13
+ * mount and which service serves them.
14
+ */
15
+ export declare class DiscordUserExternalConnectionOAuthController extends AbstractUserExternalConnectionOAuthController {
16
+ readonly oauthService: DiscordUserExternalConnectionOAuthService;
17
+ constructor(oauthService: DiscordUserExternalConnectionOAuthService);
18
+ }
@@ -0,0 +1,39 @@
1
+ import { type ModuleMetadata } from '@nestjs/common';
2
+ import { type DiscordOAuthScope } from '@dereekb/discord';
3
+ import { type Maybe } from '@dereekb/util';
4
+ export interface ProvideAppDiscordUserExternalConnectionOAuthMetadataConfig extends Pick<ModuleMetadata, 'imports' | 'exports' | 'providers'> {
5
+ /**
6
+ * This module requires the following dependencies in order to initialize properly:
7
+ * - DiscordOAuthApi
8
+ *
9
+ * This module declaration makes it easier to import a module that exports that dependency.
10
+ */
11
+ readonly dependencyModule?: Maybe<Required<ModuleMetadata>['imports']['0']>;
12
+ /**
13
+ * Path on the app URL the user is returned to after connecting, e.g. `/app/settings`.
14
+ */
15
+ readonly successPath: string;
16
+ /**
17
+ * Path on the app URL the user is returned to after a failed connect. Defaults to `successPath`.
18
+ */
19
+ readonly failurePath?: Maybe<string>;
20
+ /**
21
+ * The scopes to request. Defaults to `DEFAULT_DISCORD_OAUTH_SCOPES`.
22
+ */
23
+ readonly scopes?: Maybe<readonly DiscordOAuthScope[]>;
24
+ }
25
+ /**
26
+ * Convenience function used to generate ModuleMetadata for an app's Discord external-connection
27
+ * OAuth module.
28
+ *
29
+ * Opt-in, like the webhook module: importing the Discord OAuth module alone never mounts HTTP routes,
30
+ * so an app that only runs a Discord bot exposes no connect endpoints.
31
+ *
32
+ * The importing module must also supply `UserExternalConnectionServerActions` and
33
+ * `UserExternalConnectionStateCoder` — both exported by `appUserExternalConnectionModuleMetadata`,
34
+ * so pass that module in `imports`.
35
+ *
36
+ * @param config - The module metadata configuration.
37
+ * @returns NestJS ModuleMetadata mounting the Discord connect endpoints.
38
+ */
39
+ export declare function appDiscordUserExternalConnectionOAuthModuleMetadata(config: ProvideAppDiscordUserExternalConnectionOAuthMetadataConfig): ModuleMetadata;
@@ -0,0 +1,43 @@
1
+ import { type DiscordAccessToken, type DiscordOAuthAuthorizeUrlFactory, type DiscordOAuthCurrentUser } from '@dereekb/discord';
2
+ import { DiscordOAuthApi } from '@dereekb/discord/nestjs';
3
+ import { AbstractUserExternalConnectionOAuthService, UserExternalConnectionAccessor, UserExternalConnectionServerActions, UserExternalConnectionStateCoder, type UserExternalConnectionCredentials, type UserExternalConnectionOAuthExchangeInput, type UserExternalConnectionOAuthRefreshCredentialsInput, type UserExternalConnectionOAuthState } from '@dereekb/firebase-server/model';
4
+ import { type Maybe, type WebsiteUrl } from '@dereekb/util';
5
+ import { DiscordUserExternalConnectionOAuthServiceConfig } from './discord.oauth.connection.config';
6
+ export interface DiscordUserExternalConnectionCredentialsInput {
7
+ readonly accessToken: DiscordAccessToken;
8
+ /**
9
+ * The Discord account the token belongs to, when one could be read.
10
+ *
11
+ * Optional because the identity call is best-effort: a connection is fully usable unlabeled.
12
+ */
13
+ readonly currentUser?: Maybe<DiscordOAuthCurrentUser>;
14
+ }
15
+ /**
16
+ * Maps an exchanged Discord token, plus the identity it belongs to, to the credentials stored on the
17
+ * private connection document.
18
+ *
19
+ * The `refreshToken` written here is the one the exchange returned. Discord's refresh responses carry
20
+ * a refresh token of their own, so persisting whatever came back is correct whether or not it rotated.
21
+ *
22
+ * @param input - The exchanged token and the resolved Discord user, when one could be read.
23
+ * @returns The credentials to store.
24
+ */
25
+ export declare function discordUserExternalConnectionCredentials(input: DiscordUserExternalConnectionCredentialsInput): UserExternalConnectionCredentials;
26
+ /**
27
+ * Discord's half of the external-connection authorization-code handoff.
28
+ *
29
+ * Everything else — resolving who is connecting, surfacing a refusal, persisting the credentials,
30
+ * choosing the redirect — is the framework's.
31
+ */
32
+ export declare class DiscordUserExternalConnectionOAuthService extends AbstractUserExternalConnectionOAuthService {
33
+ readonly config: DiscordUserExternalConnectionOAuthServiceConfig;
34
+ readonly stateCoder: UserExternalConnectionStateCoder;
35
+ readonly userExternalConnectionActions: UserExternalConnectionServerActions;
36
+ readonly userExternalConnectionAccessor: UserExternalConnectionAccessor;
37
+ readonly oauthApi: DiscordOAuthApi;
38
+ readonly authorizeUrlFactory: DiscordOAuthAuthorizeUrlFactory;
39
+ constructor(config: DiscordUserExternalConnectionOAuthServiceConfig, stateCoder: UserExternalConnectionStateCoder, userExternalConnectionActions: UserExternalConnectionServerActions, userExternalConnectionAccessor: UserExternalConnectionAccessor, oauthApi: DiscordOAuthApi);
40
+ protected authorizeUrlForState(state: UserExternalConnectionOAuthState): WebsiteUrl;
41
+ protected credentialsForAuthorizationCode(input: UserExternalConnectionOAuthExchangeInput): Promise<UserExternalConnectionCredentials>;
42
+ refreshCredentials(input: UserExternalConnectionOAuthRefreshCredentialsInput): Promise<UserExternalConnectionCredentials>;
43
+ }
@@ -0,0 +1,4 @@
1
+ export * from './discord.oauth.connection.config';
2
+ export * from './discord.oauth.connection.controller';
3
+ export * from './discord.oauth.connection.module';
4
+ export * from './discord.oauth.connection.service';
package/index.cjs.js CHANGED
@@ -7728,14 +7728,19 @@ function _ts_generator$9(thisArg, body) {
7728
7728
  }
7729
7729
  /**
7730
7730
  * Derives a fallback read-error message from a resolved error code, distinguishing not-found from
7731
- * permission-denied. Accepts both the server-error form (`NOT_FOUND` / `PERMISSION_DENIED` /
7732
- * `FORBIDDEN`) and the Firebase HttpsError form (`not-found` / `permission-denied`).
7731
+ * permission-denied. Accepts both the server-error form (`NOT_FOUND` / `MODEL_NOT_AVAILABLE` /
7732
+ * `PERMISSION_DENIED` / `FORBIDDEN`) and the Firebase HttpsError form (`not-found` /
7733
+ * `permission-denied`).
7734
+ *
7735
+ * `MODEL_NOT_AVAILABLE` is the code a missing document actually produces on this path — the
7736
+ * per-key existence check throws {@link nestFirebaseDoesNotExistError}, i.e. `modelNotAvailableError()`
7737
+ * — so it must map to not-found rather than falling through to the generic message.
7733
7738
  *
7734
7739
  * @param code - The resolved error code (`serverErrorCode ?? firebaseErrorCode`), if any.
7735
7740
  * @returns `'not found'`, `'permission denied'`, or a generic `'unknown error'` fallback.
7736
7741
  */ function modelAccessReadErrorMessageFromCode(code) {
7737
7742
  var message;
7738
- if (code === firebase.NOT_FOUND_ERROR_CODE || code === 'not-found') {
7743
+ if (code === firebase.NOT_FOUND_ERROR_CODE || code === firebase.MODEL_NOT_AVAILABLE_ERROR_CODE || code === 'not-found') {
7739
7744
  message = 'not found';
7740
7745
  } else if (code === firebase.PERMISSION_DENIED_ERROR_CODE || code === firebase.FORBIDDEN_ERROR_CODE || code === 'permission-denied') {
7741
7746
  message = 'permission denied';
@@ -9418,6 +9423,12 @@ function _is_native_reflect_construct$1() {
9418
9423
  return this.env.appMcpUrl;
9419
9424
  }
9420
9425
  },
9426
+ {
9427
+ key: "appOAuthUrl",
9428
+ get: function get() {
9429
+ return this.env.appOAuthUrl;
9430
+ }
9431
+ },
9421
9432
  {
9422
9433
  key: "appWebhookUrl",
9423
9434
  get: function get() {
package/index.esm.js CHANGED
@@ -7726,14 +7726,19 @@ function _ts_generator$9(thisArg, body) {
7726
7726
  }
7727
7727
  /**
7728
7728
  * Derives a fallback read-error message from a resolved error code, distinguishing not-found from
7729
- * permission-denied. Accepts both the server-error form (`NOT_FOUND` / `PERMISSION_DENIED` /
7730
- * `FORBIDDEN`) and the Firebase HttpsError form (`not-found` / `permission-denied`).
7729
+ * permission-denied. Accepts both the server-error form (`NOT_FOUND` / `MODEL_NOT_AVAILABLE` /
7730
+ * `PERMISSION_DENIED` / `FORBIDDEN`) and the Firebase HttpsError form (`not-found` /
7731
+ * `permission-denied`).
7732
+ *
7733
+ * `MODEL_NOT_AVAILABLE` is the code a missing document actually produces on this path — the
7734
+ * per-key existence check throws {@link nestFirebaseDoesNotExistError}, i.e. `modelNotAvailableError()`
7735
+ * — so it must map to not-found rather than falling through to the generic message.
7731
7736
  *
7732
7737
  * @param code - The resolved error code (`serverErrorCode ?? firebaseErrorCode`), if any.
7733
7738
  * @returns `'not found'`, `'permission denied'`, or a generic `'unknown error'` fallback.
7734
7739
  */ function modelAccessReadErrorMessageFromCode(code) {
7735
7740
  var message;
7736
- if (code === NOT_FOUND_ERROR_CODE || code === 'not-found') {
7741
+ if (code === NOT_FOUND_ERROR_CODE || code === MODEL_NOT_AVAILABLE_ERROR_CODE || code === 'not-found') {
7737
7742
  message = 'not found';
7738
7743
  } else if (code === PERMISSION_DENIED_ERROR_CODE || code === FORBIDDEN_ERROR_CODE || code === 'permission-denied') {
7739
7744
  message = 'permission denied';
@@ -9416,6 +9421,12 @@ function _is_native_reflect_construct$1() {
9416
9421
  return this.env.appMcpUrl;
9417
9422
  }
9418
9423
  },
9424
+ {
9425
+ key: "appOAuthUrl",
9426
+ get: function get() {
9427
+ return this.env.appOAuthUrl;
9428
+ }
9429
+ },
9419
9430
  {
9420
9431
  key: "appWebhookUrl",
9421
9432
  get: function get() {
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server/mailgun",
3
- "version": "13.32.0",
3
+ "version": "13.33.0",
4
4
  "peerDependencies": {
5
- "@dereekb/analytics": "13.32.0",
6
- "@dereekb/firebase": "13.32.0",
7
- "@dereekb/firebase-server": "13.32.0",
8
- "@dereekb/date": "13.32.0",
9
- "@dereekb/nestjs": "13.32.0",
10
- "@dereekb/model": "13.32.0",
11
- "@dereekb/rxjs": "13.32.0",
12
- "@dereekb/util": "13.32.0"
5
+ "@dereekb/analytics": "13.33.0",
6
+ "@dereekb/firebase": "13.33.0",
7
+ "@dereekb/firebase-server": "13.33.0",
8
+ "@dereekb/date": "13.33.0",
9
+ "@dereekb/nestjs": "13.33.0",
10
+ "@dereekb/model": "13.33.0",
11
+ "@dereekb/rxjs": "13.33.0",
12
+ "@dereekb/util": "13.33.0"
13
13
  },
14
14
  "exports": {
15
15
  "./package.json": "./package.json",
package/mcp/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server/mcp",
3
- "version": "13.32.0",
3
+ "version": "13.33.0",
4
4
  "peerDependencies": {
5
- "@dereekb/analytics": "13.32.0",
6
- "@dereekb/date": "13.32.0",
7
- "@dereekb/firebase": "13.32.0",
8
- "@dereekb/firebase-server": "13.32.0",
9
- "@dereekb/firebase-server/oidc": "13.32.0",
10
- "@dereekb/model": "13.32.0",
11
- "@dereekb/nestjs": "13.32.0",
12
- "@dereekb/rxjs": "13.32.0",
13
- "@dereekb/util": "13.32.0",
14
- "@dereekb/zoho": "13.32.0",
5
+ "@dereekb/analytics": "13.33.0",
6
+ "@dereekb/date": "13.33.0",
7
+ "@dereekb/firebase": "13.33.0",
8
+ "@dereekb/firebase-server": "13.33.0",
9
+ "@dereekb/firebase-server/oidc": "13.33.0",
10
+ "@dereekb/model": "13.33.0",
11
+ "@dereekb/nestjs": "13.33.0",
12
+ "@dereekb/rxjs": "13.33.0",
13
+ "@dereekb/util": "13.33.0",
14
+ "@dereekb/zoho": "13.33.0",
15
15
  "@modelcontextprotocol/sdk": "1.29.0",
16
16
  "@nestjs/common": "^11.1.19",
17
17
  "@nestjs/core": "^11.1.19",