@things-factory/integration-accounting 9.0.0-beta.79 → 9.0.0-beta.80
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 +1 -1
- package/dist-server/controllers/accounting-api/index.js.map +1 -1
- package/dist-server/controllers/xero/apis/contact/get-contacts.js +3 -1
- package/dist-server/controllers/xero/apis/contact/get-contacts.js.map +1 -1
- package/dist-server/controllers/xero/apis/invoice/get-invoices.js +3 -1
- package/dist-server/controllers/xero/apis/invoice/get-invoices.js.map +1 -1
- package/dist-server/controllers/xero/apis/item/delete-item.js +3 -1
- package/dist-server/controllers/xero/apis/item/delete-item.js.map +1 -1
- package/dist-server/controllers/xero/apis/item/get-items.js +3 -1
- package/dist-server/controllers/xero/apis/item/get-items.js.map +1 -1
- package/dist-server/controllers/xero/apis/purchase-order/get-purchase-orders.js +8 -3
- package/dist-server/controllers/xero/apis/purchase-order/get-purchase-orders.js.map +1 -1
- package/dist-server/controllers/xero/xero.js +7 -2
- package/dist-server/controllers/xero/xero.js.map +1 -1
- package/dist-server/engine/connector/accounting-connector.js +1 -1
- package/dist-server/engine/connector/accounting-connector.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/accounts.js +4 -1
- package/dist-server/graphql/resolvers/accounting/accounts.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/create-account.js +7 -1
- package/dist-server/graphql/resolvers/accounting/create-account.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/delete-account.js +5 -1
- package/dist-server/graphql/resolvers/accounting/delete-account.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/delete-accounts.js +5 -1
- package/dist-server/graphql/resolvers/accounting/delete-accounts.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/index.js +13 -2
- package/dist-server/graphql/resolvers/accounting/index.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/update-account.js +5 -1
- package/dist-server/graphql/resolvers/accounting/update-account.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/update-multiple-accounts.js +13 -4
- package/dist-server/graphql/resolvers/accounting/update-multiple-accounts.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/xero/deactivate-xero-account.js +5 -1
- package/dist-server/graphql/resolvers/accounting/xero/deactivate-xero-account.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/xero/index.js +7 -2
- package/dist-server/graphql/resolvers/accounting/xero/index.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting/xero/refresh-xero-access-token.js +5 -1
- package/dist-server/graphql/resolvers/accounting/xero/refresh-xero-access-token.js.map +1 -1
- package/dist-server/graphql/resolvers/accounting-api/index.js +9 -2
- package/dist-server/graphql/resolvers/accounting-api/index.js.map +1 -1
- package/dist-server/routers/xero-router.js +13 -3
- package/dist-server/routers/xero-router.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -11,6 +11,7 @@ exports.ACCOUNTING_STATUS = {
|
|
|
11
11
|
TERMINATED: 'terminated'
|
|
12
12
|
};
|
|
13
13
|
class AccountingAPI {
|
|
14
|
+
static { this.platforms = {}; }
|
|
14
15
|
static registerPlatform(name, action, apis) {
|
|
15
16
|
AccountingAPI.platforms[name] = {
|
|
16
17
|
action,
|
|
@@ -42,7 +43,6 @@ class AccountingAPI {
|
|
|
42
43
|
static deleteItem(accounting, req) { }
|
|
43
44
|
}
|
|
44
45
|
exports.AccountingAPI = AccountingAPI;
|
|
45
|
-
AccountingAPI.platforms = {};
|
|
46
46
|
tslib_1.__decorate([
|
|
47
47
|
decorators_1.api,
|
|
48
48
|
tslib_1.__metadata("design:type", Function),
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;aACjB,cAAS,GAAG,EAAE,CAAA;IAErB,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;IAGM,AAAP,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAGnC,AAAP,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAGpC,AAAP,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAGtC,AAAP,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAGtC,AAAP,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAG1C,AAAP,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAGnC,AAAP,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAGpC,AAAP,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAGhC,AAAP,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAGjC,AAAP,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAGnC,AAAP,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAGnC,AAAP,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;IAGpC,AAAP,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,IAAQ,CAAC;;AA3D5C,sCA4DC;AArCQ;IADN,gBAAG;;;;qCACsC;AAGnC;IADN,gBAAG;;;;sCACuC;AAGpC;IADN,gBAAG;;;;wCACyC;AAGtC;IADN,gBAAG;;;;wCACyC;AAGtC;IADN,gBAAG;;;;4CAC6C;AAG1C;IADN,gBAAG;;;;qCACsC;AAGnC;IADN,gBAAG;;;;sCACuC;AAGpC;IADN,gBAAG;;;;kCACmC;AAGhC;IADN,gBAAG;;;;mCACoC;AAGjC;IADN,gBAAG;;;;qCACsC;AAGnC;IADN,gBAAG;;;;qCACsC;AAGnC;IADN,gBAAG;;;;sCACuC;AAGpC;IADN,gBAAG;;;;qCACsC","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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-contacts.js","sourceRoot":"","sources":["../../../../../server/controllers/xero/apis/contact/get-contacts.ts"],"names":[],"mappings":";;AAAA,kCAeC;AAfD,SAAgB,WAAW;IACzB,OAAO;QACL,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,WAAW;QACjB,WAAW,CAAC,GAAG;YACb,OAAO;gBACL,OAAO,
|
|
1
|
+
{"version":3,"file":"get-contacts.js","sourceRoot":"","sources":["../../../../../server/controllers/xero/apis/contact/get-contacts.ts"],"names":[],"mappings":";;AAAA,kCAeC;AAfD,SAAgB,WAAW;IACzB,OAAO;QACL,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,WAAW;QACjB,WAAW,CAAC,GAAG;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,GAAG,GAAG;iBACP;aACF,CAAA;QACH,CAAC;QACD,SAAS,CAAC,GAAG;YACX,OAAO,GAAG,CAAA;QACZ,CAAC;KACF,CAAA;AACH,CAAC","sourcesContent":["export function getContacts() {\n return {\n method: 'get',\n path: '/Contacts',\n denormalize(req) {\n return {\n payload: {\n ...req\n }\n }\n },\n normalize(res) {\n return res\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-invoices.js","sourceRoot":"","sources":["../../../../../server/controllers/xero/apis/invoice/get-invoices.ts"],"names":[],"mappings":";;AAEA,kCAyEC;AA3ED,4DAAuD;AAEvD,SAAgB,WAAW;IACzB,OAAO;QACL,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,WAAW;QACjB,WAAW,CAAC,GAAG;YACb,OAAO;gBACL,OAAO,
|
|
1
|
+
{"version":3,"file":"get-invoices.js","sourceRoot":"","sources":["../../../../../server/controllers/xero/apis/invoice/get-invoices.ts"],"names":[],"mappings":";;AAEA,kCAyEC;AA3ED,4DAAuD;AAEvD,SAAgB,WAAW;IACzB,OAAO;QACL,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,WAAW;QACjB,WAAW,CAAC,GAAG;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,GAAG,GAAG;iBACP;aACF,CAAA;QACH,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE;YACjC,IAAI,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAA;YAEtB,IAAI,OAAO,GAAU,EAAE,CAAA;YAEvB,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CACzB,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,EAAC,OAAO,EAAC,EAAE;gBACxE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;gBAC3B,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,8BAAa,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAA;gBAEvF,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;gBAC7F,IAAI,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBAElD,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;gBAE3B,MAAM,EACJ,gBAAgB,EAChB,WAAW,EACX,KAAK,EACL,gBAAgB,EAChB,cAAc,EACd,IAAI,EACJ,UAAU,EACV,OAAO,EACR,GAAG,MAAM,8BAAa,CAAC,UAAU,CAAC,UAAU,EAAE;oBAC7C,SAAS;iBACV,CAAC,CAAA;gBAEF,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM;oBAC7B,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wBACnB,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;wBAClD,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,CAAA;oBACzC,CAAC,CAAC;oBACJ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;gBAEjB,OAAO;oBACL,KAAK;oBACL,MAAM;oBACN,WAAW;oBACX,IAAI,EAAE,KAAK;oBACX,YAAY,EAAE,KAAK;oBACnB,YAAY,EAAE,IAAI;oBAClB,aAAa,EAAE,KAAK;oBACpB,SAAS,EAAE;wBACT,WAAW;wBACX,gBAAgB;wBAChB,KAAK;wBACL,gBAAgB;wBAChB,IAAI;wBACJ,UAAU;wBACV,OAAO;qBACR;oBACD,MAAM,EAAE;wBACN,cAAc;qBACf;oBACD,gBAAgB,EAAE,QAAQ;iBAC3B,CAAA;YACH,CAAC,CAAC,CACH,CAAA;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAA;AACH,CAAC","sourcesContent":["import { AccountingAPI } from '../../../accounting-api'\n\nexport function getInvoices() {\n return {\n method: 'get',\n path: '/Invoices',\n denormalize(req) {\n return {\n payload: {\n ...req\n }\n }\n },\n async normalize(res, { accounting }) {\n var { Invoices } = res\n\n let results: any[] = []\n\n results = await Promise.all(\n Invoices.filter(invoice => invoice.Type === 'ACCREC').map(async invoice => {\n var { InvoiceID } = invoice\n var { Invoices } = await AccountingAPI.getInvoice(accounting, { invoiceId: InvoiceID })\n\n var { InvoiceNumber: refNo, Reference: refNo2, DateString, Contact, LineItems } = Invoices[0]\n var releaseDate = String(DateString.split('T')[0])\n\n var { ContactID } = Contact\n\n const {\n attentionCompany,\n attentionTo,\n email,\n deliveryAddress1,\n billingAddress,\n city,\n postalCode,\n country\n } = await AccountingAPI.getContact(accounting, {\n ContactID\n })\n\n var products = LineItems.length\n ? LineItems.map(item => {\n var { ItemCode: sku, Quantity: releaseQty } = item\n return { product: { sku }, releaseQty }\n })\n : ['undefined']\n\n return {\n refNo,\n refNo2,\n releaseDate,\n type: 'b2b',\n exportOption: false,\n ownTransport: true,\n packingOption: false,\n deliverTo: {\n attentionTo,\n attentionCompany,\n email,\n deliveryAddress1,\n city,\n postalCode,\n country\n },\n billTo: {\n billingAddress\n },\n orderInventories: products\n }\n })\n )\n return results\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-item.js","sourceRoot":"","sources":["../../../../../server/controllers/xero/apis/item/delete-item.ts"],"names":[],"mappings":";;AAAA,gCAkBC;AAlBD,SAAgB,UAAU;IACxB,OAAO;QACL,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,iBAAiB;QACvB,WAAW,CAAC,GAAG;YACb,OAAO;gBACL,QAAQ,EAAE;oBACR,MAAM,EAAE,GAAG,CAAC,MAAM;iBACnB;gBACD,OAAO,
|
|
1
|
+
{"version":3,"file":"delete-item.js","sourceRoot":"","sources":["../../../../../server/controllers/xero/apis/item/delete-item.ts"],"names":[],"mappings":";;AAAA,gCAkBC;AAlBD,SAAgB,UAAU;IACxB,OAAO;QACL,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,iBAAiB;QACvB,WAAW,CAAC,GAAG;YACb,OAAO;gBACL,QAAQ,EAAE;oBACR,MAAM,EAAE,GAAG,CAAC,MAAM;iBACnB;gBACD,OAAO,EAAE;oBACP,GAAG,GAAG;iBACP;aACF,CAAA;QACH,CAAC;QACD,SAAS,CAAC,GAAG;YACX,OAAO,GAAG,CAAA;QACZ,CAAC;KACF,CAAA;AACH,CAAC","sourcesContent":["export function deleteItem() {\n return {\n method: 'put',\n path: '/Items/{itemId}',\n denormalize(req) {\n return {\n resource: {\n itemId: req.itemId\n },\n payload: {\n ...req\n }\n }\n },\n normalize(res) {\n return res\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-items.js","sourceRoot":"","sources":["../../../../../server/controllers/xero/apis/item/get-items.ts"],"names":[],"mappings":";;AAAA,4BAwCC;AAxCD,SAAgB,QAAQ;IACtB,OAAO;QACL,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,QAAQ;QACd,WAAW,CAAC,GAAG;YACb,OAAO;gBACL,OAAO,
|
|
1
|
+
{"version":3,"file":"get-items.js","sourceRoot":"","sources":["../../../../../server/controllers/xero/apis/item/get-items.ts"],"names":[],"mappings":";;AAAA,4BAwCC;AAxCD,SAAgB,QAAQ;IACtB,OAAO;QACL,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,QAAQ;QACd,WAAW,CAAC,GAAG;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,GAAG,GAAG;iBACP;aACF,CAAA;QACH,CAAC;QACD,SAAS,CAAC,GAAG;YACX,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;YAEnB,IAAI,OAAO,GAAU,EAAE,CAAA;YAEvB,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACzB,IAAI,EACF,IAAI,EAAE,GAAG,EACT,WAAW,EAAE,WAAW,EACxB,eAAe,EACf,IAAI,EAAE,IAAI,EACV,oBAAoB,EAAE,oBAAoB,EAC1C,yBAAyB,EAAE,oBAAoB,EAChD,GAAG,IAAI,CAAA;gBACR,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,eAAe,CAAA;gBAEtD,OAAO;oBACL,GAAG;oBACH,WAAW;oBACX,IAAI;oBACJ,oBAAoB;oBACpB,oBAAoB;oBACpB,eAAe;iBAChB,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAA;AACH,CAAC","sourcesContent":["export function getItems() {\n return {\n method: 'get',\n path: '/Items',\n denormalize(req) {\n return {\n payload: {\n ...req\n }\n }\n },\n normalize(res) {\n var { Items } = res\n\n let results: any[] = []\n\n results = Items.map(item => {\n var {\n Code: sku,\n Description: description,\n PurchaseDetails,\n Name: name,\n IsTrackedAsInventory: isTrackedAsInventory,\n InventoryAssetAccountCode: inventoryAccountCode\n } = item\n var { AccountCode: cogsAccountCode } = PurchaseDetails\n\n return {\n sku,\n description,\n name,\n isTrackedAsInventory,\n inventoryAccountCode,\n cogsAccountCode\n }\n })\n\n return results\n }\n }\n}\n"]}
|
|
@@ -7,7 +7,9 @@ function getPurchaseOrders() {
|
|
|
7
7
|
path: '/PurchaseOrders',
|
|
8
8
|
denormalize(req) {
|
|
9
9
|
return {
|
|
10
|
-
payload:
|
|
10
|
+
payload: {
|
|
11
|
+
...req
|
|
12
|
+
}
|
|
11
13
|
};
|
|
12
14
|
},
|
|
13
15
|
normalize(res) {
|
|
@@ -25,13 +27,16 @@ function getPurchaseOrders() {
|
|
|
25
27
|
}).reduce((newItem, item) => {
|
|
26
28
|
var foundItem = newItem.find(newItem => newItem.batchId === item.batchId && newItem.product.sku === item.product.sku);
|
|
27
29
|
if (!foundItem) {
|
|
28
|
-
newItem.push(
|
|
30
|
+
newItem.push({ ...item });
|
|
29
31
|
return newItem;
|
|
30
32
|
}
|
|
31
33
|
else {
|
|
32
34
|
return newItem.map(ni => {
|
|
33
35
|
if (ni.batchId === item.batchId && ni.product.sku === item.product.sku) {
|
|
34
|
-
return
|
|
36
|
+
return {
|
|
37
|
+
...ni,
|
|
38
|
+
packQty: ni.packQty + item.packQty
|
|
39
|
+
};
|
|
35
40
|
}
|
|
36
41
|
else {
|
|
37
42
|
return ni;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-purchase-orders.js","sourceRoot":"","sources":["../../../../../server/controllers/xero/apis/purchase-order/get-purchase-orders.ts"],"names":[],"mappings":";;AAAA,8CA4DC;AA5DD,SAAgB,iBAAiB;IAC/B,OAAO;QACL,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,iBAAiB;QACvB,WAAW,CAAC,GAAG;YACb,OAAO;gBACL,OAAO,
|
|
1
|
+
{"version":3,"file":"get-purchase-orders.js","sourceRoot":"","sources":["../../../../../server/controllers/xero/apis/purchase-order/get-purchase-orders.ts"],"names":[],"mappings":";;AAAA,8CA4DC;AA5DD,SAAgB,iBAAiB;IAC/B,OAAO;QACL,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,iBAAiB;QACvB,WAAW,CAAC,GAAG;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,GAAG,GAAG;iBACP;aACF,CAAA;QACH,CAAC;QACD,SAAS,CAAC,GAAG;YACX,MAAM,EAAE,cAAc,EAAE,GAAG,GAAG,CAAA;YAE9B,IAAI,OAAO,GAAU,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;gBACtD,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,GAAG,aAAa,CAAA;gBACtG,MAAM,OAAO,GAAQ,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA;gBAE9G,IAAI,QAAQ,GAAU,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;oBAC7C,OAAO;wBACL,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAE;wBACnC,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,QAAQ,CAAC,QAAQ;wBAC1B,SAAS,EAAE,QAAQ,CAAC,UAAU;qBAC/B,CAAA;gBACH,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;oBAC1B,IAAI,SAAS,GAAG,OAAO,CAAC,IAAI,CAC1B,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CACxF,CAAA;oBACD,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;wBACzB,OAAO,OAAO,CAAA;oBAChB,CAAC;yBAAM,CAAC;wBACN,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;4BACtB,IAAI,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gCACvE,OAAO;oCACL,GAAG,EAAE;oCACL,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;iCACnC,CAAA;4BACH,CAAC;iCAAM,CAAC;gCACN,OAAO,EAAE,CAAA;4BACX,CAAC;wBACH,CAAC,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC,EAAE,EAAE,CAAC,CAAA;gBAEN,OAAO;oBACL,KAAK;oBACL,MAAM;oBACN,OAAO;oBACP,YAAY,EAAE,IAAI;oBAClB,WAAW,EAAE,KAAK;oBAClB,SAAS,EAAE,KAAK;oBAChB,aAAa,EAAE,QAAQ;iBACxB,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAA;AACH,CAAC","sourcesContent":["export function getPurchaseOrders() {\n return {\n method: 'get',\n path: '/PurchaseOrders',\n denormalize(req) {\n return {\n payload: {\n ...req\n }\n }\n },\n normalize(res) {\n const { PurchaseOrders } = res\n\n let results: any[] = PurchaseOrders.map(purchaseOrder => {\n const { PurchaseOrderNumber: refNo, Reference: refNo2, DeliveryDateString, LineItems } = purchaseOrder\n const etaDate: any = DeliveryDateString !== undefined ? String(DeliveryDateString.split('T')[0]) : 'undefined'\n\n let products: any[] = LineItems.map(lineItem => {\n return {\n product: { sku: lineItem.ItemCode },\n batchId: refNo,\n packQty: lineItem.Quantity,\n unitPrice: lineItem.UnitAmount\n }\n }).reduce((newItem, item) => {\n var foundItem = newItem.find(\n newItem => newItem.batchId === item.batchId && newItem.product.sku === item.product.sku\n )\n if (!foundItem) {\n newItem.push({ ...item })\n return newItem\n } else {\n return newItem.map(ni => {\n if (ni.batchId === item.batchId && ni.product.sku === item.product.sku) {\n return {\n ...ni,\n packQty: ni.packQty + item.packQty\n }\n } else {\n return ni\n }\n })\n }\n }, [])\n\n return {\n refNo,\n refNo2,\n etaDate,\n ownTransport: true,\n importCargo: false,\n container: false,\n orderProducts: products\n }\n })\n\n return results\n }\n }\n}\n"]}
|
|
@@ -10,7 +10,9 @@ const ENDPOINT = 'https://api.xero.com/api.xro/2.0';
|
|
|
10
10
|
const debug = require('debug')('things-factory:integration-accounting:xero');
|
|
11
11
|
class Xero {
|
|
12
12
|
constructor(config) {
|
|
13
|
-
this.config =
|
|
13
|
+
this.config = {
|
|
14
|
+
...config
|
|
15
|
+
};
|
|
14
16
|
}
|
|
15
17
|
buildAuthURL(nonce) {
|
|
16
18
|
const scopes = 'offline_access openid profile email accounting.transactions accounting.settings accounting.contacts';
|
|
@@ -148,7 +150,10 @@ class Xero {
|
|
|
148
150
|
expiresIn: new Date(exp * 1000)
|
|
149
151
|
};
|
|
150
152
|
const repository = (0, shell_1.getRepository)(account_1.Account);
|
|
151
|
-
return await repository.save(
|
|
153
|
+
return await repository.save({
|
|
154
|
+
...account,
|
|
155
|
+
...patch
|
|
156
|
+
});
|
|
152
157
|
}
|
|
153
158
|
}
|
|
154
159
|
exports.Xero = Xero;
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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"]}
|
|
@@ -9,7 +9,7 @@ class AccountingConnector {
|
|
|
9
9
|
}
|
|
10
10
|
async connect(connection) {
|
|
11
11
|
const { domain, name, endpoint } = connection;
|
|
12
|
-
integration_base_1.ConnectionManager.addConnectionInstance(connection,
|
|
12
|
+
integration_base_1.ConnectionManager.addConnectionInstance(connection, { ...connection });
|
|
13
13
|
integration_base_1.ConnectionManager.logger.info(`accounting-connector connection(${name}:${connection.endpoint}) is connected`);
|
|
14
14
|
}
|
|
15
15
|
async disconnect(connection) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounting-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/accounting-connector.ts"],"names":[],"mappings":";;;AAAA,uEAA+E;AAE/E,MAAa,mBAAmB;IAC9B,KAAK,CAAC,KAAK,CAAC,iBAAiB;QAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;QAEtD,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;IAC7E,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAU;QACtB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;QAE7C,oCAAiB,CAAC,qBAAqB,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"accounting-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/accounting-connector.ts"],"names":[],"mappings":";;;AAAA,uEAA+E;AAE/E,MAAa,mBAAmB;IAC9B,KAAK,CAAC,KAAK,CAAC,iBAAiB;QAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;QAEtD,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;IAC7E,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAU;QACtB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;QAE7C,oCAAiB,CAAC,qBAAqB,CAAC,UAAU,EAAE,EAAE,GAAG,UAAU,EAAE,CAAC,CAAA;QAEtE,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,IAAI,IAAI,UAAU,CAAC,QAAQ,gBAAgB,CAAC,CAAA;IAC/G,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAU;QACzB,oCAAiB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAA;QAEtD,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,UAAU,CAAC,IAAI,mBAAmB,CAAC,CAAA;IACtG,CAAC;IAED,IAAI,aAAa;QACf,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,YAAY;QACd,OAAO,CAAC,YAAY,CAAC,CAAA;IACvB,CAAC;CACF;AA5BD,kDA4BC;AAED,oCAAiB,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,IAAI,mBAAmB,EAAE,CAAC,CAAA","sourcesContent":["import { ConnectionManager, Connector } from '@things-factory/integration-base'\n\nexport class AccountingConnector implements Connector {\n async ready(connectionConfigs) {\n await Promise.all(connectionConfigs.map(this.connect))\n\n ConnectionManager.logger.info('accounting-connector connections are ready')\n }\n\n async connect(connection) {\n const { domain, name, endpoint } = connection\n\n ConnectionManager.addConnectionInstance(connection, { ...connection })\n\n ConnectionManager.logger.info(`accounting-connector connection(${name}:${connection.endpoint}) is connected`)\n }\n\n async disconnect(connection) {\n ConnectionManager.removeConnectionInstance(connection)\n\n ConnectionManager.logger.info(`accounting-connector connection(${connection.name}) is disconnected`)\n }\n\n get parameterSpec() {\n return []\n }\n\n get taskPrefixes() {\n return ['accounting']\n }\n}\n\nConnectionManager.registerConnector('accounting-connector', new AccountingConnector())\n"]}
|
|
@@ -7,7 +7,10 @@ exports.accountsResolver = {
|
|
|
7
7
|
async accounts(_, params, context) {
|
|
8
8
|
const { domain } = context.state;
|
|
9
9
|
const convertedParams = (0, shell_1.convertListParams)(params, { domain });
|
|
10
|
-
const [items, total] = await (0, shell_1.getRepository)(entities_1.Account).findAndCount(
|
|
10
|
+
const [items, total] = await (0, shell_1.getRepository)(entities_1.Account).findAndCount({
|
|
11
|
+
...convertedParams,
|
|
12
|
+
relations: ['domain', 'creator', 'updater']
|
|
13
|
+
});
|
|
11
14
|
return { items, total };
|
|
12
15
|
}
|
|
13
16
|
};
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,CAAC;YAC/D,GAAG,eAAe;YAClB,SAAS,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;SAC5C,CAAC,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"]}
|
|
@@ -7,7 +7,13 @@ 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(
|
|
10
|
+
return await (0, shell_1.getRepository)(entities_1.Account).save({
|
|
11
|
+
status: controllers_1.ACCOUNTING_STATUS.INACTIVE,
|
|
12
|
+
...account,
|
|
13
|
+
domain,
|
|
14
|
+
creator: user,
|
|
15
|
+
updater: user
|
|
16
|
+
});
|
|
11
17
|
}
|
|
12
18
|
};
|
|
13
19
|
//# 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,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
|
|
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,CAAC;YACvC,MAAM,EAAE,+BAAiB,CAAC,QAAQ;YAClC,GAAG,OAAO;YACV,MAAM;YACN,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;SACd,CAAC,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"]}
|
|
@@ -9,7 +9,11 @@ exports.deleteAccount = {
|
|
|
9
9
|
const foundAccount = await (0, shell_1.getRepository)(entities_1.Account).findOne({
|
|
10
10
|
where: { domain: { id: context.state.domain.id }, id }
|
|
11
11
|
});
|
|
12
|
-
await (0, shell_1.getRepository)(entities_1.Account).save(
|
|
12
|
+
await (0, shell_1.getRepository)(entities_1.Account).save({
|
|
13
|
+
...foundAccount,
|
|
14
|
+
status: controllers_1.ACCOUNTING_STATUS.TERMINATED,
|
|
15
|
+
updater: context.state.user
|
|
16
|
+
});
|
|
13
17
|
return true;
|
|
14
18
|
}
|
|
15
19
|
};
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,CAAC;YAChC,GAAG,YAAY;YACf,MAAM,EAAE,+BAAiB,CAAC,UAAU;YACpC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;SAC5B,CAAC,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"]}
|
|
@@ -11,7 +11,11 @@ exports.deleteAccounts = {
|
|
|
11
11
|
where: { domain: { id: context.state.domain.id }, id: (0, typeorm_1.In)(ids) }
|
|
12
12
|
});
|
|
13
13
|
const updatedAccount = foundAccounts.map((account) => {
|
|
14
|
-
return
|
|
14
|
+
return {
|
|
15
|
+
...account,
|
|
16
|
+
status: controllers_1.ACCOUNTING_STATUS.TERMINATED,
|
|
17
|
+
updater: context.state.user
|
|
18
|
+
};
|
|
15
19
|
});
|
|
16
20
|
await (0, shell_1.getRepository)(entities_1.Account).save(updatedAccount);
|
|
17
21
|
return true;
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,OAAO;gBACL,GAAG,OAAO;gBACV,MAAM,EAAE,+BAAiB,CAAC,UAAU;gBACpC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;aAC5B,CAAA;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"]}
|
|
@@ -10,6 +10,17 @@ const create_account_1 = require("./create-account");
|
|
|
10
10
|
const delete_account_1 = require("./delete-account");
|
|
11
11
|
const delete_accounts_1 = require("./delete-accounts");
|
|
12
12
|
const Xero = tslib_1.__importStar(require("./xero"));
|
|
13
|
-
exports.Query =
|
|
14
|
-
|
|
13
|
+
exports.Query = {
|
|
14
|
+
...accounts_1.accountsResolver,
|
|
15
|
+
...account_1.accountResolver,
|
|
16
|
+
...Xero.Query
|
|
17
|
+
};
|
|
18
|
+
exports.Mutation = {
|
|
19
|
+
...update_account_1.updateAccount,
|
|
20
|
+
...update_multiple_accounts_1.updateMultipleAccount,
|
|
21
|
+
...create_account_1.createAccount,
|
|
22
|
+
...delete_account_1.deleteAccount,
|
|
23
|
+
...delete_accounts_1.deleteAccounts,
|
|
24
|
+
...Xero.Mutation
|
|
25
|
+
};
|
|
15
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/index.ts"],"names":[],"mappings":";;;;AAAA,uCAA2C;AAC3C,yCAA6C;AAE7C,yEAAkE;AAClE,qDAAgD;AAChD,qDAAgD;AAChD,qDAAgD;AAChD,uDAAkD;AAElD,qDAA8B;AAEjB,QAAA,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/accounting/index.ts"],"names":[],"mappings":";;;;AAAA,uCAA2C;AAC3C,yCAA6C;AAE7C,yEAAkE;AAClE,qDAAgD;AAChD,qDAAgD;AAChD,qDAAgD;AAChD,uDAAkD;AAElD,qDAA8B;AAEjB,QAAA,KAAK,GAAG;IACnB,GAAG,2BAAgB;IACnB,GAAG,yBAAe;IAClB,GAAG,IAAI,CAAC,KAAK;CACP,CAAA;AAEK,QAAA,QAAQ,GAAG;IACtB,GAAG,8BAAa;IAChB,GAAG,gDAAqB;IACxB,GAAG,8BAAa;IAChB,GAAG,8BAAa;IAChB,GAAG,gCAAc;IACjB,GAAG,IAAI,CAAC,QAAQ;CACjB,CAAA","sourcesContent":["import { accountResolver } from './account'\nimport { accountsResolver } from './accounts'\n\nimport { updateMultipleAccount } from './update-multiple-accounts'\nimport { updateAccount } from './update-account'\nimport { createAccount } from './create-account'\nimport { deleteAccount } from './delete-account'\nimport { deleteAccounts } from './delete-accounts'\n\nimport * as Xero from './xero'\n\nexport const Query = {\n ...accountsResolver,\n ...accountResolver,\n ...Xero.Query\n} as any\n\nexport const Mutation = {\n ...updateAccount,\n ...updateMultipleAccount,\n ...createAccount,\n ...deleteAccount,\n ...deleteAccounts,\n ...Xero.Mutation\n}\n"]}
|
|
@@ -9,7 +9,11 @@ exports.updateAccount = {
|
|
|
9
9
|
const account = await repository.findOne({
|
|
10
10
|
where: { domain: { id: context.state.domain.id }, name }
|
|
11
11
|
});
|
|
12
|
-
return await repository.save(
|
|
12
|
+
return await repository.save({
|
|
13
|
+
...account,
|
|
14
|
+
...patch,
|
|
15
|
+
updater: context.state.user
|
|
16
|
+
});
|
|
13
17
|
}
|
|
14
18
|
};
|
|
15
19
|
//# sourceMappingURL=update-account.js.map
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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,CAAC;YAC3B,GAAG,OAAO;YACV,GAAG,KAAK;YACR,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;SAC5B,CAAC,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"]}
|
|
@@ -12,16 +12,25 @@ exports.updateMultipleAccount = {
|
|
|
12
12
|
if (_createRecords.length > 0) {
|
|
13
13
|
for (let i = 0; i < _createRecords.length; i++) {
|
|
14
14
|
const newRecord = _createRecords[i];
|
|
15
|
-
const result = await accountRepo.save(
|
|
16
|
-
|
|
15
|
+
const result = await accountRepo.save({
|
|
16
|
+
...newRecord,
|
|
17
|
+
domain: context.state.domain,
|
|
18
|
+
creator: context.state.user,
|
|
19
|
+
updater: context.state.user
|
|
20
|
+
});
|
|
21
|
+
results.push({ ...result, cuFlag: '+' });
|
|
17
22
|
}
|
|
18
23
|
}
|
|
19
24
|
if (_updateRecords.length > 0) {
|
|
20
25
|
for (let i = 0; i < _updateRecords.length; i++) {
|
|
21
26
|
const newRecord = _updateRecords[i];
|
|
22
27
|
const account = await accountRepo.findOneBy({ id: newRecord.id });
|
|
23
|
-
const result = await accountRepo.save(
|
|
24
|
-
|
|
28
|
+
const result = await accountRepo.save({
|
|
29
|
+
...account,
|
|
30
|
+
...newRecord,
|
|
31
|
+
updater: context.state.user
|
|
32
|
+
});
|
|
33
|
+
results.push({ ...result, cuFlag: 'M' });
|
|
25
34
|
}
|
|
26
35
|
}
|
|
27
36
|
return results;
|
|
@@ -1 +1 @@
|
|
|
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,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;gBAEnC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,
|
|
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,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;gBAEnC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC;oBACpC,GAAG,SAAS;oBACZ,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;oBAC5B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;oBAC3B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;iBAC5B,CAAC,CAAA;gBAEF,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,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,CAAC;oBACpC,GAAG,OAAO;oBACV,GAAG,SAAS;oBACZ,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;iBAC5B,CAAC,CAAA;gBAEF,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;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"]}
|
|
@@ -45,7 +45,11 @@ exports.deactivateXeroAccount = {
|
|
|
45
45
|
countryCode: '',
|
|
46
46
|
status: controllers_1.ACCOUNTING_STATUS.INACTIVE
|
|
47
47
|
};
|
|
48
|
-
return await repository.save(
|
|
48
|
+
return await repository.save({
|
|
49
|
+
...account,
|
|
50
|
+
...patch,
|
|
51
|
+
updater: context.state.user
|
|
52
|
+
});
|
|
49
53
|
}
|
|
50
54
|
};
|
|
51
55
|
//# sourceMappingURL=deactivate-xero-account.js.map
|
|
@@ -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;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,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YAElD,IAAI,UAAU,EAAE,CAAC;gBACf,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,CAAC;oBACjB,KAAK,CAAC,0BAA0B,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;gBAC3E,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,2CAA2C,CAAC,CAAA;YACpD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,6CAA6C,CAAC,CAAA;QACtD,CAAC;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
|
|
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,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YAElD,IAAI,UAAU,EAAE,CAAC;gBACf,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,CAAC;oBACjB,KAAK,CAAC,0BAA0B,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;gBAC3E,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,2CAA2C,CAAC,CAAA;YACpD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,6CAA6C,CAAC,CAAA;QACtD,CAAC;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,CAAC;YAC3B,GAAG,OAAO;YACV,GAAG,KAAK;YACR,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;SAC5B,CAAC,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"]}
|
|
@@ -4,6 +4,11 @@ exports.Mutation = exports.Query = void 0;
|
|
|
4
4
|
const get_xero_auth_url_1 = require("./get-xero-auth-url");
|
|
5
5
|
const deactivate_xero_account_1 = require("./deactivate-xero-account");
|
|
6
6
|
const refresh_xero_access_token_1 = require("./refresh-xero-access-token");
|
|
7
|
-
exports.Query =
|
|
8
|
-
|
|
7
|
+
exports.Query = {
|
|
8
|
+
...get_xero_auth_url_1.getXeroAuthURL
|
|
9
|
+
};
|
|
10
|
+
exports.Mutation = {
|
|
11
|
+
...refresh_xero_access_token_1.refreshXeroAccessToken,
|
|
12
|
+
...deactivate_xero_account_1.deactivateXeroAccount
|
|
13
|
+
};
|
|
9
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/accounting/xero/index.ts"],"names":[],"mappings":";;;AAAA,2DAAoD;AAEpD,uEAAiE;AACjE,2EAAoE;AAEvD,QAAA,KAAK,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/accounting/xero/index.ts"],"names":[],"mappings":";;;AAAA,2DAAoD;AAEpD,uEAAiE;AACjE,2EAAoE;AAEvD,QAAA,KAAK,GAAG;IACnB,GAAG,kCAAc;CAClB,CAAA;AAEY,QAAA,QAAQ,GAAG;IACtB,GAAG,kDAAsB;IACzB,GAAG,+CAAqB;CACzB,CAAA","sourcesContent":["import { getXeroAuthURL } from './get-xero-auth-url'\n\nimport { deactivateXeroAccount } from './deactivate-xero-account'\nimport { refreshXeroAccessToken } from './refresh-xero-access-token'\n\nexport const Query = {\n ...getXeroAuthURL\n}\n\nexport const Mutation = {\n ...refreshXeroAccessToken,\n ...deactivateXeroAccount\n}\n"]}
|
|
@@ -45,7 +45,11 @@ exports.refreshXeroAccessToken = {
|
|
|
45
45
|
tokenType,
|
|
46
46
|
expiresIn: new Date(exp * 1000)
|
|
47
47
|
};
|
|
48
|
-
return await repository.save(
|
|
48
|
+
return await repository.save({
|
|
49
|
+
...account,
|
|
50
|
+
...patch,
|
|
51
|
+
updater: context.state.user
|
|
52
|
+
});
|
|
49
53
|
}
|
|
50
54
|
};
|
|
51
55
|
//# sourceMappingURL=refresh-xero-access-token.js.map
|
|
@@ -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;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,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QACpF,CAAC;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
|
|
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,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QACpF,CAAC;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,CAAC;YAC3B,GAAG,OAAO;YACV,GAAG,KAAK;YACR,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;SAC5B,CAAC,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"]}
|