@haiiro/docuflow 0.0.10 → 0.0.12

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.
@@ -1700,9 +1700,14 @@ var readRestList = (response) => {
1700
1700
  const value = readDataValue(response);
1701
1701
  return {
1702
1702
  records: Array.isArray(value) ? value : [],
1703
- pageInfo: response?.pageInfo ?? {}
1703
+ pageInfo: response?.pageInfo ?? {},
1704
+ totalCount: response?.totalCount
1704
1705
  };
1705
1706
  };
1707
+ var readRestRecord = (response) => {
1708
+ const value = readDataValue(response);
1709
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
1710
+ };
1706
1711
 
1707
1712
  // src/shared/bitrix/bitrix.util.ts
1708
1713
  var BITRIX_OAUTH_TOKEN_URL = "https://oauth.bitrix.info/oauth/token/";
@@ -1845,95 +1850,45 @@ var DOCFLOW_LAUNCH_PARAMETERS_KEY = "smbDocflowParameters";
1845
1850
  var LAUNCH_PARAMETERS_STEP_INPUT = `{{trigger.${DOCFLOW_LAUNCH_PARAMETERS_KEY}}}`;
1846
1851
  var TASK_DONE_STATUS = "DONE";
1847
1852
 
1848
- // node_modules/twenty-sdk/dist/logic-function/isDefined-Dtu5EYqP-CMNeFg4z.mjs
1849
- var import_guards = __toESM(require_build(), 1);
1850
- var n = (n4) => !(0, import_guards.isUndefined)(n4) && !(0, import_guards.isNull)(n4);
1851
-
1852
- // node_modules/twenty-sdk/dist/logic-function/index.mjs
1853
- var import_guards2 = __toESM(require_build(), 1);
1854
-
1855
- // node_modules/uuid/dist-node/stringify.js
1856
- var byteToHex = [];
1857
- for (let i5 = 0; i5 < 256; ++i5) {
1858
- byteToHex.push((i5 + 256).toString(16).slice(1));
1859
- }
1860
- function unsafeStringify(arr, offset = 0) {
1861
- return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
1862
- }
1863
-
1864
- // node_modules/uuid/dist-node/rng.js
1865
- import { randomFillSync } from "node:crypto";
1866
- var rnds8Pool = new Uint8Array(256);
1867
- var poolPtr = rnds8Pool.length;
1868
- function rng() {
1869
- if (poolPtr > rnds8Pool.length - 16) {
1870
- randomFillSync(rnds8Pool);
1871
- poolPtr = 0;
1872
- }
1873
- return rnds8Pool.slice(poolPtr, poolPtr += 16);
1874
- }
1875
-
1876
- // node_modules/uuid/dist-node/native.js
1877
- import { randomUUID } from "node:crypto";
1878
- var native_default = { randomUUID };
1879
-
1880
- // node_modules/uuid/dist-node/v4.js
1881
- function _v4(options, buf, offset) {
1882
- options = options || {};
1883
- const rnds = options.random ?? options.rng?.() ?? rng();
1884
- if (rnds.length < 16) {
1885
- throw new Error("Random bytes length must be >= 16");
1886
- }
1887
- rnds[6] = rnds[6] & 15 | 64;
1888
- rnds[8] = rnds[8] & 63 | 128;
1889
- if (buf) {
1890
- offset = offset || 0;
1891
- if (offset < 0 || offset + 16 > buf.length) {
1892
- throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
1893
- }
1894
- for (let i5 = 0; i5 < 16; ++i5) {
1895
- buf[offset + i5] = rnds[i5];
1896
- }
1897
- return buf;
1898
- }
1899
- return unsafeStringify(rnds);
1900
- }
1901
- function v4(options, buf, offset) {
1902
- if (native_default.randomUUID && !buf && !options) {
1903
- return native_default.randomUUID();
1904
- }
1905
- return _v4(options, buf, offset);
1906
- }
1907
- var v4_default = v4;
1853
+ // src/server/bitrix-member.ts
1854
+ import { randomBytes } from "node:crypto";
1908
1855
 
1909
- // node_modules/twenty-sdk/dist/logic-function/index.mjs
1910
- var l4 = __toESM(require_react(), 1);
1911
- import { MetadataApiClient as u3 } from "twenty-client-sdk/metadata";
1856
+ // src/shared/bitrix/bitrix-user.util.ts
1857
+ var readText = (value) => typeof value === "string" ? value.trim() : "";
1858
+ var readBitrixUserEmail = (user) => {
1859
+ const email = readText(user.EMAIL);
1860
+ return email.length > 0 ? email.toLowerCase() : void 0;
1861
+ };
1862
+ var readBitrixUserName = (user) => {
1863
+ const firstName = readText(user.NAME);
1864
+ const lastName = [readText(user.LAST_NAME), readText(user.SECOND_NAME)].filter((part) => part.length > 0).join(" ");
1865
+ return { firstName, lastName };
1866
+ };
1912
1867
 
1913
1868
  // node_modules/twenty-client-sdk/dist/chunk-Dqa2HsxW.mjs
1914
- var e2 = Object.create;
1915
- var t2 = Object.defineProperty;
1916
- var n2 = Object.getOwnPropertyDescriptor;
1869
+ var e = Object.create;
1870
+ var t = Object.defineProperty;
1871
+ var n = Object.getOwnPropertyDescriptor;
1917
1872
  var r = Object.getOwnPropertyNames;
1918
1873
  var i = Object.getPrototypeOf;
1919
1874
  var a = Object.prototype.hasOwnProperty;
1920
1875
  var o = (e3, t4) => () => (t4 || (e3((t4 = { exports: {} }).exports, t4), e3 = null), t4.exports);
