@things-factory/integration-accounting 5.0.14 → 6.0.0-alpha.3
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-server/controllers/accounting-api/index.js +2 -2
- package/dist-server/controllers/accounting-api/index.js.map +1 -1
- package/dist-server/controllers/xero/xero.js +2 -2
- package/dist-server/controllers/xero/xero.js.map +1 -1
- package/dist-server/engine/task/accounting-api.js +3 -3
- package/dist-server/engine/task/accounting-api.js.map +1 -1
- package/dist-server/entities/account.js +3 -4
- package/dist-server/entities/account.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/account.js +4 -4
- package/dist-server/graphql/resolvers/accounting/account.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/accounts.js +1 -2
- package/dist-server/graphql/resolvers/accounting/accounts.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/create-account.js +4 -3
- package/dist-server/graphql/resolvers/accounting/create-account.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/delete-account.js +5 -5
- package/dist-server/graphql/resolvers/accounting/delete-account.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/delete-accounts.js +5 -4
- package/dist-server/graphql/resolvers/accounting/delete-accounts.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/update-account.js +3 -3
- package/dist-server/graphql/resolvers/accounting/update-account.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/update-multiple-accounts.js +3 -3
- package/dist-server/graphql/resolvers/accounting/update-multiple-accounts.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/xero/deactivate-xero-account.js +4 -4
- package/dist-server/graphql/resolvers/accounting/xero/deactivate-xero-account.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/xero/get-xero-auth-url.js +4 -4
- package/dist-server/graphql/resolvers/accounting/xero/get-xero-auth-url.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/xero/refresh-xero-access-token.js +5 -5
- package/dist-server/graphql/resolvers/accounting/xero/refresh-xero-access-token.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting-api/accounting-invoice.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting-api/accounting-item.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting-api/accounting-purchase-order.js.map +1 -1
- package/dist-server/routers/xero-router.js +3 -4
- package/dist-server/routers/xero-router.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -16
- package/server/controllers/accounting-api/index.ts +1 -1
- package/server/controllers/xero/xero.ts +1 -1
- package/server/engine/task/accounting-api.ts +3 -2
- package/server/graphql/resolvers/accounting/account.ts +4 -3
- package/server/graphql/resolvers/accounting/accounts.ts +2 -4
- package/server/graphql/resolvers/accounting/create-account.ts +9 -6
- package/server/graphql/resolvers/accounting/delete-account.ts +5 -4
- package/server/graphql/resolvers/accounting/delete-accounts.ts +7 -4
- package/server/graphql/resolvers/accounting/update-account.ts +4 -3
- package/server/graphql/resolvers/accounting/update-multiple-accounts.ts +4 -3
- package/server/graphql/resolvers/accounting/xero/deactivate-xero-account.ts +6 -4
- package/server/graphql/resolvers/accounting/xero/get-xero-auth-url.ts +6 -4
- package/server/graphql/resolvers/accounting/xero/refresh-xero-access-token.ts +7 -5
- package/server/graphql/resolvers/accounting-api/accounting-invoice.ts +9 -9
- package/server/graphql/resolvers/accounting-api/accounting-item.ts +11 -12
- package/server/graphql/resolvers/accounting-api/accounting-purchase-order.ts +1 -1
- package/server/routers/xero-router.ts +2 -3
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AccountingAPI = exports.ACCOUNTING_STATUS = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const
|
|
5
|
+
const shell_1 = require("@things-factory/shell");
|
|
6
6
|
const entities_1 = require("../../entities");
|
|
7
7
|
const decorators_1 = require("./decorators");
|
|
8
8
|
exports.ACCOUNTING_STATUS = {
|
|
@@ -21,7 +21,7 @@ class AccountingAPI {
|
|
|
21
21
|
return AccountingAPI.platforms[name];
|
|
22
22
|
}
|
|
23
23
|
static async getAccounting(id) {
|
|
24
|
-
const repository = (0,
|
|
24
|
+
const repository = (0, shell_1.getRepository)(entities_1.Account);
|
|
25
25
|
return await repository.findOne({
|
|
26
26
|
where: { id },
|
|
27
27
|
relations: ['domain']
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/controllers/accounting-api/index.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/controllers/accounting-api/index.ts"],"names":[],"mappings":";;;;AAAA,iDAAqD;AAErD,6CAAwC;AACxC,6CAAkC;AAErB,QAAA,iBAAiB,GAAG;IAC/B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,YAAY;CACzB,CAAA;AAED,MAAa,aAAa;IAGxB,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI;QACxC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;YAC9B,MAAM;YACN,IAAI;SACL,CAAA;IACH,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAI;QACrB,OAAO,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;QAC3B,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,kBAAO,CAAC,CAAA;QACzC,OAAO,MAAM,UAAU,CAAC,OAAO,CAAC;YAC9B,KAAK,EAAE,EAAE,EAAE,EAAE;YACb,SAAS,EAAE,CAAC,QAAQ,CAAC;SACtB,CAAC,CAAA;IACJ,CAAC;IAGD,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAG1C,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAG3C,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAG7C,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAG7C,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAGjD,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAG1C,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAG3C,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAGvC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAGxC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAG1C,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAG1C,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAG3C,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;;AA1DnC,uBAAS,GAAG,EAAE,CAAA;AAsBrB;IADC,gBAAG;;;;qCACsC;AAG1C;IADC,gBAAG;;;;sCACuC;AAG3C;IADC,gBAAG;;;;wCACyC;AAG7C;IADC,gBAAG;;;;wCACyC;AAG7C;IADC,gBAAG;;;;4CAC6C;AAGjD;IADC,gBAAG;;;;qCACsC;AAG1C;IADC,gBAAG;;;;sCACuC;AAG3C;IADC,gBAAG;;;;kCACmC;AAGvC;IADC,gBAAG;;;;mCACoC;AAGxC;IADC,gBAAG;;;;qCACsC;AAG1C;IADC,gBAAG;;;;qCACsC;AAG1C;IADC,gBAAG;;;;sCACuC;AAG3C;IADC,gBAAG;;;;qCACsC;AA3D5C,sCA4DC","sourcesContent":["import { getRepository } from '@things-factory/shell'\n\nimport { Account } from '../../entities'\nimport { api } from './decorators'\n\nexport const ACCOUNTING_STATUS = {\n ACTIVE: 'active',\n INACTIVE: 'inactive',\n TERMINATED: 'terminated'\n}\n\nexport class AccountingAPI {\n static platforms = {}\n\n static registerPlatform(name, action, apis) {\n AccountingAPI.platforms[name] = {\n action,\n apis\n }\n }\n\n static getPlatform(name) {\n return AccountingAPI.platforms[name]\n }\n\n static async getAccounting(id) {\n const repository = getRepository(Account)\n return await repository.findOne({\n where: { id },\n relations: ['domain']\n })\n }\n\n @api\n static getInvoice(accounting, req): any {}\n\n @api\n static getInvoices(accounting, req): any {}\n\n @api\n static createInvoice(accounting, req): any {}\n\n @api\n static updateInvoice(accounting, req): any {}\n\n @api\n static getPurchaseOrders(accounting, req): any {}\n\n @api\n static getContact(accounting, req): any {}\n\n @api\n static getContacts(accounting, req): any {}\n\n @api\n static getItem(accounting, req): any {}\n\n @api\n static getItems(accounting, req): any {}\n\n @api\n static createItem(accounting, req): any {}\n\n @api\n static updateItem(accounting, req): any {}\n\n @api\n static updateItems(accounting, req): any {}\n\n @api\n static deleteItem(accounting, req): any {}\n}\n"]}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Xero = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
|
|
6
|
-
const
|
|
6
|
+
const shell_1 = require("@things-factory/shell");
|
|
7
7
|
const utils_1 = require("@things-factory/utils");
|
|
8
8
|
const account_1 = require("../../entities/account");
|
|
9
9
|
const ENDPOINT = 'https://api.xero.com/api.xro/2.0';
|
|
@@ -147,7 +147,7 @@ class Xero {
|
|
|
147
147
|
tokenType,
|
|
148
148
|
expiresIn: new Date(exp * 1000)
|
|
149
149
|
};
|
|
150
|
-
const repository = (0,
|
|
150
|
+
const repository = (0, shell_1.getRepository)(account_1.Account);
|
|
151
151
|
return await repository.save(Object.assign(Object.assign({}, account), patch));
|
|
152
152
|
}
|
|
153
153
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xero.js","sourceRoot":"","sources":["../../../server/controllers/xero/xero.ts"],"names":[],"mappings":";;;;AAAA,oEAA8B;AAC9B,qCAAuC;AAEvC,iDAAgD;AAEhD,oDAAgD;AAEhD,MAAM,QAAQ,GAAG,kCAAkC,CAAA;AACnD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,4CAA4C,CAAC,CAAA;AAU5E,MAAa,IAAI;IAGf,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,qBACN,MAAM,CACV,CAAA;IACH,CAAC;IAED,YAAY,CAAC,KAAK;QAChB,MAAM,MAAM,GAAG,qGAAqG,CAAA;QACpH,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;QAErD,OAAO,kFAAkF,MAAM,UAAU,MAAM,iBAAiB,WAAW,UAAU,KAAK,EAAE,CAAA;IAC9J,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,IAAS;QAC/B,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;QAE7C,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;aAC5B,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACxD,IAAI,CAAC,GAAG,CAAC,CAAA;QAEZ,MAAM,QAAQ,GAAG,GAAG,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QAC1D,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAE3B,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,gBAAgB,EAAE,QAAQ;aAC3B;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,QAAQ,CAAA;SACf;QAED,IAAI,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAClC,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;QAChC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAEvC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,OAAY,EAAE;QACrC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;QAE7C,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAEnB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAErC,MAAM,QAAQ,GAAG,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAA;QACrC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAE3B,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,gBAAgB,EAAE,QAAQ;aAC3B;YACD,IAAI,EAAE,QAAQ;SACf,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,QAAQ,CAAA;SACf;QAED,IAAI,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAClC,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;QAChC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAEvC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,OAAY,EAAE;QACpC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;QAE7C,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAEnB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAErC,MAAM,QAAQ,GAAG,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAA;QACrC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAE3B,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,gBAAgB,EAAE,QAAQ;aAC3B;YACD,IAAI,EAAE,QAAQ;SACf,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,QAAQ,CAAA;SACf;QAED,IAAI,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAClC,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;QAChC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAEvC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,OAAY,EAAE;QACvC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;QAE7C,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAEnB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAErC,MAAM,QAAQ,GAAG,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAA;QACrC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAE3B,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,gBAAgB,EAAE,QAAQ;aAC3B;YACD,IAAI,EAAE,QAAQ;SACf,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,QAAQ,CAAA;SACf;QAED,IAAI,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAClC,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;QAChC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAEvC,OAAO,MAAM,CAAA;IACf,CAAC;IAEO,iBAAiB,CAAC,MAA2B;QACnD,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,CAAA;QAChD,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO;QAC/D,MAAM,kBAAkB,GAAG;YACzB,UAAU,EAAE,eAAe;YAC3B,aAAa,EAAE,OAAO,CAAC,YAAY;SACpC,CAAA;QAED,MAAM,eAAe,GAAG,MAAM,IAAA,oBAAK,EAAC,yCAAyC,EAAE;YAC7E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAClF,cAAc,EAAE,mCAAmC;aACpD;YACD,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;iBACrC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;iBAChF,IAAI,CAAC,GAAG,CAAC;SACb,CAAC,CAAA;QAEF,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;SACnF;QAED,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,CAAA;QACzC,MAAM,EACJ,YAAY,CAAC,gCAAgC,EAC7C,QAAQ,CAAC,mGAAmG,EAC5G,UAAU,CAAC,sDAAsD,EACjE,UAAU,EAAE,SAAS,CAAC,oBAAoB,EAC1C,aAAa;QACb;WACG;UACJ,GAAG,IAAI,CAAA;QAER,MAAM,EAAE,GAAG,EAAE,GAAG,IAAA,gBAAQ,EAAC,YAAY,CAAC,CAAA;QAEtC,IAAI,KAAK,GAAG;YACV,WAAW,EAAE,YAAY;YACzB,YAAY,EAAE,aAAa;YAC3B,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;SAChC,CAAA;QAED,MAAM,UAAU,GAAG,IAAA,uBAAa,EAAC,iBAAO,CAAC,CAAA;QAEzC,OAAO,MAAM,UAAU,CAAC,IAAI,iCACvB,OAAO,GACP,KAAK,EACR,CAAA;IACJ,CAAC;CACF;AApMD,oBAoMC","sourcesContent":["import fetch from 'node-fetch'\nimport { getRepository } from 'typeorm'\n\nimport { parseJwt } from '@things-factory/utils'\n\nimport { Account } from '../../entities/account'\n\nconst ENDPOINT = 'https://api.xero.com/api.xro/2.0'\nconst debug = require('debug')('things-factory:integration-accounting:xero')\n\nexport type XeroConfig = {\n apiKey: string\n apiSecret: string\n accessToken?: string\n tenantId?: string\n callback?: string\n}\n\nexport class Xero {\n private config: XeroConfig\n\n constructor(config: XeroConfig) {\n this.config = {\n ...config\n }\n }\n\n buildAuthURL(nonce) {\n const scopes = 'offline_access openid profile email accounting.transactions accounting.settings accounting.contacts'\n const { apiKey, callback: redirectUrl } = this.config\n\n return `https://login.xero.com/identity/connect/authorize?response_type=code&client_id=${apiKey}&scope=${scopes}&redirect_uri=${redirectUrl}&state=${nonce}`\n }\n\n async get(path: string, data: any) {\n const { accessToken, tenantId } = this.config\n\n const qs = Object.entries(data)\n .map(([k, v]) => `${k}=${encodeURIComponent(String(v))}`)\n .join('&')\n\n const endpoint = `${ENDPOINT}${path}${qs ? '?' + qs : ''}`\n debug('endpoint', endpoint)\n\n const response = await fetch(endpoint, {\n method: 'get',\n headers: {\n accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${accessToken}`,\n 'xero-tenant-id': tenantId\n }\n })\n\n if (!response.ok) {\n throw response\n }\n\n let result = await response.json()\n debug('response result', result)\n result = this.convertStatusCode(result)\n\n return result\n }\n\n async post(path: string, data: any = {}) {\n const { accessToken, tenantId } = this.config\n\n debug('data', data)\n\n const jsondata = JSON.stringify(data)\n\n const endpoint = `${ENDPOINT}${path}`\n debug('endpoint', endpoint)\n\n const response = await fetch(endpoint, {\n method: 'post',\n headers: {\n accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${accessToken}`,\n 'xero-tenant-id': tenantId\n },\n body: jsondata\n })\n\n if (!response.ok) {\n throw response\n }\n\n let result = await response.json()\n debug('response result', result)\n result = this.convertStatusCode(result)\n\n return result\n }\n\n async put(path: string, data: any = {}) {\n const { accessToken, tenantId } = this.config\n\n debug('data', data)\n\n const jsondata = JSON.stringify(data)\n\n const endpoint = `${ENDPOINT}${path}`\n debug('endpoint', endpoint)\n\n const response = await fetch(endpoint, {\n method: 'put',\n headers: {\n accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${accessToken}`,\n 'xero-tenant-id': tenantId\n },\n body: jsondata\n })\n\n if (!response.ok) {\n throw response\n }\n\n let result = await response.json()\n debug('response result', result)\n result = this.convertStatusCode(result)\n\n return result\n }\n\n async delete(path: string, data: any = {}) {\n const { accessToken, tenantId } = this.config\n\n debug('data', data)\n\n const jsondata = JSON.stringify(data)\n\n const endpoint = `${ENDPOINT}${path}`\n debug('endpoint', endpoint)\n\n const response = await fetch(endpoint, {\n method: 'delete',\n headers: {\n accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${accessToken}`,\n 'xero-tenant-id': tenantId\n },\n body: jsondata\n })\n\n if (!response.ok) {\n throw response\n }\n\n let result = await response.json()\n debug('response result', result)\n result = this.convertStatusCode(result)\n\n return result\n }\n\n private convertStatusCode(result: Record<string, any>): Record<string, any> {\n result.ok = result.Status.toLowerCase() === 'ok'\n return result\n }\n\n public static async refreshAccessToken(apiKey, apiSecret, account) {\n const refreshRequestData = {\n grant_type: 'refresh_token',\n refresh_token: account.refreshToken\n }\n\n const refreshResponse = await fetch(`https://identity.xero.com/connect/token`, {\n method: 'post',\n headers: {\n Authorization: `Basic ${Buffer.from(apiKey + ':' + apiSecret).toString('base64')}`,\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: Object.entries(refreshRequestData)\n .map(([key, value]) => encodeURIComponent(key) + '=' + encodeURIComponent(value))\n .join('&')\n })\n\n if (!refreshResponse.ok) {\n throw new Error(`get account information failed: ${await refreshResponse.text()}`)\n }\n\n const body = await refreshResponse.json()\n const {\n access_token /* token used to call the API */,\n id_token /* token containing user identity details (only returned if OpenID Connect scopes are requested) */,\n expires_in /* amount of seconds until the access token expires */,\n token_type: tokenType /* must be Bearer */,\n refresh_token\n /* token used to refresh the access token once it has expired (only returned if the offline_access scope is requested).\n */\n } = body\n\n const { exp } = parseJwt(access_token)\n\n var patch = {\n accessToken: access_token,\n refreshToken: refresh_token,\n tokenType,\n expiresIn: new Date(exp * 1000)\n }\n\n const repository = getRepository(Account)\n\n return await repository.save({\n ...account,\n ...patch\n })\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"xero.js","sourceRoot":"","sources":["../../../server/controllers/xero/xero.ts"],"names":[],"mappings":"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","sourcesContent":["import fetch from 'node-fetch'\n\nimport { getRepository } from '@things-factory/shell'\nimport { parseJwt } from '@things-factory/utils'\n\nimport { Account } from '../../entities/account'\n\nconst ENDPOINT = 'https://api.xero.com/api.xro/2.0'\nconst debug = require('debug')('things-factory:integration-accounting:xero')\n\nexport type XeroConfig = {\n apiKey: string\n apiSecret: string\n accessToken?: string\n tenantId?: string\n callback?: string\n}\n\nexport class Xero {\n private config: XeroConfig\n\n constructor(config: XeroConfig) {\n this.config = {\n ...config\n }\n }\n\n buildAuthURL(nonce) {\n const scopes = 'offline_access openid profile email accounting.transactions accounting.settings accounting.contacts'\n const { apiKey, callback: redirectUrl } = this.config\n\n return `https://login.xero.com/identity/connect/authorize?response_type=code&client_id=${apiKey}&scope=${scopes}&redirect_uri=${redirectUrl}&state=${nonce}`\n }\n\n async get(path: string, data: any) {\n const { accessToken, tenantId } = this.config\n\n const qs = Object.entries(data)\n .map(([k, v]) => `${k}=${encodeURIComponent(String(v))}`)\n .join('&')\n\n const endpoint = `${ENDPOINT}${path}${qs ? '?' + qs : ''}`\n debug('endpoint', endpoint)\n\n const response = await fetch(endpoint, {\n method: 'get',\n headers: {\n accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${accessToken}`,\n 'xero-tenant-id': tenantId\n }\n })\n\n if (!response.ok) {\n throw response\n }\n\n let result = await response.json()\n debug('response result', result)\n result = this.convertStatusCode(result)\n\n return result\n }\n\n async post(path: string, data: any = {}) {\n const { accessToken, tenantId } = this.config\n\n debug('data', data)\n\n const jsondata = JSON.stringify(data)\n\n const endpoint = `${ENDPOINT}${path}`\n debug('endpoint', endpoint)\n\n const response = await fetch(endpoint, {\n method: 'post',\n headers: {\n accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${accessToken}`,\n 'xero-tenant-id': tenantId\n },\n body: jsondata\n })\n\n if (!response.ok) {\n throw response\n }\n\n let result = await response.json()\n debug('response result', result)\n result = this.convertStatusCode(result)\n\n return result\n }\n\n async put(path: string, data: any = {}) {\n const { accessToken, tenantId } = this.config\n\n debug('data', data)\n\n const jsondata = JSON.stringify(data)\n\n const endpoint = `${ENDPOINT}${path}`\n debug('endpoint', endpoint)\n\n const response = await fetch(endpoint, {\n method: 'put',\n headers: {\n accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${accessToken}`,\n 'xero-tenant-id': tenantId\n },\n body: jsondata\n })\n\n if (!response.ok) {\n throw response\n }\n\n let result = await response.json()\n debug('response result', result)\n result = this.convertStatusCode(result)\n\n return result\n }\n\n async delete(path: string, data: any = {}) {\n const { accessToken, tenantId } = this.config\n\n debug('data', data)\n\n const jsondata = JSON.stringify(data)\n\n const endpoint = `${ENDPOINT}${path}`\n debug('endpoint', endpoint)\n\n const response = await fetch(endpoint, {\n method: 'delete',\n headers: {\n accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${accessToken}`,\n 'xero-tenant-id': tenantId\n },\n body: jsondata\n })\n\n if (!response.ok) {\n throw response\n }\n\n let result = await response.json()\n debug('response result', result)\n result = this.convertStatusCode(result)\n\n return result\n }\n\n private convertStatusCode(result: Record<string, any>): Record<string, any> {\n result.ok = result.Status.toLowerCase() === 'ok'\n return result\n }\n\n public static async refreshAccessToken(apiKey, apiSecret, account) {\n const refreshRequestData = {\n grant_type: 'refresh_token',\n refresh_token: account.refreshToken\n }\n\n const refreshResponse = await fetch(`https://identity.xero.com/connect/token`, {\n method: 'post',\n headers: {\n Authorization: `Basic ${Buffer.from(apiKey + ':' + apiSecret).toString('base64')}`,\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: Object.entries(refreshRequestData)\n .map(([key, value]) => encodeURIComponent(key) + '=' + encodeURIComponent(value))\n .join('&')\n })\n\n if (!refreshResponse.ok) {\n throw new Error(`get account information failed: ${await refreshResponse.text()}`)\n }\n\n const body = await refreshResponse.json()\n const {\n access_token /* token used to call the API */,\n id_token /* token containing user identity details (only returned if OpenID Connect scopes are requested) */,\n expires_in /* amount of seconds until the access token expires */,\n token_type: tokenType /* must be Bearer */,\n refresh_token\n /* token used to refresh the access token once it has expired (only returned if the offline_access scope is requested).\n */\n } = body\n\n const { exp } = parseJwt(access_token)\n\n var patch = {\n accessToken: access_token,\n refreshToken: refresh_token,\n tokenType,\n expiresIn: new Date(exp * 1000)\n }\n\n const repository = getRepository(Account)\n\n return await repository.save({\n ...account,\n ...patch\n })\n }\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const integration_base_1 = require("@things-factory/integration-base");
|
|
4
|
+
const shell_1 = require("@things-factory/shell");
|
|
4
5
|
const utils_1 = require("@things-factory/utils");
|
|
5
|
-
const typeorm_1 = require("typeorm");
|
|
6
|
-
const entities_1 = require("../../entities");
|
|
7
6
|
const accounting_api_1 = require("../../controllers/accounting-api");
|
|
7
|
+
const entities_1 = require("../../entities");
|
|
8
8
|
async function AccountingAPI(step, { logger, data, domain }) {
|
|
9
9
|
var { connection, params: { account: name, api, accessor } } = step;
|
|
10
10
|
var client = integration_base_1.ConnectionManager.getConnectionInstanceByName(domain, connection) || {};
|
|
@@ -14,7 +14,7 @@ async function AccountingAPI(step, { logger, data, domain }) {
|
|
|
14
14
|
if (!api) {
|
|
15
15
|
throw new Error(`no api defined`);
|
|
16
16
|
}
|
|
17
|
-
const repository = (0,
|
|
17
|
+
const repository = (0, shell_1.getRepository)(entities_1.Account);
|
|
18
18
|
const account = await repository.findOne({
|
|
19
19
|
where: { domain: domain.id, name }
|
|
20
20
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounting-api.js","sourceRoot":"","sources":["../../../server/engine/task/accounting-api.ts"],"names":[],"mappings":";;AAAA,uEAAkF;AAClF,iDAA8C;
|
|
1
|
+
{"version":3,"file":"accounting-api.js","sourceRoot":"","sources":["../../../server/engine/task/accounting-api.ts"],"names":[],"mappings":";;AAAA,uEAAkF;AAClF,iDAAqD;AACrD,iDAA8C;AAE9C,qEAAuE;AACvE,6CAAwC;AAExC,KAAK,UAAU,aAAa,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IACzD,IAAI,EACF,UAAU,EACV,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,EACzC,GAAG,IAAI,CAAA;IAER,IAAI,MAAM,GAAG,oCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,CAAA;IACpF,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;KACjD;IAED,IAAI,CAAC,GAAG,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;KAClC;IAED,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,kBAAO,CAAC,CAAA;IACzC,MAAM,OAAO,GAAY,MAAM,UAAU,CAAC,OAAO,CAAC;QAChD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE;KACnC,CAAC,CAAA;IAEF,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;KACtC;IAED,IAAI,MAAM,GAAG,MAAM,8BAAG,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAA,cAAM,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAE5E,OAAO;QACL,IAAI,EAAE,MAAM;KACb,CAAA;AACH,CAAC;AAED,aAAa,CAAC,aAAa,GAAG;IAC5B;QACE,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE;YACR,SAAS,EAAE,UAAU;YACrB,QAAQ,EAAE,MAAM;SACjB;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE;YACR,OAAO,EAAE,CAAC,EAAE,EAAE,uBAAuB,CAAC;SACvC;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;KAClB;CACF,CAAA;AAED,+BAAY,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA","sourcesContent":["import { ConnectionManager, TaskRegistry } from '@things-factory/integration-base'\nimport { getRepository } from '@things-factory/shell'\nimport { access } from '@things-factory/utils'\n\nimport { AccountingAPI as API } from '../../controllers/accounting-api'\nimport { Account } from '../../entities'\n\nasync function AccountingAPI(step, { logger, data, domain }) {\n var {\n connection,\n params: { account: name, api, accessor }\n } = step\n\n var client = ConnectionManager.getConnectionInstanceByName(domain, connection) || {}\n if (!client) {\n throw new Error(`no connection : ${connection}`)\n }\n\n if (!api) {\n throw new Error(`no api defined`)\n }\n\n const repository = getRepository(Account)\n const account: Account = await repository.findOne({\n where: { domain: domain.id, name }\n })\n\n if (!account) {\n throw new Error(`no account defined`)\n }\n\n var result = await API[api](account, accessor ? access(accessor, data) : {})\n\n return {\n data: result\n }\n}\n\nAccountingAPI.parameterSpec = [\n {\n type: 'entity-selector',\n name: 'account',\n label: 'account',\n property: {\n queryName: 'accounts',\n valueKey: 'name'\n }\n },\n {\n type: 'select',\n name: 'api',\n label: 'api',\n property: {\n options: ['', 'getAccountingInvoices']\n }\n },\n {\n type: 'string',\n name: 'accessor',\n label: 'accessor'\n }\n]\n\nTaskRegistry.registerTaskHandler('accounting-api', AccountingAPI)\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a, _b, _c;
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.Account = void 0;
|
|
5
4
|
const tslib_1 = require("tslib");
|
|
@@ -14,7 +13,7 @@ tslib_1.__decorate([
|
|
|
14
13
|
], Account.prototype, "id", void 0);
|
|
15
14
|
tslib_1.__decorate([
|
|
16
15
|
(0, typeorm_1.ManyToOne)(type => shell_1.Domain),
|
|
17
|
-
tslib_1.__metadata("design:type",
|
|
16
|
+
tslib_1.__metadata("design:type", shell_1.Domain)
|
|
18
17
|
], Account.prototype, "domain", void 0);
|
|
19
18
|
tslib_1.__decorate([
|
|
20
19
|
(0, typeorm_1.Column)(),
|
|
@@ -98,13 +97,13 @@ tslib_1.__decorate([
|
|
|
98
97
|
(0, typeorm_1.ManyToOne)(type => auth_base_1.User, {
|
|
99
98
|
nullable: true
|
|
100
99
|
}),
|
|
101
|
-
tslib_1.__metadata("design:type",
|
|
100
|
+
tslib_1.__metadata("design:type", auth_base_1.User)
|
|
102
101
|
], Account.prototype, "creator", void 0);
|
|
103
102
|
tslib_1.__decorate([
|
|
104
103
|
(0, typeorm_1.ManyToOne)(type => auth_base_1.User, {
|
|
105
104
|
nullable: true
|
|
106
105
|
}),
|
|
107
|
-
tslib_1.__metadata("design:type",
|
|
106
|
+
tslib_1.__metadata("design:type", auth_base_1.User)
|
|
108
107
|
], Account.prototype, "updater", void 0);
|
|
109
108
|
Account = tslib_1.__decorate([
|
|
110
109
|
(0, typeorm_1.Entity)(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../server/entities/account.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../server/entities/account.ts"],"names":[],"mappings":";;;;AAAA,yDAAgD;AAChD,iDAA8C;AAC9C,qCAAsH;AAItH,IAAa,OAAO,GAApB,MAAa,OAAO;CA+EnB,CAAA;AA7EC;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;mCACrB;AAGV;IADC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;sCAClB,cAAM;uCAAA;AAGd;IADC,IAAA,gBAAM,GAAE;;yCACO;AAKhB;IAHC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;;0CACe;AAGjB;IADC,IAAA,gBAAM,GAAE;;4CACU;AAKnB;IAHC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;;uCACY;AAGd;IADC,IAAA,gBAAM,GAAE;;qCACG;AAKZ;IAHC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;;2CACgB;AAKlB;IAHC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;;4CACiB;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACzB,OAAO;iDAAA;AAKzB;IAHC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;;6CACkB;AAKpB;IAHC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;sCACS,IAAI;0CAAA;AAKf;IAHC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;;0CACe;AAKjB;IAHC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;;4CACiB;AAKnB;IAHC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;;4CACiB;AAGnB;IADC,IAAA,0BAAgB,GAAE;sCACR,IAAI;0CAAA;AAGf;IADC,IAAA,0BAAgB,GAAE;sCACR,IAAI;0CAAA;AAKf;IAHC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;sCACO,gBAAI;wCAAA;AAKb;IAHC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;sCACO,gBAAI;wCAAA;AA9EF,OAAO;IAFnB,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,EAAC,cAAc,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;GACjF,OAAO,CA+EnB;AA/EY,0BAAO","sourcesContent":["import { User } from '@things-factory/auth-base'\nimport { Domain } from '@things-factory/shell'\nimport { Column, CreateDateColumn, Entity, Index, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'\n\n@Entity()\n@Index('ix_account_0', (account: Account) => [account.domain, account.name], { unique: true })\nexport class Account {\n @PrimaryGeneratedColumn('uuid')\n id: string\n\n @ManyToOne(type => Domain)\n domain: Domain\n\n @Column()\n platform: string\n\n @Column({\n nullable: true\n })\n accountId: string\n\n @Column()\n countryCode: string\n\n @Column({\n nullable: true\n })\n status: string\n\n @Column()\n name: string\n\n @Column({\n nullable: true\n })\n accessInfo: string\n\n @Column({\n nullable: true\n })\n accessToken: string\n\n @Column({ default: false, nullable: true })\n trackedInventory: Boolean\n\n @Column({\n nullable: true\n })\n refreshToken: string\n\n @Column({\n nullable: true\n })\n expiresIn: Date\n\n @Column({\n nullable: true\n })\n tokenType: string\n\n @Column({\n nullable: true\n })\n accountInfo: string\n\n @Column({\n nullable: true\n })\n description: string\n\n @CreateDateColumn()\n createdAt: Date\n\n @UpdateDateColumn()\n updatedAt: Date\n\n @ManyToOne(type => User, {\n nullable: true\n })\n creator: User\n\n @ManyToOne(type => User, {\n nullable: true\n })\n updater: User\n}\n"]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.accountResolver = void 0;
|
|
4
|
-
const
|
|
4
|
+
const shell_1 = require("@things-factory/shell");
|
|
5
5
|
const entities_1 = require("../../../entities");
|
|
6
6
|
exports.accountResolver = {
|
|
7
7
|
async account(_, { id }, context) {
|
|
8
|
-
const repository = (0,
|
|
9
|
-
return await (0,
|
|
10
|
-
where: { domain: context.state.domain, id },
|
|
8
|
+
const repository = (0, shell_1.getRepository)(entities_1.Account);
|
|
9
|
+
return await (0, shell_1.getRepository)(entities_1.Account).findOne({
|
|
10
|
+
where: { domain: { id: context.state.domain.id }, id },
|
|
11
11
|
relations: ['domain', 'creator', 'updater']
|
|
12
12
|
});
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/account.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/account.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;AAErD,gDAA2C;AAE9B,QAAA,eAAe,GAAG;IAC7B,KAAK,CAAC,OAAO,CAAC,CAAM,EAAE,EAAE,EAAE,EAAE,EAAE,OAAwB;QACpD,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,kBAAO,CAAC,CAAA;QAEzC,OAAO,MAAM,IAAA,qBAAa,EAAC,kBAAO,CAAC,CAAC,OAAO,CAAC;YAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;YACtD,SAAS,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;SAC5C,CAAC,CAAA;IACJ,CAAC;CACF,CAAA","sourcesContent":["import { getRepository } from '@things-factory/shell'\n\nimport { Account } from '../../../entities'\n\nexport const accountResolver = {\n async account(_: any, { id }, context: ResolverContext) {\n const repository = getRepository(Account)\n\n return await getRepository(Account).findOne({\n where: { domain: { id: context.state.domain.id }, id },\n relations: ['domain', 'creator', 'updater']\n })\n }\n}\n"]}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.accountsResolver = void 0;
|
|
4
|
-
const typeorm_1 = require("typeorm");
|
|
5
4
|
const shell_1 = require("@things-factory/shell");
|
|
6
5
|
const entities_1 = require("../../../entities");
|
|
7
6
|
exports.accountsResolver = {
|
|
8
7
|
async accounts(_, params, context) {
|
|
9
8
|
const { domain } = context.state;
|
|
10
9
|
const convertedParams = (0, shell_1.convertListParams)(params, { domain });
|
|
11
|
-
const [items, total] = await (0,
|
|
10
|
+
const [items, total] = await (0, shell_1.getRepository)(entities_1.Account).findAndCount(Object.assign(Object.assign({}, convertedParams), { relations: ['domain', 'creator', 'updater'] }));
|
|
12
11
|
return { items, total };
|
|
13
12
|
}
|
|
14
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/accounts.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/accounts.ts"],"names":[],"mappings":";;;AAAA,iDAAmF;AAEnF,gDAA2C;AAE9B,QAAA,gBAAgB,GAAG;IAC9B,KAAK,CAAC,QAAQ,CAAC,CAAM,EAAE,MAAiB,EAAE,OAAwB;QAChE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAChC,MAAM,eAAe,GAAG,IAAA,yBAAiB,EAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QAC7D,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,IAAA,qBAAa,EAAC,kBAAO,CAAC,CAAC,YAAY,iCAC3D,eAAe,KAClB,SAAS,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,IAC3C,CAAA;QACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IACzB,CAAC;CACF,CAAA","sourcesContent":["import { convertListParams, getRepository, ListParam } from '@things-factory/shell'\n\nimport { Account } from '../../../entities'\n\nexport const accountsResolver = {\n async accounts(_: any, params: ListParam, context: ResolverContext) {\n const { domain } = context.state\n const convertedParams = convertListParams(params, { domain })\n const [items, total] = await getRepository(Account).findAndCount({\n ...convertedParams,\n relations: ['domain', 'creator', 'updater']\n })\n return { items, total }\n }\n}\n"]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createAccount = void 0;
|
|
4
|
-
const
|
|
5
|
-
const entities_1 = require("../../../entities");
|
|
4
|
+
const shell_1 = require("@things-factory/shell");
|
|
6
5
|
const controllers_1 = require("../../../controllers");
|
|
6
|
+
const entities_1 = require("../../../entities");
|
|
7
7
|
exports.createAccount = {
|
|
8
8
|
async createAccount(_, { account }, context) {
|
|
9
|
-
|
|
9
|
+
const { domain, user } = context.state;
|
|
10
|
+
return await (0, shell_1.getRepository)(entities_1.Account).save(Object.assign(Object.assign({ status: controllers_1.ACCOUNTING_STATUS.INACTIVE }, account), { domain, creator: user, updater: user }));
|
|
10
11
|
}
|
|
11
12
|
};
|
|
12
13
|
//# sourceMappingURL=create-account.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-account.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/create-account.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"create-account.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/create-account.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;AAErD,sDAAwD;AACxD,gDAA2C;AAE9B,QAAA,aAAa,GAAG;IAC3B,KAAK,CAAC,aAAa,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,EAAE,OAAwB;QAC/D,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEtC,OAAO,MAAM,IAAA,qBAAa,EAAC,kBAAO,CAAC,CAAC,IAAI,+BACtC,MAAM,EAAE,+BAAiB,CAAC,QAAQ,IAC/B,OAAO,KACV,MAAM,EACN,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,IAAI,IACb,CAAA;IACJ,CAAC;CACF,CAAA","sourcesContent":["import { getRepository } from '@things-factory/shell'\n\nimport { ACCOUNTING_STATUS } from '../../../controllers'\nimport { Account } from '../../../entities'\n\nexport const createAccount = {\n async createAccount(_: any, { account }, context: ResolverContext) {\n const { domain, user } = context.state\n\n return await getRepository(Account).save({\n status: ACCOUNTING_STATUS.INACTIVE,\n ...account,\n domain,\n creator: user,\n updater: user\n })\n }\n}\n"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.deleteAccount = void 0;
|
|
4
|
-
const
|
|
5
|
-
const entities_1 = require("../../../entities");
|
|
4
|
+
const shell_1 = require("@things-factory/shell");
|
|
6
5
|
const controllers_1 = require("../../../controllers");
|
|
6
|
+
const entities_1 = require("../../../entities");
|
|
7
7
|
exports.deleteAccount = {
|
|
8
8
|
async deleteAccount(_, { id }, context) {
|
|
9
|
-
const foundAccount = await (0,
|
|
10
|
-
where: { domain: context.state.domain, id }
|
|
9
|
+
const foundAccount = await (0, shell_1.getRepository)(entities_1.Account).findOne({
|
|
10
|
+
where: { domain: { id: context.state.domain.id }, id }
|
|
11
11
|
});
|
|
12
|
-
await (0,
|
|
12
|
+
await (0, shell_1.getRepository)(entities_1.Account).save(Object.assign(Object.assign({}, foundAccount), { status: controllers_1.ACCOUNTING_STATUS.TERMINATED, updater: context.state.user }));
|
|
13
13
|
return true;
|
|
14
14
|
}
|
|
15
15
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-account.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/delete-account.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"delete-account.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/delete-account.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;AAErD,sDAAwD;AACxD,gDAA2C;AAE9B,QAAA,aAAa,GAAG;IAC3B,KAAK,CAAC,aAAa,CAAC,CAAM,EAAE,EAAE,EAAE,EAAE,EAAE,OAAwB;QAC1D,MAAM,YAAY,GAAY,MAAM,IAAA,qBAAa,EAAC,kBAAO,CAAC,CAAC,OAAO,CAAC;YACjE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;SACvD,CAAC,CAAA;QAEF,MAAM,IAAA,qBAAa,EAAC,kBAAO,CAAC,CAAC,IAAI,iCAC5B,YAAY,KACf,MAAM,EAAE,+BAAiB,CAAC,UAAU,EACpC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAC3B,CAAA;QAEF,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA","sourcesContent":["import { getRepository } from '@things-factory/shell'\n\nimport { ACCOUNTING_STATUS } from '../../../controllers'\nimport { Account } from '../../../entities'\n\nexport const deleteAccount = {\n async deleteAccount(_: any, { id }, context: ResolverContext) {\n const foundAccount: Account = await getRepository(Account).findOne({\n where: { domain: { id: context.state.domain.id }, id }\n })\n\n await getRepository(Account).save({\n ...foundAccount,\n status: ACCOUNTING_STATUS.TERMINATED,\n updater: context.state.user\n })\n\n return true\n }\n}\n"]}
|
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.deleteAccounts = void 0;
|
|
4
4
|
const typeorm_1 = require("typeorm");
|
|
5
|
-
const
|
|
5
|
+
const shell_1 = require("@things-factory/shell");
|
|
6
6
|
const controllers_1 = require("../../../controllers");
|
|
7
|
+
const entities_1 = require("../../../entities");
|
|
7
8
|
exports.deleteAccounts = {
|
|
8
9
|
async deleteAccounts(_, { ids }, context) {
|
|
9
|
-
let foundAccounts = await (0,
|
|
10
|
-
where: { domain: context.state.domain, id: (0, typeorm_1.In)(ids) }
|
|
10
|
+
let foundAccounts = await (0, shell_1.getRepository)(entities_1.Account).find({
|
|
11
|
+
where: { domain: { id: context.state.domain.id }, id: (0, typeorm_1.In)(ids) }
|
|
11
12
|
});
|
|
12
13
|
const updatedAccount = foundAccounts.map((account) => {
|
|
13
14
|
return Object.assign(Object.assign({}, account), { status: controllers_1.ACCOUNTING_STATUS.TERMINATED, updater: context.state.user });
|
|
14
15
|
});
|
|
15
|
-
await (0,
|
|
16
|
+
await (0, shell_1.getRepository)(entities_1.Account).save(updatedAccount);
|
|
16
17
|
return true;
|
|
17
18
|
}
|
|
18
19
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-accounts.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/delete-accounts.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"delete-accounts.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/delete-accounts.ts"],"names":[],"mappings":";;;AAAA,qCAA4B;AAE5B,iDAAqD;AAErD,sDAAwD;AACxD,gDAA2C;AAE9B,QAAA,cAAc,GAAG;IAC5B,KAAK,CAAC,cAAc,CAAC,CAAM,EAAE,EAAE,GAAG,EAAE,EAAE,OAAwB;QAC5D,IAAI,aAAa,GAAc,MAAM,IAAA,qBAAa,EAAC,kBAAO,CAAC,CAAC,IAAI,CAAC;YAC/D,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,GAAG,CAAC,EAAE;SAChE,CAAC,CAAA;QAEF,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,OAAgB,EAAE,EAAE;YAC5D,uCACK,OAAO,KACV,MAAM,EAAE,+BAAiB,CAAC,UAAU,EACpC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAC5B;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,IAAA,qBAAa,EAAC,kBAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACjD,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA","sourcesContent":["import { In } from 'typeorm'\n\nimport { getRepository } from '@things-factory/shell'\n\nimport { ACCOUNTING_STATUS } from '../../../controllers'\nimport { Account } from '../../../entities'\n\nexport const deleteAccounts = {\n async deleteAccounts(_: any, { ids }, context: ResolverContext) {\n let foundAccounts: Account[] = await getRepository(Account).find({\n where: { domain: { id: context.state.domain.id }, id: In(ids) }\n })\n\n const updatedAccount = foundAccounts.map((account: Account) => {\n return {\n ...account,\n status: ACCOUNTING_STATUS.TERMINATED,\n updater: context.state.user\n }\n })\n\n await getRepository(Account).save(updatedAccount)\n return true\n }\n}\n"]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.updateAccount = void 0;
|
|
4
|
-
const
|
|
4
|
+
const shell_1 = require("@things-factory/shell");
|
|
5
5
|
const entities_1 = require("../../../entities");
|
|
6
6
|
exports.updateAccount = {
|
|
7
7
|
async updateAccount(_, { name, patch }, context) {
|
|
8
|
-
const repository = (0,
|
|
8
|
+
const repository = (0, shell_1.getRepository)(entities_1.Account);
|
|
9
9
|
const account = await repository.findOne({
|
|
10
|
-
where: { domain: context.state.domain, name }
|
|
10
|
+
where: { domain: { id: context.state.domain.id }, name }
|
|
11
11
|
});
|
|
12
12
|
return await repository.save(Object.assign(Object.assign(Object.assign({}, account), patch), { updater: context.state.user }));
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-account.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/update-account.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"update-account.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/update-account.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;AAErD,gDAA2C;AAE9B,QAAA,aAAa,GAAG;IAC3B,KAAK,CAAC,aAAa,CAAC,CAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,OAAwB;QACnE,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,kBAAO,CAAC,CAAA;QACzC,MAAM,OAAO,GAAQ,MAAM,UAAU,CAAC,OAAO,CAAC;YAC5C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE;SACzD,CAAC,CAAA;QAEF,OAAO,MAAM,UAAU,CAAC,IAAI,+CACvB,OAAO,GACP,KAAK,KACR,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAC3B,CAAA;IACJ,CAAC;CACF,CAAA","sourcesContent":["import { getRepository } from '@things-factory/shell'\n\nimport { Account } from '../../../entities'\n\nexport const updateAccount = {\n async updateAccount(_: any, { name, patch }, context: ResolverContext) {\n const repository = getRepository(Account)\n const account: any = await repository.findOne({\n where: { domain: { id: context.state.domain.id }, name }\n })\n\n return await repository.save({\n ...account,\n ...patch,\n updater: context.state.user\n })\n }\n}\n"]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.updateMultipleAccount = void 0;
|
|
4
|
-
const
|
|
4
|
+
const shell_1 = require("@things-factory/shell");
|
|
5
5
|
const entities_1 = require("../../../entities");
|
|
6
6
|
exports.updateMultipleAccount = {
|
|
7
7
|
async updateMultipleAccount(_, { patches }, context) {
|
|
8
8
|
let results = [];
|
|
9
9
|
const _createRecords = patches.filter((patch) => patch.cuFlag.toUpperCase() === '+');
|
|
10
10
|
const _updateRecords = patches.filter((patch) => patch.cuFlag.toUpperCase() === 'M');
|
|
11
|
-
const accountRepo = (0,
|
|
11
|
+
const accountRepo = (0, shell_1.getRepository)(entities_1.Account);
|
|
12
12
|
if (_createRecords.length > 0) {
|
|
13
13
|
for (let i = 0; i < _createRecords.length; i++) {
|
|
14
14
|
const newRecord = _createRecords[i];
|
|
@@ -19,7 +19,7 @@ exports.updateMultipleAccount = {
|
|
|
19
19
|
if (_updateRecords.length > 0) {
|
|
20
20
|
for (let i = 0; i < _updateRecords.length; i++) {
|
|
21
21
|
const newRecord = _updateRecords[i];
|
|
22
|
-
const account = await accountRepo.
|
|
22
|
+
const account = await accountRepo.findOneBy({ id: newRecord.id });
|
|
23
23
|
const result = await accountRepo.save(Object.assign(Object.assign(Object.assign({}, account), newRecord), { updater: context.state.user }));
|
|
24
24
|
results.push(Object.assign(Object.assign({}, result), { cuFlag: 'M' }));
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-multiple-accounts.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/update-multiple-accounts.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"update-multiple-accounts.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/update-multiple-accounts.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;AAErD,gDAA2C;AAE9B,QAAA,qBAAqB,GAAG;IACnC,KAAK,CAAC,qBAAqB,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,EAAE,OAAwB;QACvE,IAAI,OAAO,GAAG,EAAE,CAAA;QAChB,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAA;QACzF,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAA;QACzF,MAAM,WAAW,GAAG,IAAA,qBAAa,EAAC,kBAAO,CAAC,CAAA;QAE1C,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC9C,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;gBAEnC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,iCAChC,SAAS,KACZ,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAC5B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAC3B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAC3B,CAAA;gBAEF,OAAO,CAAC,IAAI,iCAAM,MAAM,KAAE,MAAM,EAAE,GAAG,IAAG,CAAA;aACzC;SACF;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC9C,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,OAAO,GAAY,MAAM,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAA;gBAE1E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,+CAChC,OAAO,GACP,SAAS,KACZ,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAC3B,CAAA;gBAEF,OAAO,CAAC,IAAI,iCAAM,MAAM,KAAE,MAAM,EAAE,GAAG,IAAG,CAAA;aACzC;SACF;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;CACF,CAAA","sourcesContent":["import { getRepository } from '@things-factory/shell'\n\nimport { Account } from '../../../entities'\n\nexport const updateMultipleAccount = {\n async updateMultipleAccount(_: any, { patches }, context: ResolverContext) {\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const accountRepo = getRepository(Account)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n const result = await accountRepo.save({\n ...newRecord,\n domain: context.state.domain,\n creator: context.state.user,\n updater: context.state.user\n })\n\n results.push({ ...result, cuFlag: '+' })\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const newRecord = _updateRecords[i]\n const account: Account = await accountRepo.findOneBy({ id: newRecord.id })\n\n const result = await accountRepo.save({\n ...account,\n ...newRecord,\n updater: context.state.user\n })\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n}\n"]}
|
|
@@ -3,15 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.deactivateXeroAccount = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
|
|
6
|
-
const
|
|
7
|
-
const entities_1 = require("../../../../entities");
|
|
6
|
+
const shell_1 = require("@things-factory/shell");
|
|
8
7
|
const controllers_1 = require("../../../../controllers");
|
|
8
|
+
const entities_1 = require("../../../../entities");
|
|
9
9
|
const debug = require('debug')('things-factory:integration-accounting:deactivate-xero-account');
|
|
10
10
|
exports.deactivateXeroAccount = {
|
|
11
11
|
async deactivateXeroAccount(_, { id }, context) {
|
|
12
|
-
const repository = (0,
|
|
12
|
+
const repository = (0, shell_1.getRepository)(entities_1.Account);
|
|
13
13
|
const account = await repository.findOne({
|
|
14
|
-
where: { domain: context.state.domain, id }
|
|
14
|
+
where: { domain: { id: context.state.domain.id }, id }
|
|
15
15
|
});
|
|
16
16
|
try {
|
|
17
17
|
const connection = JSON.parse(account.accountInfo);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deactivate-xero-account.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/accounting/xero/deactivate-xero-account.ts"],"names":[],"mappings":";;;;AAAA,oEAA8B;
|
|
1
|
+
{"version":3,"file":"deactivate-xero-account.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/accounting/xero/deactivate-xero-account.ts"],"names":[],"mappings":";;;;AAAA,oEAA8B;AAE9B,iDAAqD;AAErD,yDAA2D;AAC3D,mDAA8C;AAE9C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,+DAA+D,CAAC,CAAA;AAElF,QAAA,qBAAqB,GAAG;IACnC,KAAK,CAAC,qBAAqB,CAAC,CAAM,EAAE,EAAE,EAAE,EAAE,EAAE,OAAwB;QAClE,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,kBAAO,CAAC,CAAA;QACzC,MAAM,OAAO,GAAQ,MAAM,UAAU,CAAC,OAAO,CAAC;YAC5C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;SACvD,CAAC,CAAA;QAEF,IAAI;YACF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YAElD,IAAI,UAAU,EAAE;gBACd,uCAAuC;gBACvC,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,oCAAoC,UAAU,CAAC,EAAE,EAAE,EAAE;oBAChF,MAAM,EAAE,QAAQ;oBAChB,OAAO,EAAE;wBACP,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE;qBAC/C;iBACF,CAAC,CAAA;gBAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAChB,KAAK,CAAC,0BAA0B,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;iBAC1E;aACF;iBAAM;gBACL,KAAK,CAAC,2CAA2C,CAAC,CAAA;aACnD;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,KAAK,CAAC,6CAA6C,CAAC,CAAA;SACrD;QAED,IAAI,KAAK,GAAG;YACV,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,EAAE;YACf,WAAW,EAAE,EAAE;YACf,MAAM,EAAE,+BAAiB,CAAC,QAAQ;SACnC,CAAA;QAED,OAAO,MAAM,UAAU,CAAC,IAAI,+CACvB,OAAO,GACP,KAAK,KACR,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAC3B,CAAA;IACJ,CAAC;CACF,CAAA","sourcesContent":["import fetch from 'node-fetch'\n\nimport { getRepository } from '@things-factory/shell'\n\nimport { ACCOUNTING_STATUS } from '../../../../controllers'\nimport { Account } from '../../../../entities'\n\nconst debug = require('debug')('things-factory:integration-accounting:deactivate-xero-account')\n\nexport const deactivateXeroAccount = {\n async deactivateXeroAccount(_: any, { id }, context: ResolverContext) {\n const repository = getRepository(Account)\n const account: any = await repository.findOne({\n where: { domain: { id: context.state.domain.id }, id }\n })\n\n try {\n const connection = JSON.parse(account.accountInfo)\n\n if (connection) {\n /* delete connection request to xero */\n const response = await fetch(`https://api.xero.com/connections/${connection.id}`, {\n method: 'delete',\n headers: {\n Authorization: `Bearer ${account.accessToken}`\n }\n })\n\n if (!response.ok) {\n debug('delete connection failed', response.status, await response.text())\n }\n } else {\n debug(`connection info from accountInfo is empty`)\n }\n } catch (err) {\n debug(`get connection info failed from accountInfo`)\n }\n\n var patch = {\n accountId: '',\n accessToken: '',\n refreshToken: '',\n accessInfo: '',\n expiresIn: null,\n tokenType: '',\n accountInfo: '',\n countryCode: '',\n status: ACCOUNTING_STATUS.INACTIVE\n }\n\n return await repository.save({\n ...account,\n ...patch,\n updater: context.state.user\n })\n }\n}\n"]}
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getXeroAuthURL = exports.makeVerificationTokenForNonce = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const
|
|
6
|
-
const env_1 = require("@things-factory/env");
|
|
5
|
+
const crypto_1 = tslib_1.__importDefault(require("crypto"));
|
|
7
6
|
const auth_base_1 = require("@things-factory/auth-base");
|
|
7
|
+
const env_1 = require("@things-factory/env");
|
|
8
|
+
const shell_1 = require("@things-factory/shell");
|
|
8
9
|
const xero_1 = require("../../../../controllers/xero");
|
|
9
10
|
const xeroConfig = env_1.config.get('accountingIntegrationXero', {});
|
|
10
11
|
const { apiKey, apiSecret, callback } = xeroConfig;
|
|
11
|
-
const crypto_1 = tslib_1.__importDefault(require("crypto"));
|
|
12
12
|
function makeVerificationTokenForNonce() {
|
|
13
13
|
return crypto_1.default.randomBytes(16).toString('hex');
|
|
14
14
|
}
|
|
@@ -19,7 +19,7 @@ exports.getXeroAuthURL = {
|
|
|
19
19
|
const xero = new xero_1.Xero({ apiKey, apiSecret, callback });
|
|
20
20
|
/* generate verification-token as a nonce */
|
|
21
21
|
const nonce = makeVerificationTokenForNonce();
|
|
22
|
-
await (0,
|
|
22
|
+
await (0, shell_1.getRepository)(auth_base_1.VerificationToken).save({
|
|
23
23
|
userId: user.id,
|
|
24
24
|
token: nonce,
|
|
25
25
|
type: auth_base_1.VerificationTokenType.REQUEST_ACCESS_TOKEN,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-xero-auth-url.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/accounting/xero/get-xero-auth-url.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"get-xero-auth-url.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/accounting/xero/get-xero-auth-url.ts"],"names":[],"mappings":";;;;AAAA,4DAA2B;AAE3B,yDAAoF;AACpF,6CAA4C;AAC5C,iDAAqD;AAErD,uDAAmD;AAEnD,MAAM,UAAU,GAAG,YAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAA;AAC9D,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;AAElD,SAAgB,6BAA6B;IAC3C,OAAO,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC/C,CAAC;AAFD,sEAEC;AAEY,QAAA,cAAc,GAAG;IAC5B,KAAK,CAAC,cAAc,CAAC,CAAM,EAAE,EAAE,UAAU,EAAE,EAAE,OAAwB;QACnE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC9B,MAAM,IAAI,GAAG,IAAI,WAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAA;QAEtD,4CAA4C;QAC5C,MAAM,KAAK,GAAG,6BAA6B,EAAE,CAAA;QAC7C,MAAM,IAAA,qBAAa,EAAC,6BAAiB,CAAC,CAAC,IAAI,CAAC;YAC1C,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,iCAAqB,CAAC,oBAAoB;YAChD,UAAU,EAAE,UAAU;SACvB,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;CACF,CAAA","sourcesContent":["import crypto from 'crypto'\n\nimport { VerificationToken, VerificationTokenType } from '@things-factory/auth-base'\nimport { config } from '@things-factory/env'\nimport { getRepository } from '@things-factory/shell'\n\nimport { Xero } from '../../../../controllers/xero'\n\nconst xeroConfig = config.get('accountingIntegrationXero', {})\nconst { apiKey, apiSecret, callback } = xeroConfig\n\nexport function makeVerificationTokenForNonce() {\n return crypto.randomBytes(16).toString('hex')\n}\n\nexport const getXeroAuthURL = {\n async getXeroAuthURL(_: any, { accounting }, context: ResolverContext) {\n const { user } = context.state\n const xero = new Xero({ apiKey, apiSecret, callback })\n\n /* generate verification-token as a nonce */\n const nonce = makeVerificationTokenForNonce()\n await getRepository(VerificationToken).save({\n userId: user.id,\n token: nonce,\n type: VerificationTokenType.REQUEST_ACCESS_TOKEN,\n suppliment: accounting\n })\n\n return xero.buildAuthURL(nonce)\n }\n}\n"]}
|
|
@@ -3,18 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.refreshXeroAccessToken = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
|
|
6
|
-
const typeorm_1 = require("typeorm");
|
|
7
|
-
const entities_1 = require("../../../../entities");
|
|
8
|
-
const utils_1 = require("@things-factory/utils");
|
|
9
6
|
const env_1 = require("@things-factory/env");
|
|
7
|
+
const shell_1 = require("@things-factory/shell");
|
|
8
|
+
const utils_1 = require("@things-factory/utils");
|
|
9
|
+
const entities_1 = require("../../../../entities");
|
|
10
10
|
const xeroConfig = env_1.config.get('accountingIntegrationXero', {});
|
|
11
11
|
const { apiKey, apiSecret } = xeroConfig;
|
|
12
12
|
const debug = require('debug')('things-factory:integration-accounting:refresh-xero-access-token');
|
|
13
13
|
exports.refreshXeroAccessToken = {
|
|
14
14
|
async refreshXeroAccessToken(_, { id }, context) {
|
|
15
|
-
const repository = (0,
|
|
15
|
+
const repository = (0, shell_1.getRepository)(entities_1.Account);
|
|
16
16
|
const account = await repository.findOne({
|
|
17
|
-
where: { domain: context.state.domain, id }
|
|
17
|
+
where: { domain: { id: context.state.domain.id }, id }
|
|
18
18
|
});
|
|
19
19
|
const refreshRequestData = {
|
|
20
20
|
grant_type: 'refresh_token',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refresh-xero-access-token.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/accounting/xero/refresh-xero-access-token.ts"],"names":[],"mappings":";;;;AAAA,oEAA8B;
|
|
1
|
+
{"version":3,"file":"refresh-xero-access-token.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/accounting/xero/refresh-xero-access-token.ts"],"names":[],"mappings":";;;;AAAA,oEAA8B;AAE9B,6CAA4C;AAC5C,iDAAqD;AACrD,iDAAgD;AAEhD,mDAA8C;AAE9C,MAAM,UAAU,GAAG,YAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAA;AAC9D,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAAA;AAExC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,iEAAiE,CAAC,CAAA;AAEpF,QAAA,sBAAsB,GAAG;IACpC,KAAK,CAAC,sBAAsB,CAAC,CAAM,EAAE,EAAE,EAAE,EAAE,EAAE,OAAwB;QACnE,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,kBAAO,CAAC,CAAA;QACzC,MAAM,OAAO,GAAQ,MAAM,UAAU,CAAC,OAAO,CAAC;YAC5C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;SACvD,CAAC,CAAA;QAEF,MAAM,kBAAkB,GAAG;YACzB,UAAU,EAAE,eAAe;YAC3B,aAAa,EAAE,OAAO,CAAC,YAAY;SACpC,CAAA;QAED,MAAM,eAAe,GAAG,MAAM,IAAA,oBAAK,EAAC,yCAAyC,EAAE;YAC7E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAClF,cAAc,EAAE,mCAAmC;aACpD;YACD,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;iBACrC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;iBAChF,IAAI,CAAC,GAAG,CAAC;SACb,CAAC,CAAA;QAEF,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;SACnF;QAED,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,CAAA;QACzC,MAAM,EACJ,YAAY,CAAC,gCAAgC,EAC7C,QAAQ,CAAC,mGAAmG,EAC5G,UAAU,CAAC,sDAAsD,EACjE,UAAU,EAAE,SAAS,CAAC,oBAAoB,EAC1C,aAAa;QACb;WACG;UACJ,GAAG,IAAI,CAAA;QAER,MAAM,EAAE,GAAG,EAAE,GAAG,IAAA,gBAAQ,EAAC,YAAY,CAAC,CAAA;QAEtC,IAAI,KAAK,GAAG;YACV,WAAW,EAAE,YAAY;YACzB,YAAY,EAAE,aAAa;YAC3B,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;SAChC,CAAA;QAED,OAAO,MAAM,UAAU,CAAC,IAAI,+CACvB,OAAO,GACP,KAAK,KACR,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAC3B,CAAA;IACJ,CAAC;CACF,CAAA","sourcesContent":["import fetch from 'node-fetch'\n\nimport { config } from '@things-factory/env'\nimport { getRepository } from '@things-factory/shell'\nimport { parseJwt } from '@things-factory/utils'\n\nimport { Account } from '../../../../entities'\n\nconst xeroConfig = config.get('accountingIntegrationXero', {})\nconst { apiKey, apiSecret } = xeroConfig\n\nconst debug = require('debug')('things-factory:integration-accounting:refresh-xero-access-token')\n\nexport const refreshXeroAccessToken = {\n async refreshXeroAccessToken(_: any, { id }, context: ResolverContext) {\n const repository = getRepository(Account)\n const account: any = await repository.findOne({\n where: { domain: { id: context.state.domain.id }, id }\n })\n\n const refreshRequestData = {\n grant_type: 'refresh_token',\n refresh_token: account.refreshToken\n }\n\n const refreshResponse = await fetch(`https://identity.xero.com/connect/token`, {\n method: 'post',\n headers: {\n Authorization: `Basic ${Buffer.from(apiKey + ':' + apiSecret).toString('base64')}`,\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: Object.entries(refreshRequestData)\n .map(([key, value]) => encodeURIComponent(key) + '=' + encodeURIComponent(value))\n .join('&')\n })\n\n if (!refreshResponse.ok) {\n throw new Error(`get account information failed: ${await refreshResponse.text()}`)\n }\n\n const body = await refreshResponse.json()\n const {\n access_token /* token used to call the API */,\n id_token /* token containing user identity details (only returned if OpenID Connect scopes are requested) */,\n expires_in /* amount of seconds until the access token expires */,\n token_type: tokenType /* must be Bearer */,\n refresh_token\n /* token used to refresh the access token once it has expired (only returned if the offline_access scope is requested).\n */\n } = body\n\n const { exp } = parseJwt(access_token)\n\n var patch = {\n accessToken: access_token,\n refreshToken: refresh_token,\n tokenType,\n expiresIn: new Date(exp * 1000)\n }\n\n return await repository.save({\n ...account,\n ...patch,\n updater: context.state.user\n })\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounting-invoice.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting-api/accounting-invoice.ts"],"names":[],"mappings":";;;AAAA,wEAAmE;AAEtD,QAAA,sBAAsB,GAAG;IACpC,KAAK,CAAC,qBAAqB,CAAC,CAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"accounting-invoice.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting-api/accounting-invoice.ts"],"names":[],"mappings":";;;AAAA,wEAAmE;AAEtD,QAAA,sBAAsB,GAAG;IACpC,KAAK,CAAC,qBAAqB,CAAC,CAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,OAAwB;QAC/F,IAAI,UAAU,GAAG,MAAM,8BAAa,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QAEhE,OAAO,MAAM,8BAAa,CAAC,WAAW,CAAC,UAAU,EAAE;YACjD,UAAU,EAAE;gBACV,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,GAAG;aACX;SACF,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,CAAM,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,OAAwB;QACtF,IAAI,UAAU,GAAG,MAAM,8BAAa,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QAEhE,OAAO,MAAM,8BAAa,CAAC,UAAU,CAAC,UAAU,EAAE;YAChD,SAAS;SACV,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AAEY,QAAA,uBAAuB,GAAG;IACrC,KAAK,CAAC,uBAAuB,CAAC,CAAM,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,OAAwB;QAC1F,IAAI,UAAU,GAAG,MAAM,8BAAa,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QAEhE,OAAO,MAAM,8BAAa,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;IAClE,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,CAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,OAAwB;QACrF,IAAI,UAAU,GAAG,MAAM,8BAAa,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QAEhE,OAAO,MAAM,8BAAa,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAC7D,CAAC;CACF,CAAA","sourcesContent":["import { AccountingAPI } from '../../../controllers/accounting-api'\n\nexport const queryAccountingInvoice = {\n async getAccountingInvoices(_: any, { accountingId, params: ListParam }, context: ResolverContext) {\n var accounting = await AccountingAPI.getAccounting(accountingId)\n\n return await AccountingAPI.getInvoices(accounting, {\n pagination: {\n page: 0,\n limit: 100\n }\n })\n },\n\n async getAccountingInvoice(_: any, { accountingId, invoiceNo }, context: ResolverContext) {\n var accounting = await AccountingAPI.getAccounting(accountingId)\n\n return await AccountingAPI.getInvoice(accounting, {\n invoiceNo\n })\n }\n}\n\nexport const mutateAccountingInvoice = {\n async createAccountingInvoice(_: any, { accountingId, newInvoice }, context: ResolverContext) {\n var accounting = await AccountingAPI.getAccounting(accountingId)\n\n return await AccountingAPI.createInvoice(accounting, newInvoice)\n },\n\n async updateAccountingInvoice(_: any, { accountingId, patch }, context: ResolverContext) {\n var accounting = await AccountingAPI.getAccounting(accountingId)\n\n return await AccountingAPI.updateInvoice(accounting, patch)\n }\n}\n"]}
|