@things-factory/integration-accounting 9.0.0-beta.27 → 9.0.0-beta.29

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.
Files changed (191) hide show
  1. package/dist-server/controllers/accounting-api/decorators.d.ts +1 -0
  2. package/dist-server/controllers/accounting-api/decorators.js +33 -0
  3. package/dist-server/controllers/accounting-api/decorators.js.map +1 -0
  4. package/dist-server/controllers/accounting-api/index.d.ts +25 -0
  5. package/dist-server/controllers/accounting-api/index.js +124 -0
  6. package/dist-server/controllers/accounting-api/index.js.map +1 -0
  7. package/dist-server/controllers/index.d.ts +2 -0
  8. package/dist-server/controllers/index.js +6 -0
  9. package/dist-server/controllers/index.js.map +1 -0
  10. package/dist-server/controllers/xero/apis/contact/get-contact.d.ts +19 -0
  11. package/dist-server/controllers/xero/apis/contact/get-contact.js +32 -0
  12. package/dist-server/controllers/xero/apis/contact/get-contact.js.map +1 -0
  13. package/dist-server/controllers/xero/apis/contact/get-contacts.d.ts +8 -0
  14. package/dist-server/controllers/xero/apis/contact/get-contacts.js +18 -0
  15. package/dist-server/controllers/xero/apis/contact/get-contacts.js.map +1 -0
  16. package/dist-server/controllers/xero/apis/contact/index.d.ts +2 -0
  17. package/dist-server/controllers/xero/apis/contact/index.js +6 -0
  18. package/dist-server/controllers/xero/apis/contact/index.js.map +1 -0
  19. package/dist-server/controllers/xero/apis/index.d.ts +4 -0
  20. package/dist-server/controllers/xero/apis/index.js +8 -0
  21. package/dist-server/controllers/xero/apis/index.js.map +1 -0
  22. package/dist-server/controllers/xero/apis/invoice/create-invoice.d.ts +6 -0
  23. package/dist-server/controllers/xero/apis/invoice/create-invoice.js +16 -0
  24. package/dist-server/controllers/xero/apis/invoice/create-invoice.js.map +1 -0
  25. package/dist-server/controllers/xero/apis/invoice/get-invoice.d.ts +10 -0
  26. package/dist-server/controllers/xero/apis/invoice/get-invoice.js +18 -0
  27. package/dist-server/controllers/xero/apis/invoice/get-invoice.js.map +1 -0
  28. package/dist-server/controllers/xero/apis/invoice/get-invoices.d.ts +10 -0
  29. package/dist-server/controllers/xero/apis/invoice/get-invoices.js +59 -0
  30. package/dist-server/controllers/xero/apis/invoice/get-invoices.js.map +1 -0
  31. package/dist-server/controllers/xero/apis/invoice/index.d.ts +4 -0
  32. package/dist-server/controllers/xero/apis/invoice/index.js +8 -0
  33. package/dist-server/controllers/xero/apis/invoice/index.js.map +1 -0
  34. package/dist-server/controllers/xero/apis/invoice/update-invoice.d.ts +6 -0
  35. package/dist-server/controllers/xero/apis/invoice/update-invoice.js +16 -0
  36. package/dist-server/controllers/xero/apis/invoice/update-invoice.js.map +1 -0
  37. package/dist-server/controllers/xero/apis/item/create-item.d.ts +16 -0
  38. package/dist-server/controllers/xero/apis/item/create-item.js +32 -0
  39. package/dist-server/controllers/xero/apis/item/create-item.js.map +1 -0
  40. package/dist-server/controllers/xero/apis/item/delete-item.d.ts +11 -0
  41. package/dist-server/controllers/xero/apis/item/delete-item.js +21 -0
  42. package/dist-server/controllers/xero/apis/item/delete-item.js.map +1 -0
  43. package/dist-server/controllers/xero/apis/item/get-item.d.ts +10 -0
  44. package/dist-server/controllers/xero/apis/item/get-item.js +34 -0
  45. package/dist-server/controllers/xero/apis/item/get-item.js.map +1 -0
  46. package/dist-server/controllers/xero/apis/item/get-items.d.ts +8 -0
  47. package/dist-server/controllers/xero/apis/item/get-items.js +32 -0
  48. package/dist-server/controllers/xero/apis/item/get-items.js.map +1 -0
  49. package/dist-server/controllers/xero/apis/item/index.d.ts +6 -0
  50. package/dist-server/controllers/xero/apis/item/index.js +10 -0
  51. package/dist-server/controllers/xero/apis/item/index.js.map +1 -0
  52. package/dist-server/controllers/xero/apis/item/update-item.d.ts +14 -0
  53. package/dist-server/controllers/xero/apis/item/update-item.js +30 -0
  54. package/dist-server/controllers/xero/apis/item/update-item.js.map +1 -0
  55. package/dist-server/controllers/xero/apis/item/update-items.d.ts +10 -0
  56. package/dist-server/controllers/xero/apis/item/update-items.js +36 -0
  57. package/dist-server/controllers/xero/apis/item/update-items.js.map +1 -0
  58. package/dist-server/controllers/xero/apis/purchase-order/get-purchase-orders.d.ts +8 -0
  59. package/dist-server/controllers/xero/apis/purchase-order/get-purchase-orders.js +56 -0
  60. package/dist-server/controllers/xero/apis/purchase-order/get-purchase-orders.js.map +1 -0
  61. package/dist-server/controllers/xero/apis/purchase-order/index.d.ts +1 -0
  62. package/dist-server/controllers/xero/apis/purchase-order/index.js +5 -0
  63. package/dist-server/controllers/xero/apis/purchase-order/index.js.map +1 -0
  64. package/dist-server/controllers/xero/index.d.ts +1 -0
  65. package/dist-server/controllers/xero/index.js +9 -0
  66. package/dist-server/controllers/xero/index.js.map +1 -0
  67. package/dist-server/controllers/xero/platform-action.d.ts +6 -0
  68. package/dist-server/controllers/xero/platform-action.js +49 -0
  69. package/dist-server/controllers/xero/platform-action.js.map +1 -0
  70. package/dist-server/controllers/xero/xero.d.ts +18 -0
  71. package/dist-server/controllers/xero/xero.js +155 -0
  72. package/dist-server/controllers/xero/xero.js.map +1 -0
  73. package/dist-server/engine/connector/accounting-connector.d.ts +8 -0
  74. package/dist-server/engine/connector/accounting-connector.js +28 -0
  75. package/dist-server/engine/connector/accounting-connector.js.map +1 -0
  76. package/dist-server/engine/connector/index.d.ts +1 -0
  77. package/dist-server/engine/connector/index.js +4 -0
  78. package/dist-server/engine/connector/index.js.map +1 -0
  79. package/dist-server/engine/index.d.ts +2 -0
  80. package/dist-server/engine/index.js +5 -0
  81. package/dist-server/engine/index.js.map +1 -0
  82. package/dist-server/engine/task/accounting-api.d.ts +1 -0
  83. package/dist-server/engine/task/accounting-api.js +54 -0
  84. package/dist-server/engine/task/accounting-api.js.map +1 -0
  85. package/dist-server/engine/task/index.d.ts +1 -0
  86. package/dist-server/engine/task/index.js +4 -0
  87. package/dist-server/engine/task/index.js.map +1 -0
  88. package/dist-server/entities/account.d.ts +23 -0
  89. package/dist-server/entities/account.js +113 -0
  90. package/dist-server/entities/account.js.map +1 -0
  91. package/dist-server/entities/index.d.ts +3 -0
  92. package/dist-server/entities/index.js +7 -0
  93. package/dist-server/entities/index.js.map +1 -0
  94. package/dist-server/graphql/index.d.ts +6 -0
  95. package/dist-server/graphql/index.js +11 -0
  96. package/dist-server/graphql/index.js.map +1 -0
  97. package/dist-server/graphql/resolvers/accounting/account.d.ts +6 -0
  98. package/dist-server/graphql/resolvers/accounting/account.js +15 -0
  99. package/dist-server/graphql/resolvers/accounting/account.js.map +1 -0
  100. package/dist-server/graphql/resolvers/accounting/accounts.d.ts +8 -0
  101. package/dist-server/graphql/resolvers/accounting/accounts.js +14 -0
  102. package/dist-server/graphql/resolvers/accounting/accounts.js.map +1 -0
  103. package/dist-server/graphql/resolvers/accounting/create-account.d.ts +5 -0
  104. package/dist-server/graphql/resolvers/accounting/create-account.js +13 -0
  105. package/dist-server/graphql/resolvers/accounting/create-account.js.map +1 -0
  106. package/dist-server/graphql/resolvers/accounting/delete-account.d.ts +5 -0
  107. package/dist-server/graphql/resolvers/accounting/delete-account.js +16 -0
  108. package/dist-server/graphql/resolvers/accounting/delete-account.js.map +1 -0
  109. package/dist-server/graphql/resolvers/accounting/delete-accounts.d.ts +5 -0
  110. package/dist-server/graphql/resolvers/accounting/delete-accounts.js +20 -0
  111. package/dist-server/graphql/resolvers/accounting/delete-accounts.js.map +1 -0
  112. package/dist-server/graphql/resolvers/accounting/index.d.ts +25 -0
  113. package/dist-server/graphql/resolvers/accounting/index.js +15 -0
  114. package/dist-server/graphql/resolvers/accounting/index.js.map +1 -0
  115. package/dist-server/graphql/resolvers/accounting/update-account.d.ts +6 -0
  116. package/dist-server/graphql/resolvers/accounting/update-account.js +15 -0
  117. package/dist-server/graphql/resolvers/accounting/update-account.js.map +1 -0
  118. package/dist-server/graphql/resolvers/accounting/update-multiple-accounts.d.ts +5 -0
  119. package/dist-server/graphql/resolvers/accounting/update-multiple-accounts.js +30 -0
  120. package/dist-server/graphql/resolvers/accounting/update-multiple-accounts.js.map +1 -0
  121. package/dist-server/graphql/resolvers/accounting/xero/deactivate-xero-account.d.ts +5 -0
  122. package/dist-server/graphql/resolvers/accounting/xero/deactivate-xero-account.js +51 -0
  123. package/dist-server/graphql/resolvers/accounting/xero/deactivate-xero-account.js.map +1 -0
  124. package/dist-server/graphql/resolvers/accounting/xero/get-xero-auth-url.d.ts +6 -0
  125. package/dist-server/graphql/resolvers/accounting/xero/get-xero-auth-url.js +31 -0
  126. package/dist-server/graphql/resolvers/accounting/xero/get-xero-auth-url.js.map +1 -0
  127. package/dist-server/graphql/resolvers/accounting/xero/index.d.ts +13 -0
  128. package/dist-server/graphql/resolvers/accounting/xero/index.js +9 -0
  129. package/dist-server/graphql/resolvers/accounting/xero/index.js.map +1 -0
  130. package/dist-server/graphql/resolvers/accounting/xero/refresh-xero-access-token.d.ts +5 -0
  131. package/dist-server/graphql/resolvers/accounting/xero/refresh-xero-access-token.js +51 -0
  132. package/dist-server/graphql/resolvers/accounting/xero/refresh-xero-access-token.js.map +1 -0
  133. package/dist-server/graphql/resolvers/accounting-api/accounting-invoice.d.ts +20 -0
  134. package/dist-server/graphql/resolvers/accounting-api/accounting-invoice.js +32 -0
  135. package/dist-server/graphql/resolvers/accounting-api/accounting-invoice.js.map +1 -0
  136. package/dist-server/graphql/resolvers/accounting-api/accounting-item.d.ts +24 -0
  137. package/dist-server/graphql/resolvers/accounting-api/accounting-item.js +36 -0
  138. package/dist-server/graphql/resolvers/accounting-api/accounting-item.js.map +1 -0
  139. package/dist-server/graphql/resolvers/accounting-api/accounting-purchase-order.d.ts +6 -0
  140. package/dist-server/graphql/resolvers/accounting-api/accounting-purchase-order.js +16 -0
  141. package/dist-server/graphql/resolvers/accounting-api/accounting-purchase-order.js.map +1 -0
  142. package/dist-server/graphql/resolvers/accounting-api/index.d.ts +44 -0
  143. package/dist-server/graphql/resolvers/accounting-api/index.js +9 -0
  144. package/dist-server/graphql/resolvers/accounting-api/index.js.map +1 -0
  145. package/dist-server/graphql/resolvers/index.d.ts +25 -0
  146. package/dist-server/graphql/resolvers/index.js +8 -0
  147. package/dist-server/graphql/resolvers/index.js.map +1 -0
  148. package/dist-server/graphql/types/accounting/account-list.d.ts +1 -0
  149. package/dist-server/graphql/types/accounting/account-list.js +12 -0
  150. package/dist-server/graphql/types/accounting/account-list.js.map +1 -0
  151. package/dist-server/graphql/types/accounting/account-patch.d.ts +1 -0
  152. package/dist-server/graphql/types/accounting/account-patch.js +18 -0
  153. package/dist-server/graphql/types/accounting/account-patch.js.map +1 -0
  154. package/dist-server/graphql/types/accounting/account.d.ts +1 -0
  155. package/dist-server/graphql/types/accounting/account.js +29 -0
  156. package/dist-server/graphql/types/accounting/account.js.map +1 -0
  157. package/dist-server/graphql/types/accounting/index.d.ts +3 -0
  158. package/dist-server/graphql/types/accounting/index.js +45 -0
  159. package/dist-server/graphql/types/accounting/index.js.map +1 -0
  160. package/dist-server/graphql/types/accounting/new-account.d.ts +1 -0
  161. package/dist-server/graphql/types/accounting/new-account.js +16 -0
  162. package/dist-server/graphql/types/accounting/new-account.js.map +1 -0
  163. package/dist-server/graphql/types/accounting-api/invoice.d.ts +3 -0
  164. package/dist-server/graphql/types/accounting-api/invoice.js +63 -0
  165. package/dist-server/graphql/types/accounting-api/invoice.js.map +1 -0
  166. package/dist-server/graphql/types/accounting-api/item.d.ts +3 -0
  167. package/dist-server/graphql/types/accounting-api/item.js +63 -0
  168. package/dist-server/graphql/types/accounting-api/item.js.map +1 -0
  169. package/dist-server/graphql/types/accounting-api/purchase-order.d.ts +2 -0
  170. package/dist-server/graphql/types/accounting-api/purchase-order.js +34 -0
  171. package/dist-server/graphql/types/accounting-api/purchase-order.js.map +1 -0
  172. package/dist-server/graphql/types/index.d.ts +3 -0
  173. package/dist-server/graphql/types/index.js +12 -0
  174. package/dist-server/graphql/types/index.js.map +1 -0
  175. package/dist-server/index.d.ts +6 -0
  176. package/dist-server/index.js +11 -0
  177. package/dist-server/index.js.map +1 -0
  178. package/dist-server/migrations/index.d.ts +1 -0
  179. package/dist-server/migrations/index.js +12 -0
  180. package/dist-server/migrations/index.js.map +1 -0
  181. package/dist-server/routers/xero-private-router.d.ts +1 -0
  182. package/dist-server/routers/xero-private-router.js +17 -0
  183. package/dist-server/routers/xero-private-router.js.map +1 -0
  184. package/dist-server/routers/xero-router.d.ts +1 -0
  185. package/dist-server/routers/xero-router.js +109 -0
  186. package/dist-server/routers/xero-router.js.map +1 -0
  187. package/dist-server/routes.d.ts +1 -0
  188. package/dist-server/routes.js +11 -0
  189. package/dist-server/routes.js.map +1 -0
  190. package/dist-server/tsconfig.tsbuildinfo +1 -0
  191. package/package.json +13 -13
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NewAccount = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const graphql_tag_1 = tslib_1.__importDefault(require("graphql-tag"));
6
+ exports.NewAccount = (0, graphql_tag_1.default) `
7
+ input NewAccount {
8
+ name: String!
9
+ description: String
10
+ platform: String!
11
+ accountId: String
12
+ trackedInventory: Boolean
13
+ countryCode: String
14
+ }
15
+ `;
16
+ //# sourceMappingURL=new-account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new-account.js","sourceRoot":"","sources":["../../../../server/graphql/types/accounting/new-account.ts"],"names":[],"mappings":";;;;AAAA,sEAA6B;AAEhB,QAAA,UAAU,GAAG,IAAA,qBAAG,EAAA;;;;;;;;;CAS5B,CAAA","sourcesContent":["import gql from 'graphql-tag'\n\nexport const NewAccount = gql`\n input NewAccount {\n name: String!\n description: String\n platform: String!\n accountId: String\n trackedInventory: Boolean\n countryCode: String\n }\n`\n"]}
@@ -0,0 +1,3 @@
1
+ export declare const Mutation = "\n createAccountInvoice(\n accountingId: String!\n invoice: NewAccountInvoice!\n ): AccountInvoice\n\n updateAccountInvoice(\n accountingId: String!\n patch: AccountInvoicePatch!\n ): AccountInvoice\n";
2
+ export declare const Query = "\n getAccountInvoices(\n accountingId: String!\n filters: [Filter]\n pagination: Pagination\n sortings: [Sorting] \n ): AccountInvoiceList\n \n getAccountInvoice(\n accountingId: String!\n invoiceNo: String!\n ): AccountInvoice\n";
3
+ export declare const Types: import("graphql").DocumentNode[];
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Types = exports.Query = exports.Mutation = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const graphql_tag_1 = tslib_1.__importDefault(require("graphql-tag"));
6
+ const NewAccountInvoice = (0, graphql_tag_1.default) `
7
+ input NewAccountInvoice {
8
+ name: String!
9
+ description: String
10
+ }
11
+ `;
12
+ const AccountInvoiceList = (0, graphql_tag_1.default) `
13
+ type AccountInvoiceList {
14
+ items: [AccountInvoice]
15
+ total: Int
16
+ }
17
+ `;
18
+ const AccountInvoicePatch = (0, graphql_tag_1.default) `
19
+ input AccountInvoicePatch {
20
+ id: String!
21
+ name: String
22
+ description: String
23
+ cuFlag: String
24
+ }
25
+ `;
26
+ const AccountInvoice = (0, graphql_tag_1.default) `
27
+ type AccountInvoice {
28
+ id: String
29
+ name: String
30
+ domain: Domain
31
+ description: String
32
+ updater: User
33
+ creator: User
34
+ updatedAt: String
35
+ createdAt: String
36
+ }
37
+ `;
38
+ exports.Mutation = `
39
+ createAccountInvoice(
40
+ accountingId: String!
41
+ invoice: NewAccountInvoice!
42
+ ): AccountInvoice
43
+
44
+ updateAccountInvoice(
45
+ accountingId: String!
46
+ patch: AccountInvoicePatch!
47
+ ): AccountInvoice
48
+ `;
49
+ exports.Query = `
50
+ getAccountInvoices(
51
+ accountingId: String!
52
+ filters: [Filter]
53
+ pagination: Pagination
54
+ sortings: [Sorting]
55
+ ): AccountInvoiceList
56
+
57
+ getAccountInvoice(
58
+ accountingId: String!
59
+ invoiceNo: String!
60
+ ): AccountInvoice
61
+ `;
62
+ exports.Types = [AccountInvoice, NewAccountInvoice, AccountInvoicePatch, AccountInvoiceList];
63
+ //# sourceMappingURL=invoice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice.js","sourceRoot":"","sources":["../../../../server/graphql/types/accounting-api/invoice.ts"],"names":[],"mappings":";;;;AAAA,sEAA6B;AAE7B,MAAM,iBAAiB,GAAG,IAAA,qBAAG,EAAA;;;;;CAK5B,CAAA;AAED,MAAM,kBAAkB,GAAG,IAAA,qBAAG,EAAA;;;;;CAK7B,CAAA;AAED,MAAM,mBAAmB,GAAG,IAAA,qBAAG,EAAA;;;;;;;CAO9B,CAAA;AAED,MAAM,cAAc,GAAG,IAAA,qBAAG,EAAA;;;;;;;;;;;CAWzB,CAAA;AAEY,QAAA,QAAQ,GAAG;;;;;;;;;;CAUvB,CAAA;AAEY,QAAA,KAAK,GAAG;;;;;;;;;;;;CAYpB,CAAA;AAEY,QAAA,KAAK,GAAG,CAAC,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,CAAA","sourcesContent":["import gql from 'graphql-tag'\n\nconst NewAccountInvoice = gql`\n input NewAccountInvoice {\n name: String!\n description: String\n }\n`\n\nconst AccountInvoiceList = gql`\n type AccountInvoiceList {\n items: [AccountInvoice]\n total: Int\n }\n`\n\nconst AccountInvoicePatch = gql`\n input AccountInvoicePatch {\n id: String!\n name: String\n description: String\n cuFlag: String\n }\n`\n\nconst AccountInvoice = gql`\n type AccountInvoice {\n id: String\n name: String\n domain: Domain\n description: String\n updater: User\n creator: User\n updatedAt: String\n createdAt: String\n }\n`\n\nexport const Mutation = `\n createAccountInvoice(\n accountingId: String!\n invoice: NewAccountInvoice!\n ): AccountInvoice\n\n updateAccountInvoice(\n accountingId: String!\n patch: AccountInvoicePatch!\n ): AccountInvoice\n`\n\nexport const Query = `\n getAccountInvoices(\n accountingId: String!\n filters: [Filter]\n pagination: Pagination\n sortings: [Sorting] \n ): AccountInvoiceList\n \n getAccountInvoice(\n accountingId: String!\n invoiceNo: String!\n ): AccountInvoice\n`\n\nexport const Types = [AccountInvoice, NewAccountInvoice, AccountInvoicePatch, AccountInvoiceList]\n"]}
@@ -0,0 +1,3 @@
1
+ export declare const Mutation = "\n createAccountItem(\n accountingId: String!\n item: NewAccountItem!\n ): AccountItem\n\n updateAccountItem(\n accountingId: String!\n patch: AccountItemPatch!\n ): AccountItem\n";
2
+ export declare const Query = "\n getAccountItems(\n accountingId: String!\n filters: [Filter]\n pagination: Pagination\n sortings: [Sorting] \n ): AccountItemList\n \n getAccountItem(\n accountingId: String!\n itemId: String!\n ): AccountItem\n";
3
+ export declare const Types: import("graphql").DocumentNode[];
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Types = exports.Query = exports.Mutation = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const graphql_tag_1 = tslib_1.__importDefault(require("graphql-tag"));
6
+ const NewAccountItem = (0, graphql_tag_1.default) `
7
+ input NewAccountItem {
8
+ name: String!
9
+ description: String
10
+ }
11
+ `;
12
+ const AccountItemList = (0, graphql_tag_1.default) `
13
+ type AccountItemList {
14
+ items: [AccountItem]
15
+ total: Int
16
+ }
17
+ `;
18
+ const AccountItemPatch = (0, graphql_tag_1.default) `
19
+ input AccountItemPatch {
20
+ id: String
21
+ name: String
22
+ description: String
23
+ cuFlag: String
24
+ }
25
+ `;
26
+ const AccountItem = (0, graphql_tag_1.default) `
27
+ type AccountItem {
28
+ id: String
29
+ name: String
30
+ domain: Domain
31
+ description: String
32
+ updater: User
33
+ creator: User
34
+ updatedAt: String
35
+ createdAt: String
36
+ }
37
+ `;
38
+ exports.Mutation = `
39
+ createAccountItem(
40
+ accountingId: String!
41
+ item: NewAccountItem!
42
+ ): AccountItem
43
+
44
+ updateAccountItem(
45
+ accountingId: String!
46
+ patch: AccountItemPatch!
47
+ ): AccountItem
48
+ `;
49
+ exports.Query = `
50
+ getAccountItems(
51
+ accountingId: String!
52
+ filters: [Filter]
53
+ pagination: Pagination
54
+ sortings: [Sorting]
55
+ ): AccountItemList
56
+
57
+ getAccountItem(
58
+ accountingId: String!
59
+ itemId: String!
60
+ ): AccountItem
61
+ `;
62
+ exports.Types = [AccountItem, NewAccountItem, AccountItemPatch, AccountItemList];
63
+ //# sourceMappingURL=item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item.js","sourceRoot":"","sources":["../../../../server/graphql/types/accounting-api/item.ts"],"names":[],"mappings":";;;;AAAA,sEAA6B;AAE7B,MAAM,cAAc,GAAG,IAAA,qBAAG,EAAA;;;;;CAKzB,CAAA;AAED,MAAM,eAAe,GAAG,IAAA,qBAAG,EAAA;;;;;CAK1B,CAAA;AAED,MAAM,gBAAgB,GAAG,IAAA,qBAAG,EAAA;;;;;;;CAO3B,CAAA;AAED,MAAM,WAAW,GAAG,IAAA,qBAAG,EAAA;;;;;;;;;;;CAWtB,CAAA;AACY,QAAA,QAAQ,GAAG;;;;;;;;;;CAUvB,CAAA;AAEY,QAAA,KAAK,GAAG;;;;;;;;;;;;CAYpB,CAAA;AAEY,QAAA,KAAK,GAAG,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAA","sourcesContent":["import gql from 'graphql-tag'\n\nconst NewAccountItem = gql`\n input NewAccountItem {\n name: String!\n description: String\n }\n`\n\nconst AccountItemList = gql`\n type AccountItemList {\n items: [AccountItem]\n total: Int\n }\n`\n\nconst AccountItemPatch = gql`\n input AccountItemPatch {\n id: String\n name: String\n description: String\n cuFlag: String\n }\n`\n\nconst AccountItem = gql`\n type AccountItem {\n id: String\n name: String\n domain: Domain\n description: String\n updater: User\n creator: User\n updatedAt: String\n createdAt: String\n }\n`\nexport const Mutation = `\n createAccountItem(\n accountingId: String!\n item: NewAccountItem!\n ): AccountItem\n\n updateAccountItem(\n accountingId: String!\n patch: AccountItemPatch!\n ): AccountItem\n`\n\nexport const Query = `\n getAccountItems(\n accountingId: String!\n filters: [Filter]\n pagination: Pagination\n sortings: [Sorting] \n ): AccountItemList\n \n getAccountItem(\n accountingId: String!\n itemId: String!\n ): AccountItem\n`\n\nexport const Types = [AccountItem, NewAccountItem, AccountItemPatch, AccountItemList]\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const Query = "\n getAccountPurchaseOrders(\n accountingId: String!\n filters: [Filter]\n pagination: Pagination\n sortings: [Sorting] \n ): AccountPurchaseOrderList\n \n";
2
+ export declare const Types: import("graphql").DocumentNode[];
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Types = exports.Query = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const graphql_tag_1 = tslib_1.__importDefault(require("graphql-tag"));
6
+ const AccountPurchaseOrderList = (0, graphql_tag_1.default) `
7
+ type AccountPurchaseOrderList {
8
+ items: [AccountPurchaseOrder]
9
+ total: Int
10
+ }
11
+ `;
12
+ const AccountPurchaseOrder = (0, graphql_tag_1.default) `
13
+ type AccountPurchaseOrder {
14
+ id: String
15
+ name: String
16
+ domain: Domain
17
+ description: String
18
+ updater: User
19
+ creator: User
20
+ updatedAt: String
21
+ createdAt: String
22
+ }
23
+ `;
24
+ exports.Query = `
25
+ getAccountPurchaseOrders(
26
+ accountingId: String!
27
+ filters: [Filter]
28
+ pagination: Pagination
29
+ sortings: [Sorting]
30
+ ): AccountPurchaseOrderList
31
+
32
+ `;
33
+ exports.Types = [AccountPurchaseOrder, AccountPurchaseOrderList];
34
+ //# sourceMappingURL=purchase-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purchase-order.js","sourceRoot":"","sources":["../../../../server/graphql/types/accounting-api/purchase-order.ts"],"names":[],"mappings":";;;;AAAA,sEAA6B;AAE7B,MAAM,wBAAwB,GAAG,IAAA,qBAAG,EAAA;;;;;CAKnC,CAAA;AACD,MAAM,oBAAoB,GAAG,IAAA,qBAAG,EAAA;;;;;;;;;;;CAW/B,CAAA;AACY,QAAA,KAAK,GAAG;;;;;;;;CAQpB,CAAA;AACY,QAAA,KAAK,GAAG,CAAC,oBAAoB,EAAE,wBAAwB,CAAC,CAAA","sourcesContent":["import gql from 'graphql-tag'\n\nconst AccountPurchaseOrderList = gql`\n type AccountPurchaseOrderList {\n items: [AccountPurchaseOrder]\n total: Int\n }\n`\nconst AccountPurchaseOrder = gql`\n type AccountPurchaseOrder {\n id: String\n name: String\n domain: Domain\n description: String\n updater: User\n creator: User\n updatedAt: String\n createdAt: String\n }\n`\nexport const Query = `\n getAccountPurchaseOrders(\n accountingId: String!\n filters: [Filter]\n pagination: Pagination\n sortings: [Sorting] \n ): AccountPurchaseOrderList\n \n`\nexport const Types = [AccountPurchaseOrder, AccountPurchaseOrderList]\n"]}
@@ -0,0 +1,3 @@
1
+ export declare const queries: string[];
2
+ export declare const mutations: string[];
3
+ export declare const types: import("graphql").DocumentNode[];
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.types = exports.mutations = exports.queries = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const Accounting = tslib_1.__importStar(require("./accounting"));
6
+ const Invoice = tslib_1.__importStar(require("./accounting-api/invoice"));
7
+ const Item = tslib_1.__importStar(require("./accounting-api/item"));
8
+ const PurchaseOrder = tslib_1.__importStar(require("./accounting-api/purchase-order"));
9
+ exports.queries = [Accounting.Query, Invoice.Query, Item.Query, PurchaseOrder.Query];
10
+ exports.mutations = [Accounting.Mutation, Invoice.Mutation, Item.Mutation];
11
+ exports.types = [...Accounting.Types, ...Invoice.Types, ...Item.Types, ...PurchaseOrder.Types];
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/graphql/types/index.ts"],"names":[],"mappings":";;;;AAAA,iEAA0C;AAC1C,0EAAmD;AACnD,oEAA6C;AAC7C,uFAAgE;AAEnD,QAAA,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAA;AAE5E,QAAA,SAAS,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;AAElE,QAAA,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA","sourcesContent":["import * as Accounting from './accounting'\nimport * as Invoice from './accounting-api/invoice'\nimport * as Item from './accounting-api/item'\nimport * as PurchaseOrder from './accounting-api/purchase-order'\n\nexport const queries = [Accounting.Query, Invoice.Query, Item.Query, PurchaseOrder.Query]\n\nexport const mutations = [Accounting.Mutation, Invoice.Mutation, Item.Mutation]\n\nexport const types = [...Accounting.Types, ...Invoice.Types, ...Item.Types, ...PurchaseOrder.Types]\n"]}
@@ -0,0 +1,6 @@
1
+ export * from './entities';
2
+ export * from './migrations';
3
+ export * from './graphql';
4
+ export * from './controllers';
5
+ import './routes';
6
+ import './engine';
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./entities"), exports);
5
+ tslib_1.__exportStar(require("./migrations"), exports);
6
+ tslib_1.__exportStar(require("./graphql"), exports);
7
+ tslib_1.__exportStar(require("./controllers"), exports);
8
+ require("./routes");
9
+ require("./engine");
10
+ process.on('bootstrap-module-start', async ({ app, config, client }) => { });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":";;;AAAA,qDAA0B;AAC1B,uDAA4B;AAC5B,oDAAyB;AACzB,wDAA6B;AAE7B,oBAAiB;AACjB,oBAAiB;AAEjB,OAAO,CAAC,EAAE,CAAC,wBAA+B,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAO,EAAE,EAAE,GAAE,CAAC,CAAC,CAAA","sourcesContent":["export * from './entities'\nexport * from './migrations'\nexport * from './graphql'\nexport * from './controllers'\n\nimport './routes'\nimport './engine'\n\nprocess.on('bootstrap-module-start' as any, async ({ app, config, client }: any) => {})\n"]}
@@ -0,0 +1 @@
1
+ export declare var migrations: any[];
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.migrations = void 0;
4
+ const glob = require('glob');
5
+ const path = require('path');
6
+ exports.migrations = [];
7
+ glob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function (file) {
8
+ if (file.indexOf('index.js') !== -1)
9
+ return;
10
+ exports.migrations = exports.migrations.concat(Object.values(require(path.resolve(file))) || []);
11
+ });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/migrations/index.ts"],"names":[],"mappings":";;;AAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAEjB,QAAA,UAAU,GAAG,EAAE,CAAA;AAE1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAS,IAAI;IACzE,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAAE,OAAM;IAC3C,kBAAU,GAAG,kBAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAClF,CAAC,CAAC,CAAA","sourcesContent":["const glob = require('glob')\nconst path = require('path')\n\nexport var migrations = []\n\nglob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function(file) {\n if (file.indexOf('index.js') !== -1) return\n migrations = migrations.concat(Object.values(require(path.resolve(file))) || [])\n})\n"]}
@@ -0,0 +1 @@
1
+ export declare const xeroPrivateRouter: any;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.xeroPrivateRouter = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const koa_router_1 = tslib_1.__importDefault(require("koa-router"));
6
+ const env_1 = require("@things-factory/env");
7
+ const shell_1 = require("@things-factory/shell");
8
+ const isPathBaseDomain = !env_1.config.get('subdomain');
9
+ const debug = require('debug')('things-factory:integration-accounting:xero-router');
10
+ exports.xeroPrivateRouter = new koa_router_1.default();
11
+ exports.xeroPrivateRouter.get(`${isPathBaseDomain ? '/:domainType/:domain' : ''}/callback-private-xero`, async (context, next) => {
12
+ const { domain } = context.state;
13
+ const xeroAccountingCookies = context.cookies.get('xero-accounting');
14
+ const { id, status, message } = JSON.parse(xeroAccountingCookies);
15
+ context.redirect(`${(0, shell_1.getRedirectSubdomainPath)(context, domain)}account-xero/${id}/connect-callback?status=${status}&message=${message}`);
16
+ });
17
+ //# sourceMappingURL=xero-private-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xero-private-router.js","sourceRoot":"","sources":["../../server/routers/xero-private-router.ts"],"names":[],"mappings":";;;;AAAA,oEAA+B;AAE/B,6CAA4C;AAC5C,iDAAgE;AAEhE,MAAM,gBAAgB,GAAG,CAAC,YAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;AAEjD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,mDAAmD,CAAC,CAAA;AAEtE,QAAA,iBAAiB,GAAG,IAAI,oBAAM,EAAE,CAAA;AAE7C,yBAAiB,CAAC,GAAG,CACnB,GAAG,gBAAgB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,wBAAwB,EACzE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IACtB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAEhC,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IACpE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;IAEjE,OAAO,CAAC,QAAQ,CACd,GAAG,IAAA,gCAAwB,EACzB,OAAO,EACP,MAAM,CACP,gBAAgB,EAAE,4BAA4B,MAAM,YAAY,OAAO,EAAE,CAC3E,CAAA;AACH,CAAC,CACF,CAAA","sourcesContent":["import Router from 'koa-router'\n\nimport { config } from '@things-factory/env'\nimport { getRedirectSubdomainPath } from '@things-factory/shell'\n\nconst isPathBaseDomain = !config.get('subdomain')\n\nconst debug = require('debug')('things-factory:integration-accounting:xero-router')\n\nexport const xeroPrivateRouter = new Router()\n\nxeroPrivateRouter.get(\n `${isPathBaseDomain ? '/:domainType/:domain' : ''}/callback-private-xero`,\n async (context, next) => {\n const { domain } = context.state\n\n const xeroAccountingCookies = context.cookies.get('xero-accounting')\n const { id, status, message } = JSON.parse(xeroAccountingCookies)\n\n context.redirect(\n `${getRedirectSubdomainPath(\n context,\n domain\n )}account-xero/${id}/connect-callback?status=${status}&message=${message}`\n )\n }\n)\n"]}
@@ -0,0 +1 @@
1
+ export declare const xeroRouter: any;
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.xeroRouter = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const koa_router_1 = tslib_1.__importDefault(require("koa-router"));
6
+ const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
7
+ const auth_base_1 = require("@things-factory/auth-base");
8
+ const env_1 = require("@things-factory/env");
9
+ const shell_1 = require("@things-factory/shell");
10
+ const utils_1 = require("@things-factory/utils");
11
+ const accounting_api_1 = require("../controllers/accounting-api");
12
+ const entities_1 = require("../entities");
13
+ const { apiKey, apiSecret, hostname, callback: redirect_uri } = env_1.config.get('accountingIntegrationXero', {});
14
+ const debug = require('debug')('things-factory:integration-accounting:xero-router');
15
+ exports.xeroRouter = new koa_router_1.default();
16
+ exports.xeroRouter.get('/callback-xero', async (context, next) => {
17
+ try {
18
+ const { code, state: nonce } = context.query;
19
+ const verificationTokenRepository = (0, shell_1.getRepository)(auth_base_1.VerificationToken);
20
+ var verification = await verificationTokenRepository.findOne({
21
+ where: {
22
+ token: nonce,
23
+ type: auth_base_1.VerificationTokenType.REQUEST_ACCESS_TOKEN
24
+ }
25
+ });
26
+ const { userId, suppliment: accountId } = verification;
27
+ await verificationTokenRepository.delete({
28
+ userId,
29
+ token: nonce,
30
+ type: auth_base_1.VerificationTokenType.REQUEST_ACCESS_TOKEN
31
+ });
32
+ var account = await accounting_api_1.AccountingAPI.getAccounting(accountId);
33
+ const connectRequestData = {
34
+ grant_type: 'authorization_code',
35
+ code,
36
+ redirect_uri
37
+ };
38
+ const connectResponse = await (0, node_fetch_1.default)(`https://identity.xero.com/connect/token`, {
39
+ method: 'post',
40
+ headers: {
41
+ Authorization: `Basic ${Buffer.from(apiKey + ':' + apiSecret).toString('base64')}`,
42
+ 'Content-Type': 'application/x-www-form-urlencoded'
43
+ },
44
+ body: Object.entries(connectRequestData)
45
+ .map(([key, value]) => encodeURIComponent(key) + '=' + encodeURIComponent(value))
46
+ .join('&')
47
+ });
48
+ if (!connectResponse.ok) {
49
+ throw new Error(`get account information failed: ${await connectResponse.text()}`);
50
+ }
51
+ const body = await connectResponse.json();
52
+ const { access_token /* token used to call the API */, id_token /* token containing user identity details (only returned if OpenID Connect scopes are requested) */, expires_in /* amount of seconds until the access token expires */, token_type: tokenType /* must be Bearer */, refresh_token
53
+ /* token used to refresh the access token once it has expired (only returned if the offline_access scope is requested).
54
+ */
55
+ } = body;
56
+ /* decode access_token to get auth-event-id */
57
+ const accessInfo = (0, utils_1.parseJwt)(access_token);
58
+ const { authentication_event_id, exp } = accessInfo;
59
+ /* get connections through the authentication_event_id */
60
+ const connectionsResponse = await (0, node_fetch_1.default)(`https://api.xero.com/connections?authEventId=${authentication_event_id}`, {
61
+ method: 'get',
62
+ headers: {
63
+ Authorization: `Bearer ${access_token}`,
64
+ 'Content-Type': 'application/json'
65
+ }
66
+ });
67
+ if (!connectionsResponse.ok) {
68
+ context.throw(connectionsResponse.status, `get connection list failed: ${await connectionsResponse.text()}`);
69
+ }
70
+ const connections = await connectionsResponse.json();
71
+ debug('connections', connections);
72
+ var connection = connections[0];
73
+ if (!connection) {
74
+ context.throw(400, 'connection not found for this access token');
75
+ }
76
+ var patch = {
77
+ name: connection.tenantName,
78
+ accessToken: access_token,
79
+ refreshToken: refresh_token,
80
+ accessInfo: JSON.stringify(accessInfo, null, 2),
81
+ accountInfo: JSON.stringify(connection, null, 2),
82
+ accountId: connection.tenantId,
83
+ status: accounting_api_1.ACCOUNTING_STATUS.ACTIVE,
84
+ tokenType,
85
+ expiresIn: new Date(exp * 1000)
86
+ };
87
+ var user = await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({ id: userId });
88
+ account = await (0, shell_1.getRepository)(entities_1.Account).save(Object.assign(Object.assign(Object.assign({}, account), patch), { updater: user }));
89
+ context.cookies.set('xero-accounting', JSON.stringify(Object.assign(Object.assign({}, account), { message: 'success to activate' })), {
90
+ httpOnly: true
91
+ });
92
+ context.redirect((0, shell_1.getUrlFromContext)(context, '/callback-private-xero'));
93
+ }
94
+ catch (err) {
95
+ var message = err.message;
96
+ if (account) {
97
+ context.cookies.set('xero-accounting', JSON.stringify(Object.assign(Object.assign({}, account), { message })), {
98
+ httpOnly: true
99
+ });
100
+ context.redirect((0, shell_1.getUrlFromContext)(context, '/callback-private-xero'));
101
+ return;
102
+ }
103
+ throw err;
104
+ }
105
+ });
106
+ exports.xeroRouter.post('/webhook-xero', async (context, next) => {
107
+ context.status = 200;
108
+ });
109
+ //# sourceMappingURL=xero-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xero-router.js","sourceRoot":"","sources":["../../server/routers/xero-router.ts"],"names":[],"mappings":"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","sourcesContent":["import Router from 'koa-router'\nimport fetch from 'node-fetch'\n\nimport { User, VerificationToken, VerificationTokenType } from '@things-factory/auth-base'\nimport { config } from '@things-factory/env'\nimport { getRepository, getUrlFromContext } from '@things-factory/shell'\nimport { parseJwt } from '@things-factory/utils'\n\nimport { ACCOUNTING_STATUS, AccountingAPI } from '../controllers/accounting-api'\nimport { Account } from '../entities'\n\nconst { apiKey, apiSecret, hostname, callback: redirect_uri } = config.get('accountingIntegrationXero', {})\n\nconst debug = require('debug')('things-factory:integration-accounting:xero-router')\n\nexport const xeroRouter = new Router()\n\nxeroRouter.get('/callback-xero', async (context, next) => {\n try {\n const { code, state: nonce } = context.query\n\n const verificationTokenRepository = getRepository(VerificationToken)\n\n var verification: VerificationToken = await verificationTokenRepository.findOne({\n where: {\n token: nonce,\n type: VerificationTokenType.REQUEST_ACCESS_TOKEN\n }\n })\n\n const { userId, suppliment: accountId } = verification\n\n await verificationTokenRepository.delete({\n userId,\n token: nonce,\n type: VerificationTokenType.REQUEST_ACCESS_TOKEN\n })\n\n var account = await AccountingAPI.getAccounting(accountId)\n const connectRequestData = {\n grant_type: 'authorization_code',\n code,\n redirect_uri\n }\n\n const connectResponse = 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(connectRequestData)\n .map(([key, value]) => encodeURIComponent(key) + '=' + encodeURIComponent(value))\n .join('&')\n })\n\n if (!connectResponse.ok) {\n throw new Error(`get account information failed: ${await connectResponse.text()}`)\n }\n\n const body = await connectResponse.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 /* decode access_token to get auth-event-id */\n const accessInfo = parseJwt(access_token)\n const { authentication_event_id, exp } = accessInfo\n\n /* get connections through the authentication_event_id */\n const connectionsResponse = await fetch(`https://api.xero.com/connections?authEventId=${authentication_event_id}`, {\n method: 'get',\n headers: {\n Authorization: `Bearer ${access_token}`,\n 'Content-Type': 'application/json'\n }\n })\n\n if (!connectionsResponse.ok) {\n context.throw(connectionsResponse.status, `get connection list failed: ${await connectionsResponse.text()}`)\n }\n\n const connections = await connectionsResponse.json()\n debug('connections', connections)\n\n var connection = connections[0]\n if (!connection) {\n context.throw(400, 'connection not found for this access token')\n }\n\n var patch = {\n name: connection.tenantName,\n accessToken: access_token,\n refreshToken: refresh_token,\n accessInfo: JSON.stringify(accessInfo, null, 2),\n accountInfo: JSON.stringify(connection, null, 2),\n accountId: connection.tenantId,\n status: ACCOUNTING_STATUS.ACTIVE,\n tokenType,\n expiresIn: new Date(exp * 1000)\n }\n\n var user = await getRepository(User).findOneBy({ id: userId })\n\n account = await getRepository(Account).save({\n ...account,\n ...patch,\n updater: user\n })\n\n context.cookies.set(\n 'xero-accounting',\n JSON.stringify({\n ...account,\n message: 'success to activate'\n }),\n {\n httpOnly: true\n }\n )\n\n context.redirect(getUrlFromContext(context, '/callback-private-xero'))\n } catch (err) {\n var message: string = err.message\n\n if (account) {\n context.cookies.set(\n 'xero-accounting',\n JSON.stringify({\n ...account,\n message\n }),\n {\n httpOnly: true\n }\n )\n\n context.redirect(getUrlFromContext(context, '/callback-private-xero'))\n return\n }\n\n throw err\n }\n})\n\nxeroRouter.post('/webhook-xero', async (context, next) => {\n context.status = 200\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const xero_private_router_1 = require("./routers/xero-private-router");
4
+ const xero_router_1 = require("./routers/xero-router");
5
+ process.on('bootstrap-module-global-public-route', (app, globalPublicRouter) => {
6
+ globalPublicRouter.use(xero_router_1.xeroRouter.routes(), xero_router_1.xeroRouter.allowedMethods());
7
+ });
8
+ process.on('bootstrap-module-domain-private-route', (app, domainPrivateRouter) => {
9
+ domainPrivateRouter.use(xero_private_router_1.xeroPrivateRouter.routes(), xero_private_router_1.xeroPrivateRouter.allowedMethods());
10
+ });
11
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../server/routes.ts"],"names":[],"mappings":";;AAAA,uEAAiE;AACjE,uDAAkD;AAElD,OAAO,CAAC,EAAE,CAAC,sCAA6C,EAAE,CAAC,GAAG,EAAE,kBAAkB,EAAE,EAAE;IACpF,kBAAkB,CAAC,GAAG,CAAC,wBAAU,CAAC,MAAM,EAAE,EAAE,wBAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AAC1E,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,uCAA8C,EAAE,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE;IACtF,mBAAmB,CAAC,GAAG,CAAC,uCAAiB,CAAC,MAAM,EAAE,EAAE,uCAAiB,CAAC,cAAc,EAAE,CAAC,CAAA;AACzF,CAAC,CAAC,CAAA","sourcesContent":["import { xeroPrivateRouter } from './routers/xero-private-router'\nimport { xeroRouter } from './routers/xero-router'\n\nprocess.on('bootstrap-module-global-public-route' as any, (app, globalPublicRouter) => {\n globalPublicRouter.use(xeroRouter.routes(), xeroRouter.allowedMethods())\n})\n\nprocess.on('bootstrap-module-domain-private-route' as any, (app, domainPrivateRouter) => {\n domainPrivateRouter.use(xeroPrivateRouter.routes(), xeroPrivateRouter.allowedMethods())\n})\n"]}