1921
1876
  var s = (e3, n4) => {
1922
1877
  let r4 = {};
1923
- for (var i5 in e3) t2(r4, i5, {
1878
+ for (var i5 in e3) t(r4, i5, {
1924
1879
  get: e3[i5],
1925
1880
  enumerable: true
1926
1881
  });
1927
- return n4 || t2(r4, Symbol.toStringTag, { value: "Module" }), r4;
1882
+ return n4 || t(r4, Symbol.toStringTag, { value: "Module" }), r4;
1928
1883
  };
1929
1884
  var c = (e3, i5, o5, s5) => {
1930
- if (i5 && typeof i5 == "object" || typeof i5 == "function") for (var c4 = r(i5), l5 = 0, u4 = c4.length, d2; l5 < u4; l5++) d2 = c4[l5], !a.call(e3, d2) && d2 !== o5 && t2(e3, d2, {
1885
+ if (i5 && typeof i5 == "object" || typeof i5 == "function") for (var c4 = r(i5), l5 = 0, u4 = c4.length, d2; l5 < u4; l5++) d2 = c4[l5], !a.call(e3, d2) && d2 !== o5 && t(e3, d2, {
1931
1886
  get: ((e4) => i5[e4]).bind(null, d2),
1932
- enumerable: !(s5 = n2(i5, d2)) || s5.enumerable
1887
+ enumerable: !(s5 = n(i5, d2)) || s5.enumerable
1933
1888
  });
1934
1889
  return e3;
1935
1890
  };
1936
- var l = (n4, r4, a5) => (a5 = n4 == null ? {} : e2(i(n4)), c(r4 || !n4 || !n4.__esModule ? t2(a5, "default", {
1891
+ var l = (n4, r4, a5) => (a5 = n4 == null ? {} : e(i(n4)), c(r4 || !n4 || !n4.__esModule ? t(a5, "default", {
1937
1892
  value: n4,
1938
1893
  enumerable: true
1939
1894
  }) : a5, n4));
@@ -61274,7 +61229,197 @@ var u2 = class {
61274
61229
  }
61275
61230
  };
61276
61231
 
61232
+ // src/server/records.ts
61233
+ var clients = {
61234
+ person: new u2(),
61235
+ application: new u2({ runAs: "application" })
61236
+ };
61237
+ var restClient = (runAs) => clients[runAs];
61238
+
61239
+ // src/server/bitrix-member.ts
61240
+ var callMetadataGraphql = async ({
61241
+ query,
61242
+ variables,
61243
+ token
61244
+ }) => {
61245
+ const apiUrl = process.env.TWENTY_API_URL?.replace(/\/$/, "");
61246
+ if (apiUrl === void 0 || apiUrl.length === 0) {
61247
+ throw new Error("TWENTY_API_URL is not set");
61248
+ }
61249
+ const headers = {
61250
+ "content-type": "application/json"
61251
+ };
61252
+ if (token !== void 0 && token.length > 0) {
61253
+ headers.authorization = `Bearer ${token}`;
61254
+ }
61255
+ const response = await fetch(`${apiUrl}/metadata`, {
61256
+ method: "POST",
61257
+ headers,
61258
+ body: JSON.stringify({ query, variables })
61259
+ });
61260
+ const body = await response.json().catch(() => null);
61261
+ const [firstError] = body?.errors ?? [];
61262
+ if (firstError !== void 0 || body?.data === void 0) {
61263
+ throw new Error(firstError?.message ?? `Metadata request failed with ${response.status}`);
61264
+ }
61265
+ return body.data;
61266
+ };
61267
+ var findMemberByEmail = async (email) => readRestList(
61268
+ await restClient("application").get("/rest/workspaceMembers", {
61269
+ query: { filter: restEq("userEmail", email), limit: 1 }
61270
+ })
61271
+ ).records[0];
61272
+ var loadWorkspaceInvite = async () => {
61273
+ const token = process.env.TWENTY_APP_APPLICATION_ACCESS_TOKEN ?? process.env.TWENTY_APP_ACCESS_TOKEN;
61274
+ const data = await callMetadataGraphql({
61275
+ query: `query {
61276
+ currentWorkspace { id inviteHash isPublicInviteLinkEnabled }
61277
+ }`,
61278
+ token
61279
+ });
61280
+ const inviteHash = data.currentWorkspace.inviteHash?.trim() ?? "";
61281
+ if (inviteHash.length === 0) {
61282
+ throw new Error("\u0423 \u043A\u043E\u043C\u043F\u0430\u043D\u0438\u0438 \u0432 CRM \u043D\u0435\u0442 \u0441\u0441\u044B\u043B\u043A\u0438-\u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u043D\u043E\u0432\u044B\u0445 \u0441\u043E\u0442\u0440\u0443\u0434\u043D\u0438\u043A\u043E\u0432");
61283
+ }
61284
+ if (data.currentWorkspace.isPublicInviteLinkEnabled === false) {
61285
+ throw new Error(
61286
+ "\u0412 CRM \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u0430 \u043F\u0443\u0431\u043B\u0438\u0447\u043D\u0430\u044F \u0441\u0441\u044B\u043B\u043A\u0430-\u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435. \u0412\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u0435\u0451 \u0432 \xAB\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u2192 \u0423\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0438\xBB, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0442\u0440\u0443\u0434\u043D\u0438\u043A\u0438 \u0438\u0437 \u0411\u0438\u0442\u0440\u0438\u043A\u044124 \u043F\u043E\u044F\u0432\u043B\u044F\u043B\u0438\u0441\u044C \u0441\u0430\u043C\u0438."
61287
+ );
61288
+ }
61289
+ return {
61290
+ id: data.currentWorkspace.id,
61291
+ inviteHash,
61292
+ isPublicInviteLinkEnabled: true
61293
+ };
61294
+ };
61295
+ var signUpMember = async (email, workspace) => {
61296
+ await callMetadataGraphql({
61297
+ query: `mutation SignUpInWorkspace(
61298
+ $email: String!
61299
+ $password: String!
61300
+ $workspaceId: UUID
61301
+ $workspaceInviteHash: String
61302
+ $locale: String
61303
+ ) {
61304
+ signUpInWorkspace(
61305
+ email: $email
61306
+ password: $password
61307
+ workspaceId: $workspaceId
61308
+ workspaceInviteHash: $workspaceInviteHash
61309
+ locale: $locale
61310
+ ) { workspace { id } }
61311
+ }`,
61312
+ variables: {
61313
+ email,
61314
+ password: randomBytes(24).toString("base64url"),
61315
+ workspaceId: workspace.id,
61316
+ workspaceInviteHash: workspace.inviteHash,
61317
+ locale: "ru-RU"
61318
+ }
61319
+ });
61320
+ };
61321
+ var nameIsEmpty = (member) => {
61322
+ const firstName = member.name?.firstName?.trim() ?? "";
61323
+ const lastName = member.name?.lastName?.trim() ?? "";
61324
+ return firstName.length === 0 && lastName.length === 0;
61325
+ };
61326
+ var applyBitrixName = async (member, user) => {
61327
+ const name = readBitrixUserName(user);
61328
+ if (name.firstName.length === 0 && name.lastName.length === 0) {
61329
+ return member;
61330
+ }
61331
+ if (!nameIsEmpty(member) && member.name?.firstName === name.firstName && member.name?.lastName === name.lastName) {
61332
+ return member;
61333
+ }
61334
+ if (!nameIsEmpty(member)) {
61335
+ return member;
61336
+ }
61337
+ return readRestRecord(
61338
+ await restClient("application").patch(`/rest/workspaceMembers/${member.id}`, { name })
61339
+ ) ?? { ...member, name };
61340
+ };
61341
+ var findOrCreateWorkspaceMemberFromBitrix = async (user) => {
61342
+ const email = readBitrixUserEmail(user);
61343
+ if (email === void 0) {
61344
+ return void 0;
61345
+ }
61346
+ const existing = await findMemberByEmail(email);
61347
+ if (existing !== void 0) {
61348
+ return applyBitrixName(existing, user);
61349
+ }
61350
+ const workspace = await loadWorkspaceInvite();
61351
+ await signUpMember(email, workspace);
61352
+ const created = await findMemberByEmail(email);
61353
+ if (created === void 0) {
61354
+ throw new Error("\u0421\u043E\u0442\u0440\u0443\u0434\u043D\u0438\u043A \u0441\u043E\u0437\u0434\u0430\u043D \u0432 CRM, \u043D\u043E \u0437\u0430\u043F\u0438\u0441\u044C \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430 \u043F\u043E \u043F\u043E\u0447\u0442\u0435");
61355
+ }
61356
+ return applyBitrixName(created, user);
61357
+ };
61358
+
61359
+ // node_modules/twenty-sdk/dist/logic-function/isDefined-Dtu5EYqP-CMNeFg4z.mjs
61360
+ var import_guards = __toESM(require_build(), 1);
61361
+ var n2 = (n4) => !(0, import_guards.isUndefined)(n4) && !(0, import_guards.isNull)(n4);
61362
+
61363
+ // node_modules/twenty-sdk/dist/logic-function/index.mjs
61364
+ var import_guards2 = __toESM(require_build(), 1);
61365
+
61366
+ // node_modules/uuid/dist-node/stringify.js
61367
+ var byteToHex = [];
61368
+ for (let i5 = 0; i5 < 256; ++i5) {
61369
+ byteToHex.push((i5 + 256).toString(16).slice(1));
61370
+ }
61371
+ function unsafeStringify(arr, offset = 0) {
61372
+ return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
61373
+ }
61374
+
61375
+ // node_modules/uuid/dist-node/rng.js
61376
+ import { randomFillSync } from "node:crypto";
61377
+ var rnds8Pool = new Uint8Array(256);
61378
+ var poolPtr = rnds8Pool.length;
61379
+ function rng() {
61380
+ if (poolPtr > rnds8Pool.length - 16) {
61381
+ randomFillSync(rnds8Pool);
61382
+ poolPtr = 0;
61383
+ }
61384
+ return rnds8Pool.slice(poolPtr, poolPtr += 16);
61385
+ }
61386
+
61387
+ // node_modules/uuid/dist-node/native.js
61388
+ import { randomUUID } from "node:crypto";
61389
+ var native_default = { randomUUID };
61390
+
61391
+ // node_modules/uuid/dist-node/v4.js
61392
+ function _v4(options, buf, offset) {
61393
+ options = options || {};
61394
+ const rnds = options.random ?? options.rng?.() ?? rng();
61395
+ if (rnds.length < 16) {
61396
+ throw new Error("Random bytes length must be >= 16");
61397
+ }
61398
+ rnds[6] = rnds[6] & 15 | 64;
61399
+ rnds[8] = rnds[8] & 63 | 128;
61400
+ if (buf) {
61401
+ offset = offset || 0;
61402
+ if (offset < 0 || offset + 16 > buf.length) {
61403
+ throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
61404
+ }
61405
+ for (let i5 = 0; i5 < 16; ++i5) {
61406
+ buf[offset + i5] = rnds[i5];
61407
+ }
61408
+ return buf;
61409
+ }
61410
+ return unsafeStringify(rnds);
61411
+ }
61412
+ function v4(options, buf, offset) {
61413
+ if (native_default.randomUUID && !buf && !options) {
61414
+ return native_default.randomUUID();
61415
+ }
61416
+ return _v4(options, buf, offset);
61417
+ }
61418
+ var v4_default = v4;
61419
+
61277
61420
  // node_modules/twenty-sdk/dist/logic-function/index.mjs
61421
+ var l4 = __toESM(require_react(), 1);
61422
+ import { MetadataApiClient as u3 } from "twenty-client-sdk/metadata";
61278
61423
  var f2 = Object.defineProperty;
61279
61424
  var p2 = (e3, t4) => () => (t4 || (e3((t4 = { exports: {} }).exports, t4), e3 = null), t4.exports);
61280
61425
  var m2 = (e3, t4) => {
@@ -71982,17 +72127,17 @@ var gp2 = {
71982
72127
  };
71983
72128
  var _p = /* @__PURE__ */ new WeakSet();
71984
72129
  var vp = /* @__PURE__ */ new WeakMap();
71985
- var yp2 = (t4) => n(t4) && !(typeof t4 == "object" && _p.has(t4));
72130
+ var yp2 = (t4) => n2(t4) && !(typeof t4 == "object" && _p.has(t4));
71986
72131
  var bp = (e3) => typeof e3 == "object" && !!e3 && !Array.isArray(e3);
71987
72132
  var xp2 = (t4) => {
71988
- if (!n(t4) || t4 === "") return true;
72133
+ if (!n2(t4) || t4 === "") return true;
71989
72134
  if (Array.isArray(t4)) return t4.length === 0;
71990
72135
  if (!bp(t4) || t4 instanceof Date) return false;
71991
72136
  if (_p.has(t4)) return true;
71992
72137
  let n4 = vp.get(t4);
71993
72138
  if (n4 === W2.RICH_TEXT) return !(0, import_guards2.isNonEmptyString)(t4.markdown) || t4.markdown.trim().length === 0;
71994
- let i5 = n(n4) ? gp2[n4] : void 0;
71995
- return (n(i5) ? i5.map((e3) => t4[e3]) : Object.values(t4)).every(xp2);
72139
+ let i5 = n2(n4) ? gp2[n4] : void 0;
72140
+ return (n2(i5) ? i5.map((e3) => t4[e3]) : Object.values(t4)).every(xp2);
71996
72141
  };
71997
72142
  var Sp2 = {
71998
72143
  isDefined: {
@@ -116675,7 +116820,7 @@ var Vj2 = (t4, n4) => {
116675
116820
  if (!(0, import_guards2.isString)(n4)) return;
116676
116821
  let r4 = n4.split("."), i5 = t4;
116677
116822
  for (let t5 of r4) {
116678
- if (!n(i5) || !(0, import_guards2.isObject)(i5) || Bj2.has(t5) || !Object.prototype.hasOwnProperty.call(i5, t5)) return;
116823
+ if (!n2(i5) || !(0, import_guards2.isObject)(i5) || Bj2.has(t5) || !Object.prototype.hasOwnProperty.call(i5, t5)) return;
116679
116824
  i5 = i5[t5];
116680
116825
  }
116681
116826
  return i5;
@@ -116683,7 +116828,7 @@ var Vj2 = (t4, n4) => {
116683
116828
  var Hj2 = (e3, n4) => (r4, i5) => (0, import_guards2.isNonEmptyArray)(r4) ? r4[e3]((e4) => n4(Vj2(e4, i5))) : false;
116684
116829
  var Uj = (e3, n4) => (r4, i5, a5) => (0, import_guards2.isNonEmptyArray)(r4) ? r4[e3]((e4) => n4(Vj2(e4, i5), a5)) : false;
116685
116830
  var Wj2 = new ph2();
116686
- Wj2.functions.isDefined = (t4) => n(t4), Wj2.functions.isNonEmptyString = (e3) => (0, import_guards2.isNonEmptyString)(e3), Wj2.functions.includes = (e3, t4) => Array.isArray(e3) && e3.includes(t4), Wj2.functions.arrayLength = (e3) => Array.isArray(e3) ? e3.length : 0, Wj2.functions.every = Hj2("every", Boolean), Wj2.functions.everyDefined = Hj2("every", n), Wj2.functions.some = Hj2("some", Boolean), Wj2.functions.someDefined = Hj2("some", n), Wj2.functions.someNonEmptyString = Hj2("some", import_guards2.isNonEmptyString), Wj2.functions.none = Hj2("every", (e3) => !e3), Wj2.functions.noneDefined = Hj2("every", (t4) => !n(t4)), Wj2.functions.everyEquals = Uj("every", (e3, t4) => e3 === t4), Wj2.functions.someEquals = Uj("some", (e3, t4) => e3 === t4), Wj2.functions.noneEquals = Uj("every", (e3, t4) => e3 !== t4), Wj2.functions.includesEvery = Uj("every", (e3, t4) => Array.isArray(e3) && e3.includes(t4)), Wj2.functions.includesSome = Uj("some", (e3, t4) => Array.isArray(e3) && e3.includes(t4)), Wj2.functions.includesNone = Uj("every", (e3, t4) => Array.isArray(e3) && !e3.includes(t4));
116831
+ Wj2.functions.isDefined = (t4) => n2(t4), Wj2.functions.isNonEmptyString = (e3) => (0, import_guards2.isNonEmptyString)(e3), Wj2.functions.includes = (e3, t4) => Array.isArray(e3) && e3.includes(t4), Wj2.functions.arrayLength = (e3) => Array.isArray(e3) ? e3.length : 0, Wj2.functions.every = Hj2("every", Boolean), Wj2.functions.everyDefined = Hj2("every", n2), Wj2.functions.some = Hj2("some", Boolean), Wj2.functions.someDefined = Hj2("some", n2), Wj2.functions.someNonEmptyString = Hj2("some", import_guards2.isNonEmptyString), Wj2.functions.none = Hj2("every", (e3) => !e3), Wj2.functions.noneDefined = Hj2("every", (t4) => !n2(t4)), Wj2.functions.everyEquals = Uj("every", (e3, t4) => e3 === t4), Wj2.functions.someEquals = Uj("some", (e3, t4) => e3 === t4), Wj2.functions.noneEquals = Uj("every", (e3, t4) => e3 !== t4), Wj2.functions.includesEvery = Uj("every", (e3, t4) => Array.isArray(e3) && e3.includes(t4)), Wj2.functions.includesSome = Uj("some", (e3, t4) => Array.isArray(e3) && e3.includes(t4)), Wj2.functions.includesNone = Uj("every", (e3, t4) => Array.isArray(e3) && !e3.includes(t4));
116687
116832
  var Kj2 = [
116688
116833
  "yyyy.MM.dd",
116689
116834
  "yyyy/MM/dd",
@@ -118752,7 +118897,7 @@ var jF2 = (e3) => {
118752
118897
  var MF2 = /{{([^{}]+)}}/g;
118753
118898
  function* NF2(t4) {
118754
118899
  if ((0, import_guards2.isString)(t4)) {
118755
- for (let [, n4] of t4.matchAll(MF2)) n(n4) && (yield n4);
118900
+ for (let [, n4] of t4.matchAll(MF2)) n2(n4) && (yield n4);
118756
118901
  return;
118757
118902
  }
118758
118903
  if ((0, import_guards2.isObject)(t4)) for (let e3 of Object.values(t4)) yield* NF2(e3);
@@ -118772,9 +118917,9 @@ var FF2 = (e3, t4) => {
118772
118917
  return i5[e3.length][t4.length];
118773
118918
  };
118774
118919
  var IF2 = (t4) => {
118775
- if (!n(t4) || !Kf2(t4) || Array.isArray(t4)) return false;
118920
+ if (!n2(t4) || !Kf2(t4) || Array.isArray(t4)) return false;
118776
118921
  let n4 = Object.values(t4);
118777
- return n4.length === 0 ? false : n4.every((t5) => n(t5) && Kf2(t5) && Wf2(t5.isLeaf));
118922
+ return n4.length === 0 ? false : n4.every((t5) => n2(t5) && Kf2(t5) && Wf2(t5.isLeaf));
118778
118923
  };
118779
118924
  var LF2 = (e3, t4 = []) => {
118780
118925
  let n4 = [];
@@ -118790,21 +118935,21 @@ var RF2 = ({ schema: t4, propertyPath: n4 }) => {
118790
118935
  let r4 = t4;
118791
118936
  for (let t5 = 0; t5 < n4.length; t5++) {
118792
118937
  let i5 = n4[t5];
118793
- if (!n(i5)) return;
118938
+ if (!n2(i5)) return;
118794
118939
  if (!(0, import_guards2.isObject)(r4)) return {
118795
118940
  validPrefix: n4.slice(0, t5),
118796
118941
  failedSegment: i5,
118797
118942
  availableKeys: []
118798
118943
  };
118799
118944
  let o5 = r4[i5];
118800
- if (!n(o5)) return {
118945
+ if (!n2(o5)) return {
118801
118946
  validPrefix: n4.slice(0, t5),
118802
118947
  failedSegment: i5,
118803
118948
  availableKeys: Object.keys(r4)
118804
118949
  };
118805
118950
  if (o5.isLeaf) {
118806
118951
  let r5 = n4[t5 + 1];
118807
- return n(r5) ? {
118952
+ return n2(r5) ? {
118808
118953
  validPrefix: n4.slice(0, t5 + 1),
118809
118954
  failedSegment: r5,
118810
118955
  availableKeys: []
@@ -118841,9 +118986,9 @@ var KF2 = (e3, t4) => {
118841
118986
  };
118842
118987
  var qF2 = (t4, n4) => {
118843
118988
  let [r4, ...i5] = n4;
118844
- if (!n(r4)) return zF2;
118989
+ if (!n2(r4)) return zF2;
118845
118990
  let a5 = t4[r4];
118846
- return BF2(a5) ? WF2(a5, i5) : n(a5) ? i5.length === 0 ? { found: true } : bp(a5) ? qF2(a5, i5) : zF2 : zF2;
118991
+ return BF2(a5) ? WF2(a5, i5) : n2(a5) ? i5.length === 0 ? { found: true } : bp(a5) ? qF2(a5, i5) : zF2 : zF2;
118847
118992
  };
118848
118993
  var JF2 = (e3, t4) => t4.length === 0 || !bp(e3) ? zF2 : VF2(e3) ? GF2(e3.fields, t4) : HF2(e3) ? KF2(e3, t4) : qF2(e3, t4);
118849
118994
  var YF2 = ({ schema: e3, propertyPath: t4 }) => JF2(e3, t4);
@@ -118854,7 +118999,7 @@ var XF2 = (t4) => {
118854
118999
  let e3 = i5.value;
118855
119000
  if (VF2(e3)) for (let t5 of XF2(e3.fields)) n4.push(`${r4}.${t5}`);
118856
119001
  else if (bp(e3)) for (let t5 of XF2(e3)) n4.push(`${r4}.${t5}`);
118857
- } else if (n(i5) && (n4.push(r4), bp(i5))) for (let e3 of XF2(i5)) n4.push(`${r4}.${e3}`);
119002
+ } else if (n2(i5) && (n4.push(r4), bp(i5))) for (let e3 of XF2(i5)) n4.push(`${r4}.${e3}`);
118858
119003
  return n4;
118859
119004
  };
118860
119005
  var ZF2 = (t4) => {
@@ -118866,7 +119011,7 @@ var ZF2 = (t4) => {
118866
119011
  n4.push("first");
118867
119012
  for (let e3 of ZF2(t4.first.value)) n4.push(`first.${e3}`);
118868
119013
  }
118869
- return n(t4.all) && n4.push("all"), n4.push("totalCount"), n4;
119014
+ return n2(t4.all) && n4.push("all"), n4.push("totalCount"), n4;
118870
119015
  }
118871
119016
  return XF2(t4);
118872
119017
  };
@@ -118885,7 +119030,7 @@ var tI2 = ({ schema: n4, propertyPath: r4, referencedStepId: i5 }) => {
118885
119030
  schema: n4,
118886
119031
  propertyPath: r4
118887
119032
  });
118888
- if (!n(a5)) return [];
119033
+ if (!n2(a5)) return [];
118889
119034
  let o5 = eI2(a5.failedSegment, a5.availableKeys).map((e3) => [
118890
119035
  i5,
118891
119036
  ...a5.validPrefix,
@@ -118901,7 +119046,7 @@ var nI2 = ({ workflow: t4, graph: n4, stepsById: r4 }) => {
118901
119046
  let s5 = PF2(o5.settings?.input), c4 = n4.ancestorsByStepId.get(o5.id) ?? /* @__PURE__ */ new Set();
118902
119047
  for (let n5 of s5) {
118903
119048
  let s6 = jF2(n5), l5 = s6[0];
118904
- if (!n(l5)) {
119049
+ if (!n2(l5)) {
118905
119050
  i5.push({
118906
119051
  severity: "error",
118907
119052
  code: "VARIABLE_INVALID_PATH",
@@ -118950,8 +119095,8 @@ var nI2 = ({ workflow: t4, graph: n4, stepsById: r4 }) => {
118950
119095
  var rI2 = ({ step: n4, variable: r4, pathSegments: i5, referencedStepId: o5, isTriggerReference: s5, trigger: c4, stepsById: l5 }) => {
118951
119096
  let u4 = i5.slice(1);
118952
119097
  if (u4.length === 0) return [];
118953
- let d2 = s5 ? c4?.settings?.outputSchema : l5.get(o5)?.settings?.outputSchema, f3 = n(d2) && (0, import_guards2.isObject)(d2) && !Array.isArray(d2) && Object.keys(d2).length === 0;
118954
- if (!n(d2) || f3) return [];
119098
+ let d2 = s5 ? c4?.settings?.outputSchema : l5.get(o5)?.settings?.outputSchema, f3 = n2(d2) && (0, import_guards2.isObject)(d2) && !Array.isArray(d2) && Object.keys(d2).length === 0;
119099
+ if (!n2(d2) || f3) return [];
118955
119100
  if (!YF2({
118956
119101
  schema: d2,
118957
119102
  propertyPath: u4
@@ -118967,7 +119112,7 @@ var rI2 = ({ step: n4, variable: r4, pathSegments: i5, referencedStepId: o5, isT
118967
119112
  message: `Step "${n4.name ?? n4.id}" references variable "{{${r4}}}" but the path "${u4.join(".")}" was not found in the output of step "${o5}".`,
118968
119113
  stepId: n4.id,
118969
119114
  path: r4,
118970
- ...n(s6) ? { hint: s6 } : {},
119115
+ ...n2(s6) ? { hint: s6 } : {},
118971
119116
  ...(0, import_guards2.isNonEmptyArray)(i6) ? { suggestions: i6 } : {},
118972
119117
  ...(0, import_guards2.isNonEmptyArray)(a5) ? { availablePaths: a5 } : {}
118973
119118
  }];
@@ -119151,7 +119296,7 @@ sI2.extend({ input: V2({
119151
119296
  fieldName: z2()
119152
119297
  }).optional()
119153
119298
  }).superRefine((t4, n4) => {
119154
- t4.strategy === "LOAD_BALANCED" && !n(t4.loadBalance) && n4.addIssue({
119299
+ t4.strategy === "LOAD_BALANCED" && !n2(t4.loadBalance) && n4.addIssue({
119155
119300
  code: Cf2.custom,
119156
119301
  path: ["loadBalance"],
119157
119302
  message: "loadBalance is required when strategy is LOAD_BALANCED"
@@ -119167,7 +119312,7 @@ var NI2 = (e3) => {
119167
119312
  };
119168
119313
  var PI2 = (t4) => {
119169
119314
  let n4 = t4.settings?.input;
119170
- if (n(n4) && (0, import_guards2.isObject)(n4)) return n4;
119315
+ if (n2(n4) && (0, import_guards2.isObject)(n4)) return n4;
119171
119316
  };
119172
119317
  var FI2 = (e3) => {
119173
119318
  let t4 = new Set(e3.nextStepIds ?? []);
@@ -119176,13 +119321,13 @@ var FI2 = (e3) => {
119176
119321
  return [...t4];
119177
119322
  };
119178
119323
  var II2 = ({ trigger: t4, steps: n4 }) => {
119179
- let r4 = /* @__PURE__ */ new Map(), i5 = n(t4?.nextStepIds) ? t4.nextStepIds.filter(n) : [];
119324
+ let r4 = /* @__PURE__ */ new Map(), i5 = n2(t4?.nextStepIds) ? t4.nextStepIds.filter(n2) : [];
119180
119325
  r4.set(AF2, i5);
119181
119326
  for (let e3 of n4 ?? []) r4.set(e3.id, FI2(e3));
119182
119327
  let a5 = /* @__PURE__ */ new Set(), o5 = [AF2];
119183
119328
  for (; o5.length > 0; ) {
119184
119329
  let t5 = o5.shift();
119185
- if (!(!n(t5) || a5.has(t5))) {
119330
+ if (!(!n2(t5) || a5.has(t5))) {
119186
119331
  a5.add(t5);
119187
119332
  for (let e3 of r4.get(t5) ?? []) a5.has(e3) || o5.push(e3);
119188
119333
  }
@@ -119228,10 +119373,10 @@ var RI2 = ({ workflow: t4, graph: n4 }) => {
119228
119373
  return;
119229
119374
  }
119230
119375
  let d2 = o5.get(t5), f3 = `${t5}:${c4.join(",")}`;
119231
- if (!n(d2) || a5.has(f3)) return;
119376
+ if (!n2(d2) || a5.has(f3)) return;
119232
119377
  i5.add(t5), NI2(d2) && (d2.settings.input.initialLoopStepIds ?? []).forEach((e3) => s5(e3, [...c4, t5], t5));
119233
119378
  let p3 = d2.type === kF2.ITERATOR ? d2.nextStepIds ?? [] : n4.childrenByStepId.get(t5) ?? [];
119234
- n(u4) && p3.length === 0 && r4.push({
119379
+ n2(u4) && p3.length === 0 && r4.push({
119235
119380
  severity: "error",
119236
119381
  code: "ITERATOR_MISSING_RETURN",
119237
119382
  stepId: t5,
@@ -119248,7 +119393,7 @@ var zI2 = ({ workflow: t4, graph: n4 }) => {
119248
119393
  message: `Duplicate step id "${e3.id}". Every step id must be unique within the workflow.`,
119249
119394
  stepId: e3.id
119250
119395
  }), o5.add(e3.id);
119251
- let s5 = (t4.trigger?.nextStepIds ?? []).filter(n);
119396
+ let s5 = (t4.trigger?.nextStepIds ?? []).filter(n2);
119252
119397
  zj2(i5) && s5.length === 0 && r4.push({
119253
119398
  severity: "error",
119254
119399
  code: "TRIGGER_HAS_NO_NEXT_STEP",
@@ -119286,7 +119431,7 @@ var BI = (t4) => {
119286
119431
  message: `If/Else step "${t4.name ?? t4.id}" should have at least two branches (a condition branch and an else branch).`,
119287
119432
  stepId: t4.id
119288
119433
  });
119289
- let o5 = r4?.stepFilterGroups, s5 = new Set((Array.isArray(o5) ? o5 : []).filter(n).map((e3) => e3.id));
119434
+ let o5 = r4?.stepFilterGroups, s5 = new Set((Array.isArray(o5) ? o5 : []).filter(n2).map((e3) => e3.id));
119290
119435
  for (let r5 of a5) {
119291
119436
  let i6 = r5?.nextStepIds;
119292
119437
  (!Array.isArray(i6) || i6.length === 0) && n4.push({
@@ -119294,7 +119439,7 @@ var BI = (t4) => {
119294
119439
  code: "IF_ELSE_BRANCH_HAS_NO_NEXT_STEP",
119295
119440
  message: `A branch of If/Else step "${t4.name ?? t4.id}" is not connected to any step.`,
119296
119441
  stepId: t4.id
119297
- }), n(r5?.filterGroupId) && !s5.has(r5.filterGroupId) && n4.push({
119442
+ }), n2(r5?.filterGroupId) && !s5.has(r5.filterGroupId) && n4.push({
119298
119443
  severity: "error",
119299
119444
  code: "INVALID_STEP_PARAMS",
119300
119445
  message: `A branch of If/Else step "${t4.name ?? t4.id}" references filter group "${r5.filterGroupId}", which does not exist.`,
@@ -119383,7 +119528,7 @@ var YI2 = gd2("type", [
119383
119528
  fieldUniversalIdentifier: Wl2()
119384
119529
  }).optional()
119385
119530
  }).superRefine((t4, n4) => {
119386
- t4.strategy === "LOAD_BALANCED" && !n(t4.loadBalance) && n4.addIssue({
119531
+ t4.strategy === "LOAD_BALANCED" && !n2(t4.loadBalance) && n4.addIssue({
119387
119532
  code: "custom",
119388
119533
  path: ["loadBalance"],
119389
119534
  message: "loadBalance is required when strategy is LOAD_BALANCED"
@@ -119614,13 +119759,6 @@ var htmlResponse = (status, html) => new AL(html, {
119614
119759
  headers: { "content-type": "text/html; charset=utf-8" }
119615
119760
  });
119616
119761
 
119617
- // src/server/records.ts
119618
- var clients = {
119619
- person: new u2(),
119620
- application: new u2({ runAs: "application" })
119621
- };
119622
- var restClient = (runAs) => clients[runAs];
119623
-
119624
119762
  // src/universal-identifiers.ts
119625
119763
  var BITRIX_APP_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER = "00fa5cea-d57b-4215-980a-c4bed9232a4f";
119626
119764
 
@@ -119630,33 +119768,23 @@ var getCrmUrl = () => {
119630
119768
  const value = process.env.CRM_PUBLIC_URL?.trim();
119631
119769
  return value !== void 0 && /^https?:\/\//.test(value) ? value.replace(/\/$/, "") : void 0;
119632
119770
  };
119633
- var findMyTasks = async (email, crmUrl) => {
119634
- const [member] = readRestList(
119635
- await restClient("application").get("/rest/workspaceMembers", {
119636
- query: { filter: restEq("userEmail", email), limit: 1 }
119637
- })
119638
- ).records;
119639
- if (member === void 0) {
119640
- return void 0;
119641
- }
119642
- return readRestList(
119643
- await restClient("application").get("/rest/tasks", {
119644
- query: {
119645
- filter: restAnd(
119646
- restEq("smbSection", DOCFLOW_SECTION),
119647
- restEq("assigneeId", member.id),
119648
- restOr(restNeq("status", TASK_DONE_STATUS), restIsNull("status"))
119649
- ),
119650
- order_by: "dueAt[AscNullsLast]",
119651
- limit: TASKS_SHOWN_IN_PORTAL
119652
- }
119653
- })
119654
- ).records.map((task) => ({
119655
- title: task.title?.trim() || "\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F",
119656
- url: crmUrl !== void 0 ? `${crmUrl}/object/task/${task.id}` : void 0,
119657
- dueAt: typeof task.dueAt === "string" ? new Date(task.dueAt).toLocaleDateString("ru-RU") : void 0
119658
- }));
119659
- };
119771
+ var listOpenTasksForMember = async (memberId, crmUrl) => readRestList(
119772
+ await restClient("application").get("/rest/tasks", {
119773
+ query: {
119774
+ filter: restAnd(
119775
+ restEq("smbSection", DOCFLOW_SECTION),
119776
+ restEq("assigneeId", memberId),
119777
+ restOr(restNeq("status", TASK_DONE_STATUS), restIsNull("status"))
119778
+ ),
119779
+ order_by: "dueAt[AscNullsLast]",
119780
+ limit: TASKS_SHOWN_IN_PORTAL
119781
+ }
119782
+ })
119783
+ ).records.map((task) => ({
119784
+ title: task.title?.trim() || "\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F",
119785
+ url: crmUrl !== void 0 ? `${crmUrl}/object/task/${task.id}` : void 0,
119786
+ dueAt: typeof task.dueAt === "string" ? new Date(task.dueAt).toLocaleDateString("ru-RU") : void 0
119787
+ }));
119660
119788
  var handler = async (event) => {
119661
119789
  const crmUrl = getCrmUrl();
119662
119790
  if (!isBitrixConfigured()) {
@@ -119684,23 +119812,48 @@ var handler = async (event) => {
119684
119812
  method: "user.current",
119685
119813
  params: {}
119686
119814
  });
119687
- const tasks = typeof user.EMAIL === "string" && user.EMAIL.length > 0 ? await findMyTasks(user.EMAIL, crmUrl) : void 0;
119815
+ const member = await findOrCreateWorkspaceMemberFromBitrix(user);
119816
+ if (member === void 0) {
119817
+ return htmlResponse(
119818
+ 200,
119819
+ renderBitrixPage({
119820
+ title: "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043E\u0431\u043E\u0440\u043E\u0442",
119821
+ message: "\u0412 \u043F\u0440\u043E\u0444\u0438\u043B\u0435 \u0411\u0438\u0442\u0440\u0438\u043A\u044124 \u043D\u0435\u0442 \u043F\u043E\u0447\u0442\u044B \u2014 \u0431\u0435\u0437 \u043D\u0435\u0451 \u043D\u0435\u043B\u044C\u0437\u044F \u043D\u0430\u0439\u0442\u0438 \u0438\u043B\u0438 \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u0441\u043E\u0442\u0440\u0443\u0434\u043D\u0438\u043A\u0430 \u0432 CRM.",
119822
+ crmUrl,
119823
+ tasks: [],
119824
+ isInstall: false
119825
+ })
119826
+ );
119827
+ }
119828
+ const tasks = await listOpenTasksForMember(member.id, crmUrl);
119688
119829
  return htmlResponse(
119689
119830
  200,
119690
119831
  renderBitrixPage({
119691
119832
  title: "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043E\u0431\u043E\u0440\u043E\u0442",
119692
- message: tasks === void 0 ? "\u0412 CRM \u043D\u0435\u0442 \u0441\u043E\u0442\u0440\u0443\u0434\u043D\u0438\u043A\u0430 \u0441 \u043F\u043E\u0447\u0442\u043E\u0439 \u0432\u0430\u0448\u0435\u0433\u043E \u043F\u0440\u043E\u0444\u0438\u043B\u044F \u0411\u0438\u0442\u0440\u0438\u043A\u044124." : tasks.length === 0 ? "\u041E\u0442\u043A\u0440\u044B\u0442\u044B\u0445 \u0437\u0430\u0434\u0430\u043D\u0438\u0439 \u043D\u0435\u0442." : "\u0412\u0430\u0448\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0437\u0430\u0434\u0430\u043D\u0438\u044F:",
119833
+ message: tasks.length === 0 ? "\u041E\u0442\u043A\u0440\u044B\u0442\u044B\u0445 \u0437\u0430\u0434\u0430\u043D\u0438\u0439 \u043D\u0435\u0442." : "\u0412\u0430\u0448\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0437\u0430\u0434\u0430\u043D\u0438\u044F:",
119693
119834
  crmUrl,
119694
- tasks: tasks ?? [],
119835
+ tasks,
119695
119836
  isInstall: false
119696
119837
  })
119697
119838
  );
119698
119839
  } catch (error) {
119840
+ if (error instanceof BitrixError) {
119841
+ return htmlResponse(
119842
+ 403,
119843
+ renderBitrixPage({
119844
+ title: "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043E\u0431\u043E\u0440\u043E\u0442",
119845
+ message: `\u0417\u0430\u043F\u0440\u043E\u0441 \u043F\u043E\u0440\u0442\u0430\u043B\u0430 \u043D\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043D: ${error.message}`,
119846
+ crmUrl,
119847
+ tasks: [],
119848
+ isInstall: false
119849
+ })
119850
+ );
119851
+ }
119699
119852
  return htmlResponse(
119700
- 403,
119853
+ 200,
119701
119854
  renderBitrixPage({
119702
119855
  title: "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043E\u0431\u043E\u0440\u043E\u0442",
119703
- message: error instanceof BitrixError ? `\u0417\u0430\u043F\u0440\u043E\u0441 \u043F\u043E\u0440\u0442\u0430\u043B\u0430 \u043D\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043D: ${error.message}` : "\u0417\u0430\u043F\u0440\u043E\u0441 \u043F\u043E\u0440\u0442\u0430\u043B\u0430 \u043D\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043D.",
119856
+ message: error instanceof Error ? error.message : "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043E\u0431\u043E\u0440\u043E\u0442 \u0434\u043B\u044F \u0432\u0430\u0448\u0435\u0433\u043E \u043F\u0440\u043E\u0444\u0438\u043B\u044F \u0411\u0438\u0442\u0440\u0438\u043A\u044124.",
119704
119857
  crmUrl,
119705
119858
  tasks: [],
119706
119859
  isInstall: false