@countfinancial/cli 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +5 -28
  2. package/dist/__tests__/localCallbackServer.test.js +20 -0
  3. package/dist/__tests__/localCallbackServer.test.js.map +1 -1
  4. package/dist/__tests__/mcpLauncher.test.d.ts +1 -0
  5. package/dist/__tests__/mcpLauncher.test.js +40 -0
  6. package/dist/__tests__/mcpLauncher.test.js.map +1 -0
  7. package/dist/commands/mcp.command.js +1 -3
  8. package/dist/commands/mcp.command.js.map +1 -1
  9. package/dist/constants.d.ts +1 -0
  10. package/dist/constants.js +6 -0
  11. package/dist/constants.js.map +1 -1
  12. package/dist/index.js +2 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/partner-mcp/config.d.ts +6 -0
  15. package/dist/partner-mcp/config.js +25 -0
  16. package/dist/partner-mcp/config.js.map +1 -0
  17. package/dist/partner-mcp/index.d.ts +2 -0
  18. package/dist/partner-mcp/index.js +17 -0
  19. package/dist/partner-mcp/index.js.map +1 -0
  20. package/dist/partner-mcp/partnerApiClient.d.ts +34 -0
  21. package/dist/partner-mcp/partnerApiClient.js +233 -0
  22. package/dist/partner-mcp/partnerApiClient.js.map +1 -0
  23. package/dist/partner-mcp/resources/registerResources.d.ts +8 -0
  24. package/dist/partner-mcp/resources/registerResources.js +70 -0
  25. package/dist/partner-mcp/resources/registerResources.js.map +1 -0
  26. package/dist/partner-mcp/server.d.ts +7 -0
  27. package/dist/partner-mcp/server.js +17 -0
  28. package/dist/partner-mcp/server.js.map +1 -0
  29. package/dist/partner-mcp/signing.d.ts +22 -0
  30. package/dist/partner-mcp/signing.js +20 -0
  31. package/dist/partner-mcp/signing.js.map +1 -0
  32. package/dist/partner-mcp/tokenPersistence.d.ts +7 -0
  33. package/dist/partner-mcp/tokenPersistence.js +19 -0
  34. package/dist/partner-mcp/tokenPersistence.js.map +1 -0
  35. package/dist/partner-mcp/tools/definitions.d.ts +7 -0
  36. package/dist/partner-mcp/tools/definitions.js +1158 -0
  37. package/dist/partner-mcp/tools/definitions.js.map +1 -0
  38. package/dist/partner-mcp/tools/registerTools.d.ts +8 -0
  39. package/dist/partner-mcp/tools/registerTools.js +173 -0
  40. package/dist/partner-mcp/tools/registerTools.js.map +1 -0
  41. package/dist/partner-mcp/tools/schemas.d.ts +32 -0
  42. package/dist/partner-mcp/tools/schemas.js +47 -0
  43. package/dist/partner-mcp/tools/schemas.js.map +1 -0
  44. package/dist/partner-mcp/types.d.ts +48 -0
  45. package/dist/partner-mcp/types.js +2 -0
  46. package/dist/partner-mcp/types.js.map +1 -0
  47. package/dist/services/localCallbackServer.service.js +41 -15
  48. package/dist/services/localCallbackServer.service.js.map +1 -1
  49. package/dist/services/mcpLauncher.service.d.ts +2 -4
  50. package/dist/services/mcpLauncher.service.js +12 -16
  51. package/dist/services/mcpLauncher.service.js.map +1 -1
  52. package/dist/services/oauthLogin.service.js +3 -1
  53. package/dist/services/oauthLogin.service.js.map +1 -1
  54. package/package.json +4 -3
@@ -0,0 +1,7 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { CountPartnerMcpConfig } from './types.js';
3
+ interface CreateServerParams {
4
+ config: CountPartnerMcpConfig;
5
+ }
6
+ export declare function createServer(params: CreateServerParams): McpServer;
7
+ export {};
@@ -0,0 +1,17 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { CLI_VERSION } from '../constants.js';
3
+ import { PartnerApiClient } from './partnerApiClient.js';
4
+ import { registerResources } from './resources/registerResources.js';
5
+ import { registerTools } from './tools/registerTools.js';
6
+ export function createServer(params) {
7
+ const { config } = params;
8
+ const server = new McpServer({
9
+ name: '@countfinancial/cli',
10
+ version: CLI_VERSION,
11
+ });
12
+ const client = new PartnerApiClient({ config });
13
+ registerTools({ server, client });
14
+ registerResources({ server, client });
15
+ return server;
16
+ }
17
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/partner-mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAOzD,MAAM,UAAU,YAAY,CAAC,MAA0B;IACrD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,WAAW;KACrB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEhD,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAEtC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { HttpMethod, JsonObject } from './types.js';
2
+ interface ComputeBodyHashParams {
3
+ method: HttpMethod;
4
+ body?: JsonObject;
5
+ }
6
+ interface ComputeSignatureParams {
7
+ method: HttpMethod;
8
+ path: string;
9
+ timestamp: string;
10
+ body?: JsonObject;
11
+ clientSecret: string;
12
+ }
13
+ interface BuildSignatureBaseStringParams {
14
+ method: HttpMethod;
15
+ path: string;
16
+ timestamp: string;
17
+ bodyHash?: string;
18
+ }
19
+ export declare function computeBodyHash(params: ComputeBodyHashParams): string;
20
+ export declare function buildSignatureBaseString(params: BuildSignatureBaseStringParams): string;
21
+ export declare function computePartnerSignature(params: ComputeSignatureParams): string;
22
+ export {};
@@ -0,0 +1,20 @@
1
+ import crypto from 'node:crypto';
2
+ const METHODS_WITH_BODY_HASH = new Set(['POST', 'PUT', 'PATCH']);
3
+ export function computeBodyHash(params) {
4
+ const { method, body } = params;
5
+ if (!METHODS_WITH_BODY_HASH.has(method)) {
6
+ return '';
7
+ }
8
+ return crypto.createHash('sha256').update(JSON.stringify(body ?? {})).digest('hex');
9
+ }
10
+ export function buildSignatureBaseString(params) {
11
+ const { method, path, timestamp, bodyHash = '' } = params;
12
+ return `${method}:${path}:${timestamp}:${bodyHash}`;
13
+ }
14
+ export function computePartnerSignature(params) {
15
+ const { method, path, timestamp, body, clientSecret } = params;
16
+ const bodyHash = computeBodyHash({ method, body });
17
+ const baseString = buildSignatureBaseString({ method, path, timestamp, bodyHash });
18
+ return crypto.createHmac('sha256', clientSecret).update(baseString).digest('hex');
19
+ }
20
+ //# sourceMappingURL=signing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.js","sourceRoot":"","sources":["../../src/partner-mcp/signing.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAsB7E,MAAM,UAAU,eAAe,CAAC,MAA6B;IAC3D,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAEhC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAsC;IAC7E,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAC1D,OAAO,GAAG,MAAM,IAAI,IAAI,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAA8B;IACpE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IAC/D,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,wBAAwB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEnF,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpF,CAAC"}
@@ -0,0 +1,7 @@
1
+ interface PersistRefreshedTokensParams {
2
+ credentialsFilePath: string;
3
+ accessToken: string;
4
+ refreshToken: string;
5
+ }
6
+ export declare function persistRefreshedTokens(params: PersistRefreshedTokensParams): Promise<void>;
7
+ export {};
@@ -0,0 +1,19 @@
1
+ import fs from 'node:fs/promises';
2
+ export async function persistRefreshedTokens(params) {
3
+ const { credentialsFilePath, accessToken, refreshToken } = params;
4
+ let storedCredentials;
5
+ try {
6
+ const rawContents = await fs.readFile(credentialsFilePath, 'utf8');
7
+ storedCredentials = JSON.parse(rawContents);
8
+ }
9
+ catch {
10
+ return;
11
+ }
12
+ storedCredentials.accessToken = accessToken;
13
+ storedCredentials.refreshToken = refreshToken;
14
+ await fs.writeFile(credentialsFilePath, `${JSON.stringify(storedCredentials, null, 2)}\n`, {
15
+ encoding: 'utf8',
16
+ mode: 0o600,
17
+ });
18
+ }
19
+ //# sourceMappingURL=tokenPersistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenPersistence.js","sourceRoot":"","sources":["../../src/partner-mcp/tokenPersistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAQlC,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAoC;IAC/E,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IAElE,IAAI,iBAA0C,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QACnE,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAA4B,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,iBAAiB,CAAC,WAAW,GAAG,WAAW,CAAC;IAC5C,iBAAiB,CAAC,YAAY,GAAG,YAAY,CAAC;IAE9C,MAAM,EAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACzF,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ToolDefinition } from '../types.js';
2
+ export declare const toolDefinitions: ToolDefinition[];
3
+ interface GetToolDefinitionParams {
4
+ toolName: string;
5
+ }
6
+ export declare function getToolDefinition(params: GetToolDefinitionParams): ToolDefinition | undefined;
7
+ export {};