@isomorph.ai/app-sdk 1.18.0 → 1.20.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/dist/index.d.ts
CHANGED
|
@@ -176,14 +176,14 @@ export interface WarehouseViewReadRequest {
|
|
|
176
176
|
export type WarehouseAppendRow = Record<string, string | number | boolean | null>;
|
|
177
177
|
/**
|
|
178
178
|
* Land rows in the warehouse. The resource is an alias IT approved with access `append` (an alias reads or
|
|
179
|
-
* appends, never both). Up to
|
|
179
|
+
* appends, never both). Up to 5000 rows per call; a larger report is several calls, each with its own fresh key.
|
|
180
180
|
* On a lane without a warehouse binding the rows are validated and answered as a dry run; nothing is written.
|
|
181
181
|
*/
|
|
182
182
|
export interface WarehouseTableAppendRequest {
|
|
183
183
|
operation: 'warehouse.table.append';
|
|
184
184
|
resource: string;
|
|
185
185
|
input: {
|
|
186
|
-
/** 1 to
|
|
186
|
+
/** 1 to 5000 rows. */
|
|
187
187
|
rows: WarehouseAppendRow[];
|
|
188
188
|
};
|
|
189
189
|
/** A fresh UUID per append, reused only to retry that same append. */
|
|
@@ -204,6 +204,17 @@ export interface PhoneSmsListRequest {
|
|
|
204
204
|
from?: string;
|
|
205
205
|
};
|
|
206
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* The number a phone alias maps to (contracts 0.83.0, ADR 0029). The resource is a number alias of a `phone`
|
|
209
|
+
* connection, declared like `phone.sms.list`'s; the answer is the E.164 number IT mapped it to, so the app (or an
|
|
210
|
+
* agent it drives) can type it into a portal that signs in by mobile number. It takes no input: leave `input`
|
|
211
|
+
* out and the client sends `input: {}`, which the platform requires on the wire.
|
|
212
|
+
*/
|
|
213
|
+
export interface PhoneNumberGetRequest {
|
|
214
|
+
operation: 'phone.number.get';
|
|
215
|
+
resource: string;
|
|
216
|
+
input?: Record<string, never>;
|
|
217
|
+
}
|
|
207
218
|
/** Gmail runs as the signed-in person after their consent. Resources are approved mailbox aliases (`inbox`). */
|
|
208
219
|
export interface GmailThreadListRequest {
|
|
209
220
|
operation: 'gmail.thread.list';
|
|
@@ -529,7 +540,7 @@ export interface ServiceRequestResult {
|
|
|
529
540
|
headers: Record<string, string>;
|
|
530
541
|
body: unknown;
|
|
531
542
|
}
|
|
532
|
-
export type IntegrationRequest = ServiceRequest | SlackChannelHistoryRequest | SlackMessagePostRequest | SlackMessageUpdateRequest | SlackMessageDeleteRequest | SlackDmSendRequest | SlackUserLookupRequest | WarehouseViewReadRequest | WarehouseTableAppendRequest | PhoneSmsListRequest | GmailThreadListRequest | GmailThreadReadRequest | GmailMessageReadRequest | GmailAttachmentReadRequest | GmailMessageSendRequest | BasecampProjectListRequest | BasecampTodolistListRequest | BasecampTodoListRequest | BasecampTodoCreateRequest | BasecampTodoCompleteRequest | BasecampMessageListRequest | BasecampMessagePostRequest | BasecampCommentListRequest | BasecampCommentPostRequest | BasecampCampfirePostRequest | BasecampPeopleListRequest | SharePointListListRequest | SharePointItemListRequest | SharePointItemCreateRequest | SharePointItemUpdateRequest | SharePointDriveListRequest | SharePointFileListRequest | SharePointFileSearchRequest | SharePointFileReadRequest | SharePointFileUploadRequest;
|
|
543
|
+
export type IntegrationRequest = ServiceRequest | SlackChannelHistoryRequest | SlackMessagePostRequest | SlackMessageUpdateRequest | SlackMessageDeleteRequest | SlackDmSendRequest | SlackUserLookupRequest | WarehouseViewReadRequest | WarehouseTableAppendRequest | PhoneSmsListRequest | PhoneNumberGetRequest | GmailThreadListRequest | GmailThreadReadRequest | GmailMessageReadRequest | GmailAttachmentReadRequest | GmailMessageSendRequest | BasecampProjectListRequest | BasecampTodolistListRequest | BasecampTodoListRequest | BasecampTodoCreateRequest | BasecampTodoCompleteRequest | BasecampMessageListRequest | BasecampMessagePostRequest | BasecampCommentListRequest | BasecampCommentPostRequest | BasecampCampfirePostRequest | BasecampPeopleListRequest | SharePointListListRequest | SharePointItemListRequest | SharePointItemCreateRequest | SharePointItemUpdateRequest | SharePointDriveListRequest | SharePointFileListRequest | SharePointFileSearchRequest | SharePointFileReadRequest | SharePointFileUploadRequest;
|
|
533
544
|
export type IntegrationOperation = IntegrationRequest['operation'];
|
|
534
545
|
export interface SlackMessage {
|
|
535
546
|
id: string;
|
|
@@ -583,6 +594,10 @@ export interface PhoneSmsMessage {
|
|
|
583
594
|
export interface PhoneSmsListResult {
|
|
584
595
|
messages: PhoneSmsMessage[];
|
|
585
596
|
}
|
|
597
|
+
export interface PhoneNumberGetResult {
|
|
598
|
+
/** The E.164 number the alias maps to, e.g. `+919876543210`. */
|
|
599
|
+
number: string;
|
|
600
|
+
}
|
|
586
601
|
export interface GmailThreadSummary {
|
|
587
602
|
id: string;
|
|
588
603
|
messageId: string;
|
|
@@ -802,7 +817,7 @@ export interface SharePointFileUploadResult {
|
|
|
802
817
|
filename: string;
|
|
803
818
|
webUrl: string;
|
|
804
819
|
}
|
|
805
|
-
export type IntegrationResult<R extends IntegrationRequest> = R extends ServiceRequest ? ServiceRequestResult : R extends SlackChannelHistoryRequest ? SlackChannelHistoryResult : R extends SlackMessagePostRequest | SlackMessageUpdateRequest | SlackMessageDeleteRequest ? SlackMessagePostResult : R extends SlackDmSendRequest ? SlackDmSendResult : R extends SlackUserLookupRequest ? SlackUserLookupResult : R extends WarehouseViewReadRequest ? WarehouseViewReadResult : R extends WarehouseTableAppendRequest ? WarehouseTableAppendResult : R extends PhoneSmsListRequest ? PhoneSmsListResult : R extends GmailThreadListRequest ? GmailThreadListResult : R extends GmailThreadReadRequest ? GmailThreadReadResult : R extends GmailMessageReadRequest ? GmailMessageReadResult : R extends GmailAttachmentReadRequest ? GmailAttachmentReadResult : R extends GmailMessageSendRequest ? GmailMessageSendResult : R extends BasecampProjectListRequest ? BasecampProjectListResult : R extends BasecampTodolistListRequest ? BasecampTodolistListResult : R extends BasecampTodoListRequest ? BasecampTodoListResult : R extends BasecampMessageListRequest ? BasecampMessageListResult : R extends BasecampCommentListRequest ? BasecampCommentListResult : R extends BasecampPeopleListRequest ? BasecampPeopleListResult : R extends BasecampTodoCreateRequest | BasecampMessagePostRequest | BasecampCommentPostRequest | BasecampCampfirePostRequest ? BasecampRecordingResult : R extends BasecampTodoCompleteRequest ? BasecampTodoCompleteResult : R extends SharePointListListRequest ? SharePointListListResult : R extends SharePointItemListRequest ? SharePointItemListResult : R extends SharePointItemCreateRequest ? SharePointItemCreateResult : R extends SharePointItemUpdateRequest ? SharePointItemUpdateResult : R extends SharePointDriveListRequest ? SharePointDriveListResult : R extends SharePointFileListRequest | SharePointFileSearchRequest ? SharePointFileListResult : R extends SharePointFileReadRequest ? SharePointFileReadResult : R extends SharePointFileUploadRequest ? SharePointFileUploadResult : never;
|
|
820
|
+
export type IntegrationResult<R extends IntegrationRequest> = R extends ServiceRequest ? ServiceRequestResult : R extends SlackChannelHistoryRequest ? SlackChannelHistoryResult : R extends SlackMessagePostRequest | SlackMessageUpdateRequest | SlackMessageDeleteRequest ? SlackMessagePostResult : R extends SlackDmSendRequest ? SlackDmSendResult : R extends SlackUserLookupRequest ? SlackUserLookupResult : R extends WarehouseViewReadRequest ? WarehouseViewReadResult : R extends WarehouseTableAppendRequest ? WarehouseTableAppendResult : R extends PhoneSmsListRequest ? PhoneSmsListResult : R extends PhoneNumberGetRequest ? PhoneNumberGetResult : R extends GmailThreadListRequest ? GmailThreadListResult : R extends GmailThreadReadRequest ? GmailThreadReadResult : R extends GmailMessageReadRequest ? GmailMessageReadResult : R extends GmailAttachmentReadRequest ? GmailAttachmentReadResult : R extends GmailMessageSendRequest ? GmailMessageSendResult : R extends BasecampProjectListRequest ? BasecampProjectListResult : R extends BasecampTodolistListRequest ? BasecampTodolistListResult : R extends BasecampTodoListRequest ? BasecampTodoListResult : R extends BasecampMessageListRequest ? BasecampMessageListResult : R extends BasecampCommentListRequest ? BasecampCommentListResult : R extends BasecampPeopleListRequest ? BasecampPeopleListResult : R extends BasecampTodoCreateRequest | BasecampMessagePostRequest | BasecampCommentPostRequest | BasecampCampfirePostRequest ? BasecampRecordingResult : R extends BasecampTodoCompleteRequest ? BasecampTodoCompleteResult : R extends SharePointListListRequest ? SharePointListListResult : R extends SharePointItemListRequest ? SharePointItemListResult : R extends SharePointItemCreateRequest ? SharePointItemCreateResult : R extends SharePointItemUpdateRequest ? SharePointItemUpdateResult : R extends SharePointDriveListRequest ? SharePointDriveListResult : R extends SharePointFileListRequest | SharePointFileSearchRequest ? SharePointFileListResult : R extends SharePointFileReadRequest ? SharePointFileReadResult : R extends SharePointFileUploadRequest ? SharePointFileUploadResult : never;
|
|
806
821
|
export type IntegrationConnectResult = {
|
|
807
822
|
status: 'connected';
|
|
808
823
|
accountLabel: string;
|
package/dist/index.js
CHANGED
|
@@ -31,15 +31,15 @@ function warehouseReadProblem({ columns, aggregates }) {
|
|
|
31
31
|
return undefined;
|
|
32
32
|
}
|
|
33
33
|
const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
34
|
-
// The append rules governance states in prose: 1 to
|
|
34
|
+
// The append rules governance states in prose: 1 to 5000 rows per call (a
|
|
35
35
|
// larger report is several calls) and a UUID idempotency key per call.
|
|
36
36
|
// Governance checks the columns and the value types against the catalog.
|
|
37
37
|
function warehouseAppendProblem({ input, idempotencyKey }) {
|
|
38
38
|
const rows = input?.rows;
|
|
39
39
|
if (!Array.isArray(rows) || rows.length === 0)
|
|
40
|
-
return { field: 'rows', message: 'a warehouse append needs 1 to
|
|
41
|
-
if (rows.length >
|
|
42
|
-
return { field: 'rows', message: 'a warehouse append takes at most
|
|
40
|
+
return { field: 'rows', message: 'a warehouse append needs 1 to 5000 rows' };
|
|
41
|
+
if (rows.length > 5000)
|
|
42
|
+
return { field: 'rows', message: 'a warehouse append takes at most 5000 rows per call; send a larger report as several calls, each with its own idempotencyKey' };
|
|
43
43
|
if (typeof idempotencyKey !== 'string' || !UUID_PATTERN.test(idempotencyKey))
|
|
44
44
|
return { field: 'idempotencyKey', message: 'a warehouse append needs a fresh UUID idempotencyKey per call' };
|
|
45
45
|
return undefined;
|
|
@@ -773,7 +773,10 @@ export function createClient(options = {}) {
|
|
|
773
773
|
}
|
|
774
774
|
// Exactly the contract's fields go on the wire: metadata declares which
|
|
775
775
|
// operations accept `mode`; identity and stray fields are not sent.
|
|
776
|
-
|
|
776
|
+
// phone.number.get takes no input, but the contract keeps `input`
|
|
777
|
+
// required on the wire (ADR 0029), so an omitted one goes out as {}.
|
|
778
|
+
const { operation, resource, input: given, idempotencyKey, mode } = request;
|
|
779
|
+
const input = given === undefined && operation === 'phone.number.get' ? {} : given;
|
|
777
780
|
return transport.json('/_harbour/integrations/execute', {
|
|
778
781
|
method: 'POST', body: JSON.stringify({ connection, operation, ...(operation !== 'service.request' ? { resource } : {}), ...(input !== undefined ? { input } : {}), ...(idempotencyKey !== undefined ? { idempotencyKey } : {}), ...(IntegrationOperations[operation]?.declaredMode && mode !== undefined ? { mode } : {}) }),
|
|
779
782
|
});
|
|
@@ -797,6 +797,10 @@ export declare const IntegrationExecuteInputRules: {
|
|
|
797
797
|
};
|
|
798
798
|
};
|
|
799
799
|
};
|
|
800
|
+
readonly "phone.number.get": {
|
|
801
|
+
readonly idempotencyKey: false;
|
|
802
|
+
readonly fields: {};
|
|
803
|
+
};
|
|
800
804
|
readonly "warehouse.view.read": {
|
|
801
805
|
readonly idempotencyKey: false;
|
|
802
806
|
readonly fields: {
|
|
@@ -913,7 +917,7 @@ export declare const IntegrationExecuteInputRules: {
|
|
|
913
917
|
readonly kind: "record[]";
|
|
914
918
|
readonly required: true;
|
|
915
919
|
readonly minItems: 1;
|
|
916
|
-
readonly maxItems:
|
|
920
|
+
readonly maxItems: 5000;
|
|
917
921
|
readonly minProperties: 1;
|
|
918
922
|
readonly maxProperties: 64;
|
|
919
923
|
readonly types: readonly ["string", "number", "boolean", "null"];
|
|
@@ -248,6 +248,10 @@ export const IntegrationExecuteInputRules = {
|
|
|
248
248
|
from: { kind: "string", required: false, minLength: 0, maxLength: 32 },
|
|
249
249
|
},
|
|
250
250
|
},
|
|
251
|
+
"phone.number.get": {
|
|
252
|
+
idempotencyKey: false,
|
|
253
|
+
fields: {},
|
|
254
|
+
},
|
|
251
255
|
"warehouse.view.read": {
|
|
252
256
|
idempotencyKey: false,
|
|
253
257
|
fields: {
|
|
@@ -273,7 +277,7 @@ export const IntegrationExecuteInputRules = {
|
|
|
273
277
|
"warehouse.table.append": {
|
|
274
278
|
idempotencyKey: true,
|
|
275
279
|
fields: {
|
|
276
|
-
rows: { kind: "record[]", required: true, minItems: 1, maxItems:
|
|
280
|
+
rows: { kind: "record[]", required: true, minItems: 1, maxItems: 5000, minProperties: 1, maxProperties: 64, types: ["string", "number", "boolean", "null"], maxLength: 4000 },
|
|
277
281
|
},
|
|
278
282
|
},
|
|
279
283
|
"service.request": {
|
|
@@ -224,6 +224,13 @@ export declare const IntegrationOperations: {
|
|
|
224
224
|
readonly declaredMode: false;
|
|
225
225
|
readonly idempotencyKey: false;
|
|
226
226
|
};
|
|
227
|
+
readonly "phone.number.get": {
|
|
228
|
+
readonly kind: "saas";
|
|
229
|
+
readonly identities: readonly ["app"];
|
|
230
|
+
readonly readOnly: true;
|
|
231
|
+
readonly declaredMode: false;
|
|
232
|
+
readonly idempotencyKey: false;
|
|
233
|
+
};
|
|
227
234
|
readonly "warehouse.view.read": {
|
|
228
235
|
readonly kind: "database";
|
|
229
236
|
readonly identities: readonly ["app"];
|
|
@@ -294,6 +294,15 @@ export const IntegrationOperations = {
|
|
|
294
294
|
"declaredMode": false,
|
|
295
295
|
"idempotencyKey": false
|
|
296
296
|
},
|
|
297
|
+
"phone.number.get": {
|
|
298
|
+
"kind": "saas",
|
|
299
|
+
"identities": [
|
|
300
|
+
"app"
|
|
301
|
+
],
|
|
302
|
+
"readOnly": true,
|
|
303
|
+
"declaredMode": false,
|
|
304
|
+
"idempotencyKey": false
|
|
305
|
+
},
|
|
297
306
|
"warehouse.view.read": {
|
|
298
307
|
"kind": "database",
|
|
299
308
|
"identities": [
|