piece-signal-cli-rest-api 0.1.6 → 0.1.7

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,6 +1,6 @@
1
1
  {
2
2
  "name": "piece-signal-cli-rest-api",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "dependencies": {
5
5
  "@sinclair/typebox": "0.34.11",
6
6
  "ai": "5.0.104",
package/src/index.js CHANGED
@@ -37,6 +37,8 @@ const list_attachments_1 = require("./lib/actions/list-attachments");
37
37
  const search_numbers_1 = require("./lib/actions/search-numbers");
38
38
  const list_identities_1 = require("./lib/actions/list-identities");
39
39
  const update_account_settings_1 = require("./lib/actions/update-account-settings");
40
+ const request_approval_message_1 = require("./lib/actions/request-approval-message");
41
+ const resume_approval_flow_1 = require("./lib/actions/resume-approval-flow");
40
42
  const new_message_received_1 = require("./lib/triggers/new-message-received");
41
43
  const new_group_member_1 = require("./lib/triggers/new-group-member");
42
44
  exports.signalCliRestApi = (0, pieces_framework_1.createPiece)({
@@ -81,6 +83,8 @@ exports.signalCliRestApi = (0, pieces_framework_1.createPiece)({
81
83
  search_numbers_1.searchNumbers,
82
84
  list_identities_1.listIdentities,
83
85
  update_account_settings_1.updateAccountSettings,
86
+ request_approval_message_1.requestApprovalMessage,
87
+ resume_approval_flow_1.resumeApprovalFlow,
84
88
  ],
85
89
  triggers: [new_message_received_1.newMessageReceived, new_group_member_1.newGroupMember],
86
90
  });
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/community/signal-cli-rest-api/src/index.ts"],"names":[],"mappings":";;;AAAA,qEAA6D;AAC7D,iDAAqD;AACrD,4CAAyD;AACzD,6DAAyD;AACzD,6DAAyD;AACzD,2DAAuD;AACvD,uDAAmD;AACnD,6DAAyD;AACzD,6DAAyD;AACzD,6EAAuE;AACvE,uFAAiF;AACjF,2EAAqE;AACrE,qFAA+E;AAC/E,yDAAqD;AACrD,yDAAqD;AACrD,2DAAuD;AACvD,+DAA2D;AAC3D,2DAAuD;AACvD,iEAA6D;AAC7D,+DAA2D;AAC3D,iEAA6D;AAC7D,+DAA2D;AAC3D,mEAA+D;AAC/D,6DAAyD;AACzD,6DAAyD;AACzD,2DAAuD;AACvD,+DAA2D;AAC3D,qEAA+D;AAC/D,6DAAyD;AACzD,yDAAqD;AACrD,+DAA2D;AAC3D,+EAA0E;AAC1E,qEAAiE;AACjE,iEAA6D;AAC7D,mEAA+D;AAC/D,mFAA8E;AAC9E,8EAAyE;AACzE,sEAAiE;AAEpD,QAAA,gBAAgB,GAAG,IAAA,8BAAW,EAAC;IAC3C,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,wDAAwD;IACrE,IAAI,EAAE,2BAAoB;IAC1B,uBAAuB,EAAE,QAAQ;IACjC,OAAO,EAAE,gDAAgD;IACzD,UAAU,EAAE,CAAC,sBAAa,CAAC,aAAa,CAAC;IACzC,OAAO,EAAE,EAAE;IACX,OAAO,EAAE;QACR,0BAAW;QACX,0BAAW;QACX,wBAAU;QACV,oBAAQ;QACR,0BAAW;QACX,0BAAW;QACX,wCAAiB;QACjB,kDAAsB;QACtB,sCAAgB;QAChB,gDAAqB;QACrB,sBAAS;QACT,sBAAS;QACT,wBAAU;QACV,4BAAY;QACZ,wBAAU;QACV,8BAAa;QACb,4BAAY;QACZ,8BAAa;QACb,4BAAY;QACZ,gCAAc;QACd,0BAAW;QACX,0BAAW;QACX,wBAAU;QACV,4BAAY;QACZ,gCAAa;QACb,0BAAW;QACX,sBAAS;QACT,4BAAY;QACZ,2CAAmB;QACnB,kCAAe;QACf,8BAAa;QACb,gCAAc;QACd,+CAAqB;KACrB;IACD,QAAQ,EAAE,CAAC,yCAAkB,EAAE,iCAAc,CAAC;CAC9C,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/community/signal-cli-rest-api/src/index.ts"],"names":[],"mappings":";;;AAAA,qEAA6D;AAC7D,iDAAqD;AACrD,4CAAyD;AACzD,6DAAyD;AACzD,6DAAyD;AACzD,2DAAuD;AACvD,uDAAmD;AACnD,6DAAyD;AACzD,6DAAyD;AACzD,6EAAuE;AACvE,uFAAiF;AACjF,2EAAqE;AACrE,qFAA+E;AAC/E,yDAAqD;AACrD,yDAAqD;AACrD,2DAAuD;AACvD,+DAA2D;AAC3D,2DAAuD;AACvD,iEAA6D;AAC7D,+DAA2D;AAC3D,iEAA6D;AAC7D,+DAA2D;AAC3D,mEAA+D;AAC/D,6DAAyD;AACzD,6DAAyD;AACzD,2DAAuD;AACvD,+DAA2D;AAC3D,qEAA+D;AAC/D,6DAAyD;AACzD,yDAAqD;AACrD,+DAA2D;AAC3D,+EAA0E;AAC1E,qEAAiE;AACjE,iEAA6D;AAC7D,mEAA+D;AAC/D,mFAA8E;AAC9E,qFAAgF;AAChF,6EAAwE;AACxE,8EAAyE;AACzE,sEAAiE;AAEpD,QAAA,gBAAgB,GAAG,IAAA,8BAAW,EAAC;IAC3C,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,wDAAwD;IACrE,IAAI,EAAE,2BAAoB;IAC1B,uBAAuB,EAAE,QAAQ;IACjC,OAAO,EAAE,gDAAgD;IACzD,UAAU,EAAE,CAAC,sBAAa,CAAC,aAAa,CAAC;IACzC,OAAO,EAAE,EAAE;IACX,OAAO,EAAE;QACR,0BAAW;QACX,0BAAW;QACX,wBAAU;QACV,oBAAQ;QACR,0BAAW;QACX,0BAAW;QACX,wCAAiB;QACjB,kDAAsB;QACtB,sCAAgB;QAChB,gDAAqB;QACrB,sBAAS;QACT,sBAAS;QACT,wBAAU;QACV,4BAAY;QACZ,wBAAU;QACV,8BAAa;QACb,4BAAY;QACZ,8BAAa;QACb,4BAAY;QACZ,gCAAc;QACd,0BAAW;QACX,0BAAW;QACX,wBAAU;QACV,4BAAY;QACZ,gCAAa;QACb,0BAAW;QACX,sBAAS;QACT,4BAAY;QACZ,2CAAmB;QACnB,kCAAe;QACf,8BAAa;QACb,gCAAc;QACd,+CAAqB;QACrB,iDAAsB;QACtB,yCAAkB;KAClB;IACD,QAAQ,EAAE,CAAC,yCAAkB,EAAE,iCAAc,CAAC;CAC9C,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ export declare const requestApprovalMessage: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").CustomAuthProperty<{
2
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
3
+ useBasicAuth: import("@activepieces/pieces-framework").CheckboxProperty<false>;
4
+ basicAuthUsername: import("@activepieces/pieces-framework").ShortTextProperty<false>;
5
+ basicAuthPassword: import("@activepieces/pieces-framework").SecretTextProperty<false>;
6
+ defaultNumber: import("@activepieces/pieces-framework").ShortTextProperty<false>;
7
+ mode: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
8
+ }>, {
9
+ number: import("@activepieces/pieces-framework").ShortTextProperty<false>;
10
+ recipients: import("@activepieces/pieces-framework").ArrayProperty<true>;
11
+ message: import("@activepieces/pieces-framework").LongTextProperty<true>;
12
+ approve_emoji: import("@activepieces/pieces-framework").ShortTextProperty<false>;
13
+ disapprove_emoji: import("@activepieces/pieces-framework").ShortTextProperty<false>;
14
+ timeout_seconds: import("@activepieces/pieces-framework").NumberProperty<false>;
15
+ }>;
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requestApprovalMessage = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@activepieces/pieces-framework");
6
+ const auth_1 = require("../common/auth");
7
+ const api_client_1 = require("../common/api-client");
8
+ const utils_1 = require("../common/utils");
9
+ const shared_1 = require("@activepieces/shared");
10
+ const shared_2 = require("@activepieces/shared");
11
+ exports.requestApprovalMessage = (0, pieces_framework_1.createAction)({
12
+ auth: auth_1.signalCliRestApiAuth,
13
+ name: 'request_approval_message',
14
+ displayName: 'Request Approval (Signal)',
15
+ description: 'Send an approval message via Signal and wait for a reaction response. This action sends a message and pauses the flow until the recipient reacts with an approve or disapprove emoji.',
16
+ props: {
17
+ number: pieces_framework_1.Property.ShortText({
18
+ displayName: 'Phone Number',
19
+ description: 'Registered phone number in international format (e.g., +43123456789). If not provided, uses the default number from the connection.',
20
+ required: false,
21
+ }),
22
+ recipients: utils_1.commonProps.recipients,
23
+ message: utils_1.commonProps.message,
24
+ approve_emoji: pieces_framework_1.Property.ShortText({
25
+ displayName: 'Approve Emoji',
26
+ description: 'Emoji for approval (e.g., 👍)',
27
+ required: false,
28
+ defaultValue: '👍',
29
+ }),
30
+ disapprove_emoji: pieces_framework_1.Property.ShortText({
31
+ displayName: 'Disapprove Emoji',
32
+ description: 'Emoji for disapproval (e.g., 👎)',
33
+ required: false,
34
+ defaultValue: '👎',
35
+ }),
36
+ timeout_seconds: pieces_framework_1.Property.Number({
37
+ displayName: 'Timeout (seconds)',
38
+ description: 'Timeout in seconds after which the approval expires (default: 86400 = 24 hours)',
39
+ required: false,
40
+ defaultValue: 86400,
41
+ }),
42
+ },
43
+ run(context) {
44
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
45
+ if (context.executionType === shared_1.ExecutionType.BEGIN) {
46
+ const { number, recipients, message, approve_emoji = '👍', disapprove_emoji = '👎', timeout_seconds = 86400 } = context.propsValue;
47
+ (0, shared_2.assertNotNullOrUndefined)(message, 'message');
48
+ (0, shared_2.assertNotNullOrUndefined)(recipients, 'recipients');
49
+ const apiClient = new api_client_1.SignalCliApiClient(context.auth.props);
50
+ // Use number from props or fallback to default from connection
51
+ const phoneNumber = number || context.auth.props.defaultNumber;
52
+ if (!phoneNumber) {
53
+ throw new Error('Phone number is required. Please provide it in the action or set a default in the connection settings.');
54
+ }
55
+ const formattedNumber = (0, utils_1.formatPhoneNumber)(phoneNumber);
56
+ // Generate resume URL to extract requestId
57
+ const resumeUrl = context.generateResumeUrl({
58
+ queryParams: { action: 'approve' },
59
+ });
60
+ // Extract requestId from URL: /v1/flow-runs/{flowRunId}/requests/{requestId}
61
+ const urlMatch = resumeUrl.match(/\/flow-runs\/[^/]+\/requests\/([^/?]+)/);
62
+ if (!urlMatch || !urlMatch[1]) {
63
+ throw new Error('Failed to extract requestId from resume URL');
64
+ }
65
+ const requestId = urlMatch[1];
66
+ // Prepare request body - send message exactly as user entered it
67
+ const requestBody = {
68
+ number: formattedNumber,
69
+ recipients: recipients,
70
+ message: message || '',
71
+ };
72
+ // Send the message
73
+ const response = yield apiClient.post('/v2/send', requestBody);
74
+ // Extract messageTimestamp from response (timestamp is already in seconds as Unix timestamp)
75
+ const messageTimestamp = typeof response.timestamp === 'string'
76
+ ? parseInt(response.timestamp, 10)
77
+ : Math.floor(response.timestamp);
78
+ // targetAuthor is the phone number of the sender
79
+ const targetAuthor = formattedNumber;
80
+ const createdAt = Math.floor(Date.now() / 1000); // Unix timestamp in seconds
81
+ // Create store key
82
+ const storeKey = `approval:${messageTimestamp}:${targetAuthor}`;
83
+ // Create mapping value
84
+ const mapping = {
85
+ flowRunId: context.run.id,
86
+ requestId: requestId,
87
+ approveEmoji: approve_emoji,
88
+ disapproveEmoji: disapprove_emoji,
89
+ targetAuthor: targetAuthor,
90
+ messageTimestamp: messageTimestamp,
91
+ timeoutSeconds: timeout_seconds,
92
+ createdAt: createdAt,
93
+ };
94
+ // Save mapping in Store (PROJECT-scoped)
95
+ yield context.store.put(storeKey, mapping, pieces_framework_1.StoreScope.PROJECT);
96
+ // Add key to approval keys list
97
+ const keysListKey = 'approval:keys';
98
+ const existingKeys = (yield context.store.get(keysListKey, pieces_framework_1.StoreScope.PROJECT)) || [];
99
+ if (!existingKeys.includes(storeKey)) {
100
+ existingKeys.push(storeKey);
101
+ yield context.store.put(keysListKey, existingKeys, pieces_framework_1.StoreScope.PROJECT);
102
+ }
103
+ // Also save mapping from flowRunId to storeKey for easy lookup in RESUME phase
104
+ const flowRunMappingKey = `approval:flowRun:${context.run.id}`;
105
+ yield context.store.put(flowRunMappingKey, storeKey, pieces_framework_1.StoreScope.PROJECT);
106
+ // Pause the flow and wait for approval
107
+ context.run.pause({
108
+ pauseMetadata: {
109
+ type: shared_1.PauseType.WEBHOOK,
110
+ response: {},
111
+ },
112
+ });
113
+ return {
114
+ messageTimestamp,
115
+ targetAuthor,
116
+ flowRunId: context.run.id,
117
+ requestId,
118
+ };
119
+ }
120
+ else {
121
+ // RESUME-Phase: Flow was resumed by Resume-Action
122
+ const action = context.resumePayload.queryParams['action'];
123
+ const approved = action === 'approve';
124
+ // Find the storeKey for this flowRunId
125
+ const flowRunMappingKey = `approval:flowRun:${context.run.id}`;
126
+ const storeKey = yield context.store.get(flowRunMappingKey, pieces_framework_1.StoreScope.PROJECT);
127
+ if (storeKey) {
128
+ // Delete mapping from Store
129
+ yield context.store.delete(storeKey, pieces_framework_1.StoreScope.PROJECT);
130
+ // Delete flowRunId mapping
131
+ yield context.store.delete(flowRunMappingKey, pieces_framework_1.StoreScope.PROJECT);
132
+ // Remove key from approval keys list
133
+ const keysListKey = 'approval:keys';
134
+ const existingKeys = (yield context.store.get(keysListKey, pieces_framework_1.StoreScope.PROJECT)) || [];
135
+ const updatedKeys = existingKeys.filter(key => key !== storeKey);
136
+ yield context.store.put(keysListKey, updatedKeys, pieces_framework_1.StoreScope.PROJECT);
137
+ }
138
+ return {
139
+ approved,
140
+ };
141
+ }
142
+ });
143
+ },
144
+ });
145
+ //# sourceMappingURL=request-approval-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-approval-message.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/signal-cli-rest-api/src/lib/actions/request-approval-message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const resumeApprovalFlow: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").CustomAuthProperty<{
2
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
3
+ useBasicAuth: import("@activepieces/pieces-framework").CheckboxProperty<false>;
4
+ basicAuthUsername: import("@activepieces/pieces-framework").ShortTextProperty<false>;
5
+ basicAuthPassword: import("@activepieces/pieces-framework").SecretTextProperty<false>;
6
+ defaultNumber: import("@activepieces/pieces-framework").ShortTextProperty<false>;
7
+ mode: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
8
+ }>, {
9
+ message_data: import("@activepieces/pieces-framework").ObjectProperty<true>;
10
+ api_url: import("@activepieces/pieces-framework").ShortTextProperty<false>;
11
+ }>;
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resumeApprovalFlow = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@activepieces/pieces-framework");
6
+ const pieces_common_1 = require("@activepieces/pieces-common");
7
+ const auth_1 = require("../common/auth");
8
+ exports.resumeApprovalFlow = (0, pieces_framework_1.createAction)({
9
+ auth: auth_1.signalCliRestApiAuth,
10
+ name: 'resume_approval_flow',
11
+ displayName: 'Resume Approval Flow',
12
+ description: 'Resume a paused approval flow based on a reaction to a message',
13
+ props: {
14
+ message_data: pieces_framework_1.Property.Object({
15
+ displayName: 'Message Data',
16
+ description: 'The complete message data from the trigger',
17
+ required: true,
18
+ }),
19
+ api_url: pieces_framework_1.Property.ShortText({
20
+ displayName: 'API URL',
21
+ description: 'ActivePieces API URL (default: from context)',
22
+ required: false,
23
+ }),
24
+ },
25
+ run(context) {
26
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
27
+ var _a, _b;
28
+ const { message_data, api_url } = context.propsValue;
29
+ const apiUrl = api_url || context.server.apiUrl;
30
+ // Check if it's a reaction
31
+ const message = message_data;
32
+ if (!((_b = (_a = message.envelope) === null || _a === void 0 ? void 0 : _a.dataMessage) === null || _b === void 0 ? void 0 : _b.reaction)) {
33
+ return {
34
+ success: false,
35
+ reason: 'not_a_reaction',
36
+ };
37
+ }
38
+ const reaction = message.envelope.dataMessage.reaction;
39
+ const targetTimestamp = reaction.targetTimestamp;
40
+ const targetAuthor = reaction.targetAuthor;
41
+ const reactionEmoji = reaction.emoji;
42
+ // Cleanup expired approvals
43
+ const keysListKey = 'approval:keys';
44
+ const existingKeys = (yield context.store.get(keysListKey, pieces_framework_1.StoreScope.PROJECT)) || [];
45
+ const currentTimestamp = Math.floor(Date.now() / 1000);
46
+ const validKeys = [];
47
+ const keysToDelete = [];
48
+ for (const key of existingKeys) {
49
+ const mapping = yield context.store.get(key, pieces_framework_1.StoreScope.PROJECT);
50
+ if (mapping) {
51
+ // Check if expired
52
+ if (currentTimestamp - mapping.createdAt > mapping.timeoutSeconds) {
53
+ // Expired - delete it and flowRunId mapping
54
+ yield context.store.delete(key, pieces_framework_1.StoreScope.PROJECT);
55
+ const flowRunMappingKey = `approval:flowRun:${mapping.flowRunId}`;
56
+ yield context.store.delete(flowRunMappingKey, pieces_framework_1.StoreScope.PROJECT);
57
+ keysToDelete.push(key);
58
+ }
59
+ else {
60
+ validKeys.push(key);
61
+ }
62
+ }
63
+ else {
64
+ // Mapping not found - remove from list
65
+ keysToDelete.push(key);
66
+ }
67
+ }
68
+ // Update keys list if any were deleted
69
+ if (keysToDelete.length > 0) {
70
+ yield context.store.put(keysListKey, validKeys, pieces_framework_1.StoreScope.PROJECT);
71
+ }
72
+ // Look up the specific approval mapping
73
+ const storeKey = `approval:${targetTimestamp}:${targetAuthor}`;
74
+ const mapping = yield context.store.get(storeKey, pieces_framework_1.StoreScope.PROJECT);
75
+ if (!mapping) {
76
+ return {
77
+ success: false,
78
+ reason: 'not_an_approval_message',
79
+ };
80
+ }
81
+ // Check if expired
82
+ if (currentTimestamp - mapping.createdAt > mapping.timeoutSeconds) {
83
+ // Expired - delete and return
84
+ yield context.store.delete(storeKey, pieces_framework_1.StoreScope.PROJECT);
85
+ const flowRunMappingKey = `approval:flowRun:${mapping.flowRunId}`;
86
+ yield context.store.delete(flowRunMappingKey, pieces_framework_1.StoreScope.PROJECT);
87
+ const updatedKeys = validKeys.filter(key => key !== storeKey);
88
+ yield context.store.put(keysListKey, updatedKeys, pieces_framework_1.StoreScope.PROJECT);
89
+ return {
90
+ success: false,
91
+ reason: 'approval_expired',
92
+ };
93
+ }
94
+ // Check emoji and determine action
95
+ let action;
96
+ if (reactionEmoji === mapping.approveEmoji) {
97
+ action = 'approve';
98
+ }
99
+ else if (reactionEmoji === mapping.disapproveEmoji) {
100
+ action = 'disapprove';
101
+ }
102
+ else {
103
+ return {
104
+ success: false,
105
+ reason: 'invalid_emoji',
106
+ receivedEmoji: reactionEmoji,
107
+ expectedApproveEmoji: mapping.approveEmoji,
108
+ expectedDisapproveEmoji: mapping.disapproveEmoji,
109
+ };
110
+ }
111
+ // Make HTTP request to resume the flow
112
+ const resumeUrl = `${apiUrl}v1/flow-runs/${mapping.flowRunId}/requests/${mapping.requestId}?action=${action}`;
113
+ try {
114
+ yield pieces_common_1.httpClient.sendRequest({
115
+ method: pieces_common_1.HttpMethod.POST,
116
+ url: resumeUrl,
117
+ headers: {
118
+ 'Content-Type': 'application/json',
119
+ },
120
+ });
121
+ }
122
+ catch (error) {
123
+ // If resume fails, don't delete the mapping (might be retried)
124
+ return {
125
+ success: false,
126
+ reason: 'resume_failed',
127
+ error: error instanceof Error ? error.message : 'Unknown error',
128
+ };
129
+ }
130
+ // Delete mapping from Store (cleanup)
131
+ yield context.store.delete(storeKey, pieces_framework_1.StoreScope.PROJECT);
132
+ // Delete flowRunId mapping
133
+ const flowRunMappingKey = `approval:flowRun:${mapping.flowRunId}`;
134
+ yield context.store.delete(flowRunMappingKey, pieces_framework_1.StoreScope.PROJECT);
135
+ // Remove key from approval keys list
136
+ const finalKeys = validKeys.filter(key => key !== storeKey);
137
+ yield context.store.put(keysListKey, finalKeys, pieces_framework_1.StoreScope.PROJECT);
138
+ return {
139
+ success: true,
140
+ action,
141
+ flowRunId: mapping.flowRunId,
142
+ };
143
+ });
144
+ },
145
+ });
146
+ //# sourceMappingURL=resume-approval-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume-approval-flow.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/signal-cli-rest-api/src/lib/actions/resume-approval-flow.ts"],"names":[],"mappings":"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"}