@activepieces/piece-metabase 0.1.4 → 0.1.6

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/package.json CHANGED
@@ -1,21 +1,23 @@
1
1
  {
2
2
  "name": "@activepieces/piece-metabase",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "dependencies": {
5
5
  "@anthropic-ai/sdk": "0.33.1",
6
6
  "@sinclair/typebox": "0.34.11",
7
- "axios": "1.7.8",
7
+ "axios": "1.8.3",
8
8
  "axios-retry": "4.4.1",
9
9
  "deepmerge-ts": "7.1.0",
10
+ "jsonwebtoken": "9.0.1",
10
11
  "mime-types": "2.1.35",
11
12
  "nanoid": "3.3.8",
12
13
  "openai": "4.67.1",
14
+ "puppeteer": "22.15.0",
13
15
  "replicate": "0.34.1",
14
16
  "semver": "7.6.0",
15
- "zod": "3.23.8",
16
- "@activepieces/pieces-common": "0.4.1",
17
- "@activepieces/pieces-framework": "0.7.42",
18
- "@activepieces/shared": "0.10.145",
17
+ "zod": "3.24.2",
18
+ "@activepieces/pieces-common": "0.4.4",
19
+ "@activepieces/pieces-framework": "0.7.46",
20
+ "@activepieces/shared": "0.10.171",
19
21
  "tslib": "1.14.1"
20
22
  },
21
23
  "overrides": {
package/src/index.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  export declare const metabaseAuth: import("@activepieces/pieces-framework").CustomAuthProperty<{
2
2
  baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
3
3
  apiKey: import("@activepieces/pieces-framework").SecretTextProperty<true>;
4
+ embeddingKey: import("@activepieces/pieces-framework").ShortTextProperty<false>;
4
5
  }>;
5
6
  export declare const metabase: import("@activepieces/pieces-framework").Piece<import("@activepieces/pieces-framework").CustomAuthProperty<{
6
7
  baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
7
8
  apiKey: import("@activepieces/pieces-framework").SecretTextProperty<true>;
9
+ embeddingKey: import("@activepieces/pieces-framework").ShortTextProperty<false>;
8
10
  }>>;
package/src/index.js CHANGED
@@ -5,10 +5,12 @@ const tslib_1 = require("tslib");
5
5
  const pieces_framework_1 = require("@activepieces/pieces-framework");
6
6
  const get_question_1 = require("./lib/actions/get-question");
7
7
  const get_png_rendering_1 = require("./lib/actions/get-png-rendering");
8
+ const get_dashboard_1 = require("./lib/actions/get-dashboard");
8
9
  const common_1 = require("./lib/common");
9
10
  const pieces_common_1 = require("@activepieces/pieces-common");
11
+ const get_graph_question_1 = require("./lib/actions/get-graph-question");
10
12
  exports.metabaseAuth = pieces_framework_1.PieceAuth.CustomAuth({
11
- description: 'Metabase authentication requires a username and password.',
13
+ description: 'Metabase authentication requires a baseUrl and a password.',
12
14
  required: true,
13
15
  props: {
14
16
  baseUrl: pieces_framework_1.Property.ShortText({
@@ -20,6 +22,11 @@ exports.metabaseAuth = pieces_framework_1.PieceAuth.CustomAuth({
20
22
  description: 'Generate one on your Metabase instance (settings -> authentication -> API keys)',
21
23
  required: true,
22
24
  }),
25
+ embeddingKey: pieces_framework_1.Property.ShortText({
26
+ displayName: 'Embedding key',
27
+ description: 'Needed if you want to generate a graph of a question (settings -> embedding -> static embedding).',
28
+ required: false,
29
+ }),
23
30
  },
24
31
  validate: (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ auth }) {
25
32
  try {
@@ -45,8 +52,13 @@ exports.metabase = (0, pieces_framework_1.createPiece)({
45
52
  auth: exports.metabaseAuth,
46
53
  minimumSupportedRelease: '0.30.0',
47
54
  logoUrl: 'https://cdn.activepieces.com/pieces/metabase.png',
48
- authors: ['AdamSelene', 'abuaboud', 'valentin-mourtialon'],
49
- actions: [get_question_1.getQuestion, get_png_rendering_1.getQuestionPngPreview],
55
+ authors: ['AdamSelene', 'abuaboud', 'valentin-mourtialon', 'Kevinyu-alan'],
56
+ actions: [
57
+ get_question_1.getQuestion,
58
+ get_png_rendering_1.getQuestionPngPreview,
59
+ get_dashboard_1.getDashboardQuestions,
60
+ get_graph_question_1.getGraphQuestion,
61
+ ],
50
62
  triggers: [],
51
63
  });
52
64
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/community/metabase/src/index.ts"],"names":[],"mappings":";;;;AAAA,qEAIwC;AACxC,6DAAyD;AACzD,uEAAwE;AACxE,yCAAgD;AAChD,+DAAyD;AAE5C,QAAA,YAAY,GAAG,4BAAS,CAAC,UAAU,CAAC;IAC/C,WAAW,EAAE,2DAA2D;IACxE,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE;QACL,OAAO,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC1B,WAAW,EAAE,uBAAuB;YACpC,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,MAAM,EAAE,4BAAS,CAAC,UAAU,CAAC;YAC3B,WAAW,EAAE,SAAS;YACtB,WAAW,EACT,iFAAiF;YACnF,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IAED,QAAQ,EAAE,KAAiB,EAAE,oDAAZ,EAAE,IAAI,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,IAAA,yBAAgB,EACpB;gBACE,QAAQ,EAAE,uBAAuB;gBACjC,MAAM,EAAE,0BAAU,CAAC,GAAG;aACvB,EACD,IAAI,CACL,CAAC;YACF,OAAO;gBACL,KAAK,EAAE,IAAI;aACZ,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,6BAA6B;aACrC,CAAC;QACJ,CAAC;IACH,CAAC,CAAA;CACF,CAAC,CAAC;AACU,QAAA,QAAQ,GAAG,IAAA,8BAAW,EAAC;IAClC,WAAW,EAAE,UAAU;IACvB,WAAW,EAAE,uDAAuD;IAEpE,IAAI,EAAE,oBAAY;IAClB,uBAAuB,EAAE,QAAQ;IACjC,OAAO,EAAE,kDAAkD;IAC3D,OAAO,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,qBAAqB,CAAC;IAC1D,OAAO,EAAE,CAAC,0BAAW,EAAE,yCAAqB,CAAC;IAC7C,QAAQ,EAAE,EAAE;CACb,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/community/metabase/src/index.ts"],"names":[],"mappings":";;;;AAAA,qEAIwC;AACxC,6DAAyD;AACzD,uEAAwE;AACxE,+DAAoE;AACpE,yCAAgD;AAChD,+DAAyD;AACzD,yEAAoE;AAEvD,QAAA,YAAY,GAAG,4BAAS,CAAC,UAAU,CAAC;IAC/C,WAAW,EAAE,4DAA4D;IACzE,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE;QACL,OAAO,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC1B,WAAW,EAAE,uBAAuB;YACpC,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,MAAM,EAAE,4BAAS,CAAC,UAAU,CAAC;YAC3B,WAAW,EAAE,SAAS;YACtB,WAAW,EACT,iFAAiF;YACnF,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,YAAY,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC/B,WAAW,EAAE,eAAe;YAC5B,WAAW,EACT,mGAAmG;YACrG,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH;IAED,QAAQ,EAAE,KAAiB,EAAE,oDAAZ,EAAE,IAAI,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,IAAA,yBAAgB,EACpB;gBACE,QAAQ,EAAE,uBAAuB;gBACjC,MAAM,EAAE,0BAAU,CAAC,GAAG;aACvB,EACD,IAAI,CACL,CAAC;YACF,OAAO;gBACL,KAAK,EAAE,IAAI;aACZ,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,6BAA6B;aACrC,CAAC;QACJ,CAAC;IACH,CAAC,CAAA;CACF,CAAC,CAAC;AACU,QAAA,QAAQ,GAAG,IAAA,8BAAW,EAAC;IAClC,WAAW,EAAE,UAAU;IACvB,WAAW,EAAE,uDAAuD;IAEpE,IAAI,EAAE,oBAAY;IAClB,uBAAuB,EAAE,QAAQ;IACjC,OAAO,EAAE,kDAAkD;IAC3D,OAAO,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,cAAc,CAAC;IAC1E,OAAO,EAAE;QACP,0BAAW;QACX,yCAAqB;QACrB,qCAAqB;QACrB,qCAAgB;KACjB;IACD,QAAQ,EAAE,EAAE;CACb,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const getDashboardQuestions: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").CustomAuthProperty<{
2
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
3
+ apiKey: import("@activepieces/pieces-framework").SecretTextProperty<true>;
4
+ embeddingKey: import("@activepieces/pieces-framework").ShortTextProperty<false>;
5
+ }>, {
6
+ dashboardId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
7
+ parameters: import("@activepieces/pieces-framework").ObjectProperty<false>;
8
+ }>;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDashboardQuestions = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@activepieces/pieces-framework");
6
+ const common_1 = require("../common");
7
+ const __1 = require("../..");
8
+ const pieces_common_1 = require("@activepieces/pieces-common");
9
+ exports.getDashboardQuestions = (0, pieces_framework_1.createAction)({
10
+ name: 'getDashboardQuestions',
11
+ auth: __1.metabaseAuth,
12
+ requireAuth: true,
13
+ displayName: 'Get Dashboard Questions',
14
+ description: 'Execute all questions across all tabs in a Metabase dashboard and return their consolidated results in a single response',
15
+ props: {
16
+ dashboardId: pieces_framework_1.Property.ShortText({
17
+ displayName: 'Metabase Dashboard ID',
18
+ required: true,
19
+ }),
20
+ parameters: pieces_framework_1.Property.Object({
21
+ displayName: 'Parameters (slug name -> value)',
22
+ description: 'Dashboard parameters to apply to all questions',
23
+ required: false,
24
+ }),
25
+ },
26
+ run(_a) {
27
+ return tslib_1.__awaiter(this, arguments, void 0, function* ({ auth, propsValue }) {
28
+ const dashboardId = propsValue.dashboardId.split('-')[0];
29
+ const dashboardData = yield (0, common_1.queryMetabaseApi)({ endpoint: `dashboard/${dashboardId}`, method: pieces_common_1.HttpMethod.GET }, auth);
30
+ if (dashboardData.error) {
31
+ throw new Error(`Error fetching dashboard: ${dashboardData.error}`);
32
+ }
33
+ const dashboardParameters = dashboardData.parameters || [];
34
+ const result = {
35
+ dashboard_name: dashboardData.name || 'Unknown Dashboard',
36
+ available_parameters: dashboardParameters.map((param) => {
37
+ var _a;
38
+ return ({
39
+ id: param.id,
40
+ name: param.name || 'Unknown',
41
+ slug: param.slug || '',
42
+ type: param.type || '',
43
+ possible_values: ((_a = param.values_source_config) === null || _a === void 0 ? void 0 : _a.values) || [],
44
+ });
45
+ }),
46
+ cards_results: {},
47
+ };
48
+ // Execute each card and collect results
49
+ for (const dashcard of dashboardData.dashcards || []) {
50
+ const cardId = dashcard.card_id;
51
+ const dashcardId = dashcard.id;
52
+ if (!cardId)
53
+ continue;
54
+ let cardName = 'Unknown';
55
+ if (dashcard.card && typeof dashcard.card === 'object') {
56
+ cardName = dashcard.card.name || `Card ${cardId}`;
57
+ }
58
+ const cardParameters = [];
59
+ // Map dashboard parameters to card parameters using parameter_mappings
60
+ if (propsValue.parameters && dashcard.parameter_mappings) {
61
+ for (const mapping of dashcard.parameter_mappings) {
62
+ const paramId = mapping.parameter_id;
63
+ // Find corresponding dashboard parameter
64
+ const dashParam = dashboardParameters.find((p) => p.id === paramId);
65
+ if (dashParam &&
66
+ dashParam.slug &&
67
+ propsValue.parameters[dashParam.slug] !== undefined) {
68
+ cardParameters.push({
69
+ id: paramId,
70
+ target: mapping.target,
71
+ type: dashParam.type,
72
+ value: propsValue.parameters[dashParam.slug],
73
+ });
74
+ }
75
+ }
76
+ }
77
+ try {
78
+ const cardResult = yield (0, common_1.queryMetabaseApi)({
79
+ endpoint: `dashboard/${dashboardId}/dashcard/${dashcardId}/card/${cardId}/query/json`,
80
+ method: pieces_common_1.HttpMethod.POST,
81
+ body: {
82
+ parameters: cardParameters,
83
+ },
84
+ }, auth);
85
+ const cardIdStr = String(cardId);
86
+ result.cards_results[cardIdStr] = {
87
+ name: cardName,
88
+ data: cardResult,
89
+ };
90
+ }
91
+ catch (error) {
92
+ let errorMessage = 'Unknown error';
93
+ if (error &&
94
+ typeof error === 'object' &&
95
+ 'message' in error &&
96
+ typeof error.message === 'string') {
97
+ errorMessage = error.message;
98
+ }
99
+ const cardIdStr = String(cardId);
100
+ result.cards_results[cardIdStr] = {
101
+ name: cardName,
102
+ error: `Failed to execute: ${errorMessage}`,
103
+ };
104
+ }
105
+ }
106
+ return result;
107
+ });
108
+ },
109
+ });
110
+ //# sourceMappingURL=get-dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-dashboard.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/metabase/src/lib/actions/get-dashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const getGraphQuestion: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").CustomAuthProperty<{
2
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
3
+ apiKey: import("@activepieces/pieces-framework").SecretTextProperty<true>;
4
+ embeddingKey: import("@activepieces/pieces-framework").ShortTextProperty<false>;
5
+ }>, {
6
+ questionId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
7
+ parameters: import("@activepieces/pieces-framework").ObjectProperty<false>;
8
+ graphName: import("@activepieces/pieces-framework").ShortTextProperty<false>;
9
+ }>;
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getGraphQuestion = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@activepieces/pieces-framework");
6
+ const __1 = require("../..");
7
+ const jsonwebtoken_1 = tslib_1.__importDefault(require("jsonwebtoken"));
8
+ const puppeteer_1 = tslib_1.__importDefault(require("puppeteer"));
9
+ exports.getGraphQuestion = (0, pieces_framework_1.createAction)({
10
+ name: 'getGraphQuestion',
11
+ auth: __1.metabaseAuth,
12
+ requireAuth: true,
13
+ displayName: 'Get the graph of the question',
14
+ description: 'Get the graph of a Metabase question and save it as a png',
15
+ props: {
16
+ questionId: pieces_framework_1.Property.ShortText({
17
+ displayName: 'Metabase question ID',
18
+ required: true,
19
+ }),
20
+ parameters: pieces_framework_1.Property.Object({
21
+ displayName: 'Parameters (slug name -> value)',
22
+ required: false,
23
+ }),
24
+ graphName: pieces_framework_1.Property.ShortText({
25
+ displayName: 'The name of the graph (without the extension)',
26
+ required: false,
27
+ }),
28
+ },
29
+ run(_a) {
30
+ return tslib_1.__awaiter(this, arguments, void 0, function* ({ auth, propsValue, files }) {
31
+ if (!auth.embeddingKey)
32
+ return 'An embedding key is needed.';
33
+ const questionId = propsValue.questionId.split('-')[0];
34
+ const numericQuestionId = parseInt(questionId);
35
+ const payload = {
36
+ resource: { question: numericQuestionId },
37
+ params: propsValue.parameters,
38
+ exp: Math.round(Date.now() / 1000) + 10 * 60,
39
+ };
40
+ const token = jsonwebtoken_1.default.sign(payload, auth.embeddingKey);
41
+ const graphName = propsValue.graphName
42
+ ? propsValue.graphName + '.png'
43
+ : `metabase_question_${questionId}.png`;
44
+ const iframeUrl = auth.baseUrl + '/embed/question/' + token + '#bordered=true&titled=true';
45
+ const browser = yield puppeteer_1.default.launch({
46
+ headless: true,
47
+ args: ['--no-sandbox', '--disable-setuid-sandbox'],
48
+ });
49
+ try {
50
+ const page = yield browser.newPage();
51
+ yield page.setViewport({
52
+ width: 1600,
53
+ height: 1200,
54
+ deviceScaleFactor: 2,
55
+ });
56
+ const response = yield page.goto(iframeUrl, {
57
+ waitUntil: 'networkidle0',
58
+ timeout: 30000,
59
+ });
60
+ if (!response || !response.ok()) {
61
+ throw new Error(`Page load failed with status: ${response ? response.status() : 400}`);
62
+ }
63
+ const screenshotBuffer = yield page.screenshot({
64
+ path: graphName,
65
+ type: 'png',
66
+ clip: {
67
+ x: 0,
68
+ y: 0,
69
+ width: 1600,
70
+ height: 1120, // so it screenshots only the graph
71
+ },
72
+ });
73
+ const fileUrl = yield files.write({
74
+ fileName: graphName,
75
+ data: screenshotBuffer,
76
+ });
77
+ return {
78
+ file: {
79
+ filename: graphName,
80
+ base64Content: screenshotBuffer.toString('base64'),
81
+ download: fileUrl,
82
+ },
83
+ iframeUrl,
84
+ };
85
+ }
86
+ catch (error) {
87
+ console.error('Please verify that either your embedding key and question id are valid or that the question is embedded and published.');
88
+ console.error('Error capturing Metabase chart:', error);
89
+ throw error;
90
+ }
91
+ finally {
92
+ yield browser.close();
93
+ }
94
+ });
95
+ },
96
+ });
97
+ //# sourceMappingURL=get-graph-question.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-graph-question.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/metabase/src/lib/actions/get-graph-question.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  export declare const getQuestionPngPreview: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").CustomAuthProperty<{
2
2
  baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
3
3
  apiKey: import("@activepieces/pieces-framework").SecretTextProperty<true>;
4
+ embeddingKey: import("@activepieces/pieces-framework").ShortTextProperty<false>;
4
5
  }>, {
5
6
  questionId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
6
7
  }>;
@@ -1,6 +1,7 @@
1
1
  export declare const getQuestion: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").CustomAuthProperty<{
2
2
  baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
3
3
  apiKey: import("@activepieces/pieces-framework").SecretTextProperty<true>;
4
+ embeddingKey: import("@activepieces/pieces-framework").ShortTextProperty<false>;
4
5
  }>, {
5
6
  questionId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
6
7
  parameters: import("@activepieces/pieces-framework").ObjectProperty<false>;