@devrev/airsync-sdk 2.2.0-alpha.6 → 2.2.0-alpha.8

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.
@@ -14,7 +14,9 @@ export declare const UNKNOWN_EVENT_TYPE = "UNKNOWN_EVENT_TYPE";
14
14
  export declare enum AirSyncDefaultItemTypes {
15
15
  EXTERNAL_DOMAIN_METADATA = "external_domain_metadata",
16
16
  ATTACHMENTS = "attachments",
17
- EXTERNAL_SYNC_UNITS = "external_sync_units"
17
+ EXTERNAL_SYNC_UNITS = "external_sync_units",
18
+ INITIAL_DOMAIN_MAPPING = "initial_domain_mapping",
19
+ QUERY_RESULT_METADATA = "query_result_metadata"
18
20
  }
19
21
  export declare const LIBRARY_VERSION: any;
20
22
  export declare const DEFAULT_LAMBDA_TIMEOUT: number;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/common/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIhD,eAAO,MAAM,gCAAgC,aAI5C,CAAC;AAEF,eAAO,MAAM,6BAA6B,aAGzC,CAAC;AAEF,eAAO,MAAM,qBAAqB,aAGjC,CAAC;AAEF,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,wBAAwB,QAAyB,CAAC;AAG/D,eAAO,MAAM,uBAAuB,QAAmB,CAAC;AACxD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,oCAAoC,KAAK,CAAC;AAGvD,eAAO,MAAM,oBAAoB,SAAU,CAAC;AAE5C,eAAO,MAAM,0BAA0B,QAEtC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAA0B,CAAC;AACzD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD,oBAAY,uBAAuB;IACjC,wBAAwB,6BAA6B;IACrD,WAAW,gBAAgB;IAC3B,mBAAmB,wBAAwB;CAC5C;AAED,eAAO,MAAM,eAAe,KAAsB,CAAC;AAEnD,eAAO,MAAM,sBAAsB,QAAiB,CAAC;AACrD,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,mBAAmB,QAAY,CAAC;AAE7C;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,6BAA6B,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/common/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIhD,eAAO,MAAM,gCAAgC,aAI5C,CAAC;AAEF,eAAO,MAAM,6BAA6B,aAGzC,CAAC;AAEF,eAAO,MAAM,qBAAqB,aAGjC,CAAC;AAEF,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,wBAAwB,QAAyB,CAAC;AAG/D,eAAO,MAAM,uBAAuB,QAAmB,CAAC;AACxD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,oCAAoC,KAAK,CAAC;AAGvD,eAAO,MAAM,oBAAoB,SAAU,CAAC;AAE5C,eAAO,MAAM,0BAA0B,QAEtC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAA0B,CAAC;AACzD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD,oBAAY,uBAAuB;IACjC,wBAAwB,6BAA6B;IACrD,WAAW,gBAAgB;IAC3B,mBAAmB,wBAAwB;IAC3C,sBAAsB,2BAA2B;IACjD,qBAAqB,0BAA0B;CAChD;AAED,eAAO,MAAM,eAAe,KAAsB,CAAC;AAEnD,eAAO,MAAM,sBAAsB,QAAiB,CAAC;AACrD,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,mBAAmB,QAAY,CAAC;AAE7C;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,6BAA6B,CAAC"}
@@ -34,6 +34,8 @@ var AirSyncDefaultItemTypes;
34
34
  AirSyncDefaultItemTypes["EXTERNAL_DOMAIN_METADATA"] = "external_domain_metadata";
35
35
  AirSyncDefaultItemTypes["ATTACHMENTS"] = "attachments";
36
36
  AirSyncDefaultItemTypes["EXTERNAL_SYNC_UNITS"] = "external_sync_units";
37
+ AirSyncDefaultItemTypes["INITIAL_DOMAIN_MAPPING"] = "initial_domain_mapping";
38
+ AirSyncDefaultItemTypes["QUERY_RESULT_METADATA"] = "query_result_metadata";
37
39
  })(AirSyncDefaultItemTypes || (exports.AirSyncDefaultItemTypes = AirSyncDefaultItemTypes = {}));
38
40
  exports.LIBRARY_VERSION = (0, helpers_1.getLibraryVersion)();
39
41
  exports.DEFAULT_LAMBDA_TIMEOUT = 10 * 60 * 1000; // 10 minutes
@@ -11,6 +11,7 @@ export declare class ExtractionAdapter<ConnectorState> extends BaseAdapter<Conne
11
11
  private _preExtractionItemCounts?;
12
12
  private lastExtractedItemType?;
13
13
  private currentEventDataLength;
14
+ /** Defaults to true if the scope is empty or the item type is not listed. */
14
15
  shouldExtract(itemType: string): boolean;
15
16
  initializeRepos(repos: RepoInterface[]): void;
16
17
  private createRepo;
@@ -24,6 +25,7 @@ export declare class ExtractionAdapter<ConnectorState> extends BaseAdapter<Conne
24
25
  getRepo(itemType: string): Repo | undefined;
25
26
  /** Artifacts uploaded so far that the next emit will report. */
26
27
  get artifacts(): readonly Artifact[];
28
+ private trackArtifactSize;
27
29
  private addArtifacts;
28
30
  /**
29
31
  * Per-record-type counts for sync-duration estimation. Set during the
@@ -1 +1 @@
1
- {"version":3,"file":"extraction-adapter.d.ts","sourceRoot":"","sources":["../../../src/multithreading/adapters/extraction-adapter.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,aAAa,EACd,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAIL,kCAAkC,EAClC,yCAAyC,EAEzC,aAAa,EACb,2BAA2B,EAE5B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAkB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EAAE,QAAQ,EAAkB,MAAM,oCAAoC,CAAC;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,2FAA2F;AAC3F,qBAAa,iBAAiB,CAC5B,cAAc,CACd,SAAQ,WAAW,CAAC,cAAc,CAAC;IACnC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,wBAAwB,CAAC,CAAkB;IACnD,OAAO,CAAC,qBAAqB,CAAC,CAAS;IACvC,OAAO,CAAC,sBAAsB,CAAa;IAY3C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIxC,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE;IAatC,OAAO,CAAC,UAAU;IAwDlB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAW3C,gEAAgE;IAChE,IAAI,SAAS,IAAI,SAAS,QAAQ,EAAE,CAEnC;IAED,OAAO,CAAC,YAAY;IAMpB;;;OAGG;IACH,IAAI,uBAAuB,IAAI,aAAa,EAAE,GAAG,SAAS,CAEzD;IAED,IAAI,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,EAE9D;IA6HD,OAAO,CAAC,kBAAkB;YAaZ,cAAc;IAmB5B;;;;OAIG;IACG,iBAAiB,CACrB,UAAU,EAAE,oBAAoB,EAChC,MAAM,EAAE,yCAAyC,GAChD,OAAO,CAAC,2BAA2B,CAAC;IA4IjC,iBAAiB,CAAC,QAAQ,EAAE,EAChC,MAAM,EACN,UAAU,EACV,SAAa,GACd,EAAE;QACD,MAAM,EAAE,yCAAyC,CAAC;QAClD,UAAU,CAAC,EAAE,kCAAkC,CAC7C,cAAc,EACd,oBAAoB,EAAE,EACtB,QAAQ,CACT,CAAC;QACF,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,UAAU,CAAC;CAsHxB"}
1
+ {"version":3,"file":"extraction-adapter.d.ts","sourceRoot":"","sources":["../../../src/multithreading/adapters/extraction-adapter.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,aAAa,EACd,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAIL,kCAAkC,EAClC,yCAAyC,EAEzC,aAAa,EACb,2BAA2B,EAE5B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAkB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EAAE,QAAQ,EAAkB,MAAM,oCAAoC,CAAC;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,2FAA2F;AAC3F,qBAAa,iBAAiB,CAC5B,cAAc,CACd,SAAQ,WAAW,CAAC,cAAc,CAAC;IACnC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,wBAAwB,CAAC,CAAkB;IACnD,OAAO,CAAC,qBAAqB,CAAC,CAAS;IACvC,OAAO,CAAC,sBAAsB,CAAa;IAY3C,6EAA6E;IAC7E,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAOxC,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE;IAatC,OAAO,CAAC,UAAU;IA4ClB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAW3C,gEAAgE;IAChE,IAAI,SAAS,IAAI,SAAS,QAAQ,EAAE,CAEnC;IAED,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,YAAY;IAMpB;;;OAGG;IACH,IAAI,uBAAuB,IAAI,aAAa,EAAE,GAAG,SAAS,CAEzD;IAED,IAAI,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,EAE9D;IA6HD,OAAO,CAAC,kBAAkB;YAaZ,cAAc;IAmB5B;;;;OAIG;IACG,iBAAiB,CACrB,UAAU,EAAE,oBAAoB,EAChC,MAAM,EAAE,yCAAyC,GAChD,OAAO,CAAC,2BAA2B,CAAC;IA4IjC,iBAAiB,CAAC,QAAQ,EAAE,EAChC,MAAM,EACN,UAAU,EACV,SAAa,GACd,EAAE;QACD,MAAM,EAAE,yCAAyC,CAAC;QAClD,UAAU,CAAC,EAAE,kCAAkC,CAC7C,cAAc,EACd,oBAAoB,EAAE,EACtB,QAAQ,CACT,CAAC;QACF,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,UAAU,CAAC;CAsHxB"}
@@ -17,9 +17,14 @@ class ExtractionAdapter extends base_adapter_1.BaseAdapter {
17
17
  this.currentEventDataLength = 0;
18
18
  this._artifacts = [];
19
19
  }
20
+ /** Defaults to true if the scope is empty or the item type is not listed. */
20
21
  shouldExtract(itemType) {
21
- var _a;
22
- return ((_a = this.extractionScope[itemType]) === null || _a === void 0 ? void 0 : _a.extract) === true;
22
+ const scope = this.extractionScope;
23
+ if (Object.keys(scope).length === 0)
24
+ return true;
25
+ if (!(itemType in scope))
26
+ return true;
27
+ return scope[itemType].extract;
23
28
  }
24
29
  initializeRepos(repos) {
25
30
  const existingSsorRepo = this.repos.find((repo) => repo.itemType === constants_1.SSOR_ATTACHMENT);
@@ -35,7 +40,7 @@ class ExtractionAdapter extends base_adapter_1.BaseAdapter {
35
40
  repo.itemType !== constants_1.SSOR_ATTACHMENT;
36
41
  const isDeferred = this.isDeferredRepo(repo.itemType);
37
42
  const skipTimestampTracking = (_a = repo.skipTimestampTracking) !== null && _a !== void 0 ? _a : false;
38
- return new repo_1.Repo(Object.assign(Object.assign({ event: this.event, itemType: repo.itemType, skipTimestampTracking }, (shouldNormalize && { normalize: repo.normalize })), { skipConfirmation: repo.itemType === constants_1.AirSyncDefaultItemTypes.EXTERNAL_SYNC_UNITS, onUpload: (artifact) => {
43
+ return new repo_1.Repo(Object.assign(Object.assign({ event: this.event, itemType: repo.itemType, skipTimestampTracking }, (shouldNormalize && { normalize: repo.normalize })), { skipConfirmation: repo.itemType === constants_1.AirSyncDefaultItemTypes.EXTERNAL_SYNC_UNITS, onUpload: (artifact, format) => {
39
44
  var _a, _b;
40
45
  if (isDeferred) {
41
46
  const toDevRev = this.adapterState.sdkState.toDevRev;
@@ -45,20 +50,14 @@ class ExtractionAdapter extends base_adapter_1.BaseAdapter {
45
50
  }
46
51
  return;
47
52
  }
48
- if (!skipTimestampTracking) {
53
+ if (!skipTimestampTracking && format !== 'parquet') {
49
54
  this.lastExtractedItemType = repo.itemType;
50
55
  }
51
56
  // Artifact ids are kept in state for later attachment streaming
52
57
  if (repo.itemType === constants_1.AirSyncDefaultItemTypes.ATTACHMENTS) {
53
58
  (_b = this.adapterState.sdkState.toDevRev) === null || _b === void 0 ? void 0 : _b.attachmentsMetadata.artifactIds.push(artifact.id);
54
59
  }
55
- // Track size of artifact objects that go in the SQS message; flip
56
- // isTimeout once the threshold is exceeded to force an early emit.
57
- this.currentEventDataLength += Buffer.byteLength(JSON.stringify(artifact), 'utf8');
58
- if (this.currentEventDataLength > constants_1.EVENT_SIZE_THRESHOLD_BYTES &&
59
- !this.isTimeout) {
60
- this.isTimeout = true;
61
- }
60
+ this.trackArtifactSize(artifact);
62
61
  }, options: Object.assign(Object.assign({}, this.options), repo.overriddenOptions) }));
63
62
  }
64
63
  /**
@@ -93,6 +92,14 @@ class ExtractionAdapter extends base_adapter_1.BaseAdapter {
93
92
  get artifacts() {
94
93
  return this._artifacts;
95
94
  }
95
+ trackArtifactSize(artifact) {
96
+ // Count each upload once, not when repos are collected again before emit.
97
+ this.currentEventDataLength += Buffer.byteLength(JSON.stringify(artifact), 'utf8');
98
+ if (this.currentEventDataLength > constants_1.EVENT_SIZE_THRESHOLD_BYTES &&
99
+ !this.isTimeout) {
100
+ this.isTimeout = true;
101
+ }
102
+ }
96
103
  addArtifacts(artifacts) {
97
104
  this._artifacts = this._artifacts
98
105
  .concat(artifacts)
@@ -9,6 +9,8 @@ export declare class Repo {
9
9
  private onUpload;
10
10
  private options?;
11
11
  private trackTimestamps;
12
+ private canUploadParquet;
13
+ private format?;
12
14
  uploadedArtifacts: Artifact[];
13
15
  dateRanges: {
14
16
  creationDate: {
@@ -22,7 +24,20 @@ export declare class Repo {
22
24
  };
23
25
  getItems(): (NormalizedItem | NormalizedAttachment | Item)[];
24
26
  upload(batch?: (NormalizedItem | NormalizedAttachment | Item)[]): Promise<void>;
27
+ /**
28
+ * Uploads and confirms one ready-made Parquet file immediately during data
29
+ * extraction. The connector supplies valid bytes and the actual positive
30
+ * safe-integer row count. Bypasses normalization, batching and timestamp
31
+ * tracking. Confirmed files are reported with the repo's next callback,
32
+ * including progress and errors. Throws on failure; files are not queued.
33
+ * A repo cannot mix row and file submissions.
34
+ */
35
+ push(file: Buffer, options: {
36
+ format: 'parquet';
37
+ itemCount: number;
38
+ }): Promise<void>;
25
39
  /** Buffers items and uploads every full batch. Throws if an upload fails. */
26
40
  push(items: Item[]): Promise<void>;
41
+ private selectFormat;
27
42
  }
28
43
  //# sourceMappingURL=repo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/repo/repo.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAG/C,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D,OAAO,EACL,oBAAoB,EACpB,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,IAAI;IACf,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAmD;IAChE,OAAO,CAAC,SAAS,CAAC,CAAwD;IAC1E,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,OAAO,CAAC,CAAiB;IACjC,OAAO,CAAC,eAAe,CAAU;IAC1B,iBAAiB,EAAE,QAAQ,EAAE,CAAC;IAC9B,UAAU,EAAE;QACjB,YAAY,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACnD,YAAY,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACpD,CAGC;IAsBF,QAAQ,IAAI,CAAC,cAAc,GAAG,oBAAoB,GAAG,IAAI,CAAC,EAAE;IAItD,MAAM,CACV,KAAK,CAAC,EAAE,CAAC,cAAc,GAAG,oBAAoB,GAAG,IAAI,CAAC,EAAE,GACvD,OAAO,CAAC,IAAI,CAAC;IA6DhB,6EAA6E;IACvE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CA6BzC"}
1
+ {"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/repo/repo.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAI/C,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D,OAAO,EACL,oBAAoB,EACpB,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,IAAI;IACf,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAmD;IAChE,OAAO,CAAC,SAAS,CAAC,CAAwD;IAC1E,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,OAAO,CAAC,CAAiB;IACjC,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,MAAM,CAAC,CAAsB;IAC9B,iBAAiB,EAAE,QAAQ,EAAE,CAAC;IAC9B,UAAU,EAAE;QACjB,YAAY,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACnD,YAAY,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACpD,CAGC;IAyBF,QAAQ,IAAI,CAAC,cAAc,GAAG,oBAAoB,GAAG,IAAI,CAAC,EAAE;IAItD,MAAM,CACV,KAAK,CAAC,EAAE,CAAC,cAAc,GAAG,oBAAoB,GAAG,IAAI,CAAC,EAAE,GACvD,OAAO,CAAC,IAAI,CAAC;IA8DhB;;;;;;;OAOG;IACG,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAChD,OAAO,CAAC,IAAI,CAAC;IAChB,6EAA6E;IACvE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgFxC,OAAO,CAAC,YAAY;CAMrB"}
@@ -19,7 +19,7 @@ export interface RepoFactoryInterface {
19
19
  itemType: string;
20
20
  normalize?: (record: object) => NormalizedItem | NormalizedAttachment;
21
21
  skipTimestampTracking?: boolean;
22
- onUpload: (artifact: Artifact) => void;
22
+ onUpload: (artifact: Artifact, format?: 'parquet') => void;
23
23
  options?: RuntimeOptions;
24
24
  skipConfirmation?: boolean;
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"repo.interfaces.d.ts","sourceRoot":"","sources":["../../src/repo/repo.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,cAAc,GAAG,oBAAoB,CAAC;IACtE;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iBAAiB,CAAC,EAAE,WAAW,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,cAAc,GAAG,oBAAoB,CAAC;IACtE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAGD,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"repo.interfaces.d.ts","sourceRoot":"","sources":["../../src/repo/repo.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,cAAc,GAAG,oBAAoB,CAAC;IACtE;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iBAAiB,CAAC,EAAE,WAAW,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,cAAc,GAAG,oBAAoB,CAAC;IACtE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAC3D,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAGD,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC"}
package/dist/repo/repo.js CHANGED
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Repo = void 0;
4
4
  const constants_1 = require("../common/constants");
5
+ const errors_1 = require("../http/errors");
6
+ const extraction_1 = require("../types/extraction");
5
7
  const uploader_1 = require("../uploader/uploader");
6
8
  const repo_helpers_1 = require("./repo.helpers");
7
9
  class Repo {
@@ -19,6 +21,9 @@ class Repo {
19
21
  this.uploader = new uploader_1.Uploader({ event, options, skipConfirmation });
20
22
  this.options = options;
21
23
  this.uploadedArtifacts = [];
24
+ this.canUploadParquet =
25
+ event.payload.event_type === extraction_1.EventType.StartExtractingData ||
26
+ event.payload.event_type === extraction_1.EventType.ContinueExtractingData;
22
27
  }
23
28
  getItems() {
24
29
  return this.items;
@@ -27,6 +32,7 @@ class Repo {
27
32
  var _a;
28
33
  const itemsToUpload = batch || this.items;
29
34
  if (itemsToUpload.length > 0) {
35
+ this.selectFormat('jsonl');
30
36
  if (this.trackTimestamps) {
31
37
  for (const item of itemsToUpload) {
32
38
  const createdDate = item === null || item === void 0 ? void 0 : item.created_date;
@@ -62,14 +68,43 @@ class Repo {
62
68
  console.log(`No items to upload for type ${this.itemType}. Skipping upload.`);
63
69
  }
64
70
  }
65
- /** Buffers items and uploads every full batch. Throws if an upload fails. */
66
- async push(items) {
71
+ async push(items, options) {
67
72
  var _a;
73
+ if (options !== undefined || Buffer.isBuffer(items)) {
74
+ if (!this.canUploadParquet) {
75
+ throw new Error('Extraction files can only be uploaded during data extraction.');
76
+ }
77
+ if (!this.itemType.trim() ||
78
+ Object.values(constants_1.AirSyncDefaultItemTypes).some((type) => type === this.itemType) ||
79
+ this.itemType === constants_1.SSOR_ATTACHMENT) {
80
+ throw new Error('itemType must be a dataset/query key, not a metadata or attachment item type.');
81
+ }
82
+ if (!Buffer.isBuffer(items) || items.length === 0) {
83
+ throw new Error('file must be a nonempty Buffer containing Parquet bytes.');
84
+ }
85
+ if ((options === null || options === void 0 ? void 0 : options.format) !== 'parquet') {
86
+ throw new Error('format must be parquet for file uploads.');
87
+ }
88
+ if (!Number.isSafeInteger(options.itemCount) || options.itemCount <= 0) {
89
+ throw new Error('itemCount must be a positive safe integer.');
90
+ }
91
+ this.selectFormat('parquet');
92
+ const { response: artifact, error } = await this.uploader.uploadParquet(this.itemType, items, options.itemCount);
93
+ if (error !== undefined || !artifact) {
94
+ throw error === undefined
95
+ ? new errors_1.AirSyncHttpError('No extraction artifact returned.')
96
+ : (0, errors_1.toAirSyncHttpError)(error);
97
+ }
98
+ this.uploadedArtifacts.push(artifact);
99
+ this.onUpload(artifact, 'parquet');
100
+ return;
101
+ }
68
102
  let recordsToPush;
69
103
  if (!items || items.length === 0) {
70
104
  console.log(`No items to push for type ${this.itemType}. Skipping push.`);
71
105
  return;
72
106
  }
107
+ this.selectFormat('jsonl');
73
108
  if (this.normalize &&
74
109
  this.itemType != constants_1.AirSyncDefaultItemTypes.EXTERNAL_DOMAIN_METADATA &&
75
110
  this.itemType != constants_1.SSOR_ATTACHMENT) {
@@ -88,5 +123,11 @@ class Repo {
88
123
  this.items.splice(0, batchSize);
89
124
  }
90
125
  }
126
+ selectFormat(format) {
127
+ if (this.format && this.format !== format) {
128
+ throw new Error('A repo cannot mix JSONL rows and Parquet files.');
129
+ }
130
+ this.format = format;
131
+ }
91
132
  }
92
133
  exports.Repo = Repo;
@@ -1 +1 @@
1
- {"version":3,"file":"base-state.d.ts","sourceRoot":"","sources":["../../src/state/base-state.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAa,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGtE,OAAO,EAEL,QAAQ,EAER,cAAc,EAEf,MAAM,oBAAoB,CAAC;AAiC5B;;;;GAIG;AACH,8BAAsB,SAAS,CAAC,cAAc;IAC5C,SAAS,CAAC,eAAe,EAAE,cAAc,CAAC;IAC1C,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC9B,SAAS,CAAC,gBAAgB,EAAE,eAAe,CAAM;IACjD,SAAS,CAAC,kBAAkB,EAAE,iBAAiB,CAAM;IACrD,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IACvC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;gBAGxB,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,CAAC,cAAc,CAAC,EACvD,eAAe,EAAE,QAAQ;IAY3B,2EAA2E;IAC3E,IAAI,KAAK,IAAI,cAAc,CAE1B;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,cAAc,EAE9B;IAED,uEAAuE;IACvE,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAE3B;IAED,IAAI,iBAAiB,IAAI,iBAAiB,CAEzC;IAED,IAAI,eAAe,IAAI,eAAe,CAErC;IAED;;;;OAIG;IACG,mCAAmC,CACvC,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,IAAI,CAAC;IAwChB;;;;OAIG;IACG,IAAI,CAAC,YAAY,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAkGvD;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IA4C7B,OAAO,CAAC,YAAY;IAkBpB;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C1B,UAAU,IAAI,OAAO,CAAC;QAC1B,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CAsBH"}
1
+ {"version":3,"file":"base-state.d.ts","sourceRoot":"","sources":["../../src/state/base-state.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGtE,OAAO,EAEL,QAAQ,EAER,cAAc,EAEf,MAAM,oBAAoB,CAAC;AAE5B;;;;GAIG;AACH,8BAAsB,SAAS,CAAC,cAAc;IAC5C,SAAS,CAAC,eAAe,EAAE,cAAc,CAAC;IAC1C,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC9B,SAAS,CAAC,gBAAgB,EAAE,eAAe,CAAM;IACjD,SAAS,CAAC,kBAAkB,EAAE,iBAAiB,CAAM;IACrD,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IACvC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;gBAGxB,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,CAAC,cAAc,CAAC,EACvD,eAAe,EAAE,QAAQ;IAY3B,2EAA2E;IAC3E,IAAI,KAAK,IAAI,cAAc,CAE1B;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,cAAc,EAE9B;IAED,uEAAuE;IACvE,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAE3B;IAED,IAAI,iBAAiB,IAAI,iBAAiB,CAEzC;IAED,IAAI,eAAe,IAAI,eAAe,CAErC;IAED;;;;OAIG;IACG,mCAAmC,CACvC,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,IAAI,CAAC;IAwChB;;;;OAIG;IACG,IAAI,CAAC,YAAY,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAmFvD;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IA4C7B,OAAO,CAAC,YAAY;IAkBpB;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C1B,UAAU,IAAI,OAAO,CAAC;QAC1B,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CAsBH"}
@@ -8,35 +8,9 @@ const node_worker_threads_1 = require("node:worker_threads");
8
8
  const axios_1 = __importDefault(require("axios"));
9
9
  const client_1 = require("../http/client");
10
10
  const logger_1 = require("../logger/logger");
11
- const extraction_1 = require("../types/extraction");
12
11
  const workers_1 = require("../types/workers");
13
12
  const install_initial_domain_mapping_1 = require("./install-initial-domain-mapping");
14
13
  const state_interfaces_1 = require("./state.interfaces");
15
- function parseExtractionScope(objects) {
16
- let scope;
17
- try {
18
- scope = JSON.parse(objects);
19
- }
20
- catch (error) {
21
- throw new Error(`Failed to parse extraction scope. ${error}`);
22
- }
23
- if (scope === null ||
24
- typeof scope !== 'object' ||
25
- Array.isArray(scope) ||
26
- Object.values(scope).some((value) => value === null ||
27
- typeof value !== 'object' ||
28
- Array.isArray(value) ||
29
- (value.extract !== undefined && typeof value.extract !== 'boolean'))) {
30
- throw new Error('Invalid extraction scope in worker response.');
31
- }
32
- return Object.fromEntries(Object.entries(scope).map(([itemType, requirement]) => {
33
- var _a;
34
- return [
35
- itemType,
36
- Object.assign(Object.assign({}, requirement), { extract: (_a = requirement.extract) !== null && _a !== void 0 ? _a : false }),
37
- ];
38
- }));
39
- }
40
14
  /**
41
15
  * State lifecycle shared by all sync modes: connector/SDK state separation,
42
16
  * fetch/init/post, the v1 to v2 migration shim, and the snap-in-version-gated
@@ -154,22 +128,12 @@ class BaseState {
154
128
  console.warn('Failed to parse extractionQueries.');
155
129
  }
156
130
  }
157
- const requiresScope = [
158
- extraction_1.EventType.StartExtractingData,
159
- extraction_1.EventType.ContinueExtractingData,
160
- ].includes(this.event.payload.event_type);
161
- if (objects === undefined ||
162
- objects === null ||
163
- (objects === '' && !requiresScope)) {
164
- if (requiresScope) {
165
- throw new Error('Missing extraction scope in worker response.');
131
+ if (objects) {
132
+ try {
133
+ this._extractionScope = JSON.parse(objects);
166
134
  }
167
- }
168
- else {
169
- this._extractionScope = parseExtractionScope(objects);
170
- if (requiresScope) {
171
- console.log('Extraction requirements from worker response:', objects);
172
- console.log('Effective extraction requirements:', JSON.stringify(this._extractionScope));
135
+ catch (error) {
136
+ console.warn(`Failed to parse extractionScope. ${error}`);
173
137
  }
174
138
  }
175
139
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mock-server.d.ts","sourceRoot":"","sources":["../../src/testing/mock-server.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,WAAW,EACX,WAAW,EAEZ,MAAM,0BAA0B,CAAC;AAIlC,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAsE5D;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,aAAa,CAA4B;gBAErC,IAAI,GAAE,MAAiC;IAMtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBpB,aAAa;IA+B3B,qEAAqE;IACrE,OAAO,CAAC,mBAAmB;IA8B3B,OAAO,CAAC,WAAW;IAIZ,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IA+G1C,kEAAkE;IAC3D,WAAW,IAAI,IAAI;IAMnB,cAAc,IAAI,WAAW,GAAG,SAAS;IAOhD,uEAAuE;IAChE,mBAAmB,IAAI,WAAW,EAAE;IAOpC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE;CAQhE"}
1
+ {"version":3,"file":"mock-server.d.ts","sourceRoot":"","sources":["../../src/testing/mock-server.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,WAAW,EACX,WAAW,EAEZ,MAAM,0BAA0B,CAAC;AAIlC,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAsE5D;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,aAAa,CAA4B;gBAErC,IAAI,GAAE,MAAiC;IAMtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBpB,aAAa;IA+B3B,qEAAqE;IACrE,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,WAAW;IAIZ,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IA+G1C,kEAAkE;IAC3D,WAAW,IAAI,IAAI;IAMnB,cAAc,IAAI,WAAW,GAAG,SAAS;IAOhD,uEAAuE;IAChE,mBAAmB,IAAI,WAAW,EAAE;IAOpC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE;CAQhE"}
@@ -139,7 +139,6 @@ class MockServer {
139
139
  if (req.method === 'GET' && req.path === '/worker_data_url.get') {
140
140
  res.status(200).json({
141
141
  state: JSON.stringify({}),
142
- objects: '{}',
143
142
  });
144
143
  }
145
144
  else if (req.method === 'GET' && req.path === '/internal/snap-ins.get') {
@@ -155,9 +155,9 @@ export interface EventData {
155
155
  error?: ErrorRecord;
156
156
  delay?: number;
157
157
  /**
158
- * Artifacts produced by the worker's repos, attached to the emitted event by
159
- * the SDK. Includes external sync units, which are pushed to the
160
- * AirSyncDefaultItemTypes.EXTERNAL_SYNC_UNITS repo and uploaded as artifacts.
158
+ * Artifacts produced by the worker's repos, attached to the emitted event
159
+ * by the SDK. Includes row batches, ready-made Parquet files and external
160
+ * sync units pushed to the AirSyncDefaultItemTypes.EXTERNAL_SYNC_UNITS repo.
161
161
  */
162
162
  artifacts?: Artifact[];
163
163
  reports?: LoaderReport[];
@@ -1,7 +1,7 @@
1
1
  import { AxiosResponse } from 'axios';
2
2
  import { NormalizedAttachment } from '../repo/repo.interfaces';
3
3
  import { HttpStreamResponse } from '../types/extraction';
4
- import { ArtifactToUpload, MultipartUpload, UploaderFactoryInterface, UploaderResult, UploadResponse } from './uploader.interfaces';
4
+ import { Artifact, ArtifactToUpload, MultipartUpload, UploaderFactoryInterface, UploaderResult, UploadResponse } from './uploader.interfaces';
5
5
  export declare class Uploader {
6
6
  private isLocalDevelopment?;
7
7
  private devrevApiEndpoint;
@@ -12,6 +12,10 @@ export declare class Uploader {
12
12
  constructor({ event, options, skipConfirmation }: UploaderFactoryInterface);
13
13
  /** Compresses fetched objects to gzipped JSONL and uploads them as an artifact. */
14
14
  upload(itemType: string, fetchedObjects: object[] | object): Promise<UploadResponse>;
15
+ /** Uploads ready-made Parquet bytes without serializing or compressing them. */
16
+ uploadParquet(itemType: string, file: Buffer, itemCount: number): Promise<UploaderResult<Artifact>>;
17
+ /** Keeps raw errors for callers that need HTTP diagnostics. */
18
+ private uploadFile;
15
19
  getArtifactUploadUrl(filename: string, fileType: string, fileSize?: number): Promise<UploaderResult<ArtifactToUpload>>;
16
20
  /** Uploads the file buffer to the artifact's upload URL as multipart form data. */
17
21
  uploadArtifact(artifact: ArtifactToUpload, file: Buffer): Promise<UploaderResult<AxiosResponse>>;
@@ -1 +1 @@
1
- {"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../src/uploader/uploader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAUtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAWzD,OAAO,EAEL,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,cAAc,EACd,cAAc,EACf,MAAM,uBAAuB,CAAC;AAE/B,qBAAa,QAAQ;IACnB,OAAO,CAAC,kBAAkB,CAAC,CAAU;IACrC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,gBAAgB,CAAU;gBAEtB,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,wBAAwB;IAW1E,mFAAmF;IAC7E,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,GAChC,OAAO,CAAC,cAAc,CAAC;IAwEpB,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;IA2B5C,mFAAmF;IAC7E,cAAc,CAClB,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAmBzC,kFAAkF;IAC5E,cAAc,CAClB,QAAQ,EAAE,gBAAgB,EAC1B,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAqCzC;;;;OAIG;IACG,qBAAqB,CACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,SAA0B,GACjC,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IAkB3C,+DAA+D;IACzD,0BAA0B,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,SAA0B,GACjC,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IAkB3C,+DAA+D;IACzD,uBAAuB,CAC3B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAoBzC;;;;OAIG;IACG,uBAAuB,CAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC,cAAc,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA6HnD,oDAAoD;YACtC,mBAAmB;IAsD3B,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QACvD,QAAQ,CAAC,EAAE,aAAa,CAAC;QACzB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IAgCF,oEAAoE;IAC9D,4BAA4B,CAAC,EACjC,QAAQ,GACT,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC;QACV,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC;QACrC,KAAK,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;KAC7B,CAAC;YAuDY,sBAAsB;YAsBtB,gBAAgB;IAc9B,yEAAyE;IACnE,yBAAyB,CAAC,EAC9B,UAAU,EACV,SAAiB,GAClB,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;CA6B/C"}
1
+ {"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../src/uploader/uploader.ts"],"names":[],"mappings":"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"}
@@ -37,40 +37,58 @@ class Uploader {
37
37
  },
38
38
  };
39
39
  }
40
- const filename = itemType + '.jsonl.gz';
41
- const fileType = 'application/x-gzip';
42
- const { error: preparedArtifactError, response: preparedArtifact } = await this.getArtifactUploadUrl(filename, fileType);
43
- if (preparedArtifactError) {
40
+ const { response: artifactId, error, errorMessage, } = await this.uploadFile(itemType + '.jsonl.gz', 'application/x-gzip', file, undefined, this.skipConfirmation);
41
+ if (error !== undefined) {
44
42
  return {
45
43
  error: {
46
- message: 'Error while getting artifact upload URL: ' +
47
- (0, logger_1.serializeError)(preparedArtifactError),
44
+ message: errorMessage + (0, logger_1.serializeError)(error),
48
45
  },
49
46
  };
50
47
  }
51
- const { error: uploadItemError } = await this.uploadArtifact(preparedArtifact, file);
52
- if (uploadItemError) {
48
+ const artifactDateRanges = (0, uploader_helpers_1.computeArtifactDateRanges)(fetchedObjects);
49
+ const artifact = Object.assign({ id: artifactId, item_type: itemType, item_count: Array.isArray(fetchedObjects) ? fetchedObjects.length : 1 }, artifactDateRanges);
50
+ return { artifact };
51
+ }
52
+ /** Uploads ready-made Parquet bytes without serializing or compressing them. */
53
+ async uploadParquet(itemType, file, itemCount) {
54
+ const { response: artifactId, error } = await this.uploadFile(`${itemType}.parquet`, 'application/vnd.apache.parquet', file, file.length);
55
+ if (error !== undefined) {
56
+ return { error };
57
+ }
58
+ return {
59
+ response: {
60
+ id: artifactId,
61
+ item_type: itemType,
62
+ item_count: itemCount,
63
+ },
64
+ };
65
+ }
66
+ /** Keeps raw errors for callers that need HTTP diagnostics. */
67
+ async uploadFile(filename, fileType, file, fileSize, skipConfirmation = false) {
68
+ const { response: preparedArtifact, error: prepareError } = await this.getArtifactUploadUrl(filename, fileType, fileSize);
69
+ if (prepareError !== undefined || !preparedArtifact) {
53
70
  return {
54
- error: {
55
- message: 'Error while uploading artifact: ' +
56
- (0, logger_1.serializeError)(uploadItemError),
57
- },
71
+ error: prepareError !== null && prepareError !== void 0 ? prepareError : new Error('No artifact upload URL returned.'),
72
+ errorMessage: 'Error while getting artifact upload URL: ',
58
73
  };
59
74
  }
60
- if (!this.skipConfirmation) {
61
- const { error: confirmArtifactUploadError } = await this.confirmArtifactUpload(preparedArtifact.artifact_id);
62
- if (confirmArtifactUploadError) {
75
+ const { error: uploadError } = await this.uploadArtifact(preparedArtifact, file);
76
+ if (uploadError !== undefined) {
77
+ return {
78
+ error: uploadError,
79
+ errorMessage: 'Error while uploading artifact: ',
80
+ };
81
+ }
82
+ if (!skipConfirmation) {
83
+ const { error: confirmError } = await this.confirmArtifactUpload(preparedArtifact.artifact_id);
84
+ if (confirmError !== undefined) {
63
85
  return {
64
- error: {
65
- message: 'Error while confirming artifact upload. ' +
66
- JSON.stringify(confirmArtifactUploadError),
67
- },
86
+ error: confirmError,
87
+ errorMessage: 'Error while confirming artifact upload. ',
68
88
  };
69
89
  }
70
90
  }
71
- const artifactDateRanges = (0, uploader_helpers_1.computeArtifactDateRanges)(fetchedObjects);
72
- const artifact = Object.assign({ id: preparedArtifact.artifact_id, item_type: itemType, item_count: Array.isArray(fetchedObjects) ? fetchedObjects.length : 1 }, artifactDateRanges);
73
- return { artifact };
91
+ return { response: preparedArtifact.artifact_id };
74
92
  }
75
93
  async getArtifactUploadUrl(filename, fileType, fileSize) {
76
94
  const url = `${this.devrevApiEndpoint}/internal/airdrop.artifacts.upload-url`;
@@ -355,7 +373,7 @@ class Uploader {
355
373
  }
356
374
  }
357
375
  catch (error) {
358
- return { error: { message: (0, logger_1.serializeError)(error) } };
376
+ return { error };
359
377
  }
360
378
  }
361
379
  /** Downloads an artifact and parses it into attachment metadata. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devrev/airsync-sdk",
3
- "version": "2.2.0-alpha.6",
3
+ "version": "2.2.0-alpha.8",
4
4
  "description": "Typescript SDK for building AirSync snap-ins on the DevRev platform.",
5
5
  "type": "commonjs",
6
6
  "main": "./dist/index.js",