@t4h.framework/amber 0.0.0 → 0.2.0

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 (124) hide show
  1. package/.ai/skills/framework-amber/SKILL.md +225 -0
  2. package/LICENSE +21 -0
  3. package/README.md +78 -68
  4. package/dist/activities/AbstractAmberHttpRequestActivity.d.ts +9 -0
  5. package/dist/activities/AbstractAmberHttpRequestActivity.d.ts.map +1 -0
  6. package/dist/activities/AbstractAmberHttpRequestActivity.js +21 -0
  7. package/dist/activities/AbstractAmberHttpRequestActivity.js.map +1 -0
  8. package/dist/activities/AmberTabulateServiceActivity.d.ts +10 -0
  9. package/dist/activities/AmberTabulateServiceActivity.d.ts.map +1 -0
  10. package/dist/activities/AmberTabulateServiceActivity.js +20 -0
  11. package/dist/activities/AmberTabulateServiceActivity.js.map +1 -0
  12. package/dist/activities/AmberTransferServiceActivity.d.ts +86 -0
  13. package/dist/activities/AmberTransferServiceActivity.d.ts.map +1 -0
  14. package/dist/activities/AmberTransferServiceActivity.js +95 -0
  15. package/dist/activities/AmberTransferServiceActivity.js.map +1 -0
  16. package/dist/activities/AmberUpdateServiceActivity.d.ts +10 -0
  17. package/dist/activities/AmberUpdateServiceActivity.d.ts.map +1 -0
  18. package/dist/activities/AmberUpdateServiceActivity.js +23 -0
  19. package/dist/activities/AmberUpdateServiceActivity.js.map +1 -0
  20. package/dist/activities/ticket/AmberCommentTicketActivity.d.ts +10 -0
  21. package/dist/activities/ticket/AmberCommentTicketActivity.d.ts.map +1 -0
  22. package/dist/activities/ticket/AmberCommentTicketActivity.js +19 -0
  23. package/dist/activities/ticket/AmberCommentTicketActivity.js.map +1 -0
  24. package/dist/activities/ticket/AmberCreateTicketActivity.d.ts +13 -0
  25. package/dist/activities/ticket/AmberCreateTicketActivity.d.ts.map +1 -0
  26. package/dist/activities/ticket/AmberCreateTicketActivity.js +47 -0
  27. package/dist/activities/ticket/AmberCreateTicketActivity.js.map +1 -0
  28. package/dist/activities/ticket/AmberFindTicketFieldsActivity.d.ts +7 -0
  29. package/dist/activities/ticket/AmberFindTicketFieldsActivity.d.ts.map +1 -0
  30. package/dist/activities/ticket/AmberFindTicketFieldsActivity.js +20 -0
  31. package/dist/activities/ticket/AmberFindTicketFieldsActivity.js.map +1 -0
  32. package/dist/activities/ticket/AmberGetTicketActivity.d.ts +7 -0
  33. package/dist/activities/ticket/AmberGetTicketActivity.d.ts.map +1 -0
  34. package/dist/activities/ticket/AmberGetTicketActivity.js +27 -0
  35. package/dist/activities/ticket/AmberGetTicketActivity.js.map +1 -0
  36. package/dist/activities/ticket/AmberInteractTicketActivity.d.ts +10 -0
  37. package/dist/activities/ticket/AmberInteractTicketActivity.d.ts.map +1 -0
  38. package/dist/activities/ticket/AmberInteractTicketActivity.js +20 -0
  39. package/dist/activities/ticket/AmberInteractTicketActivity.js.map +1 -0
  40. package/dist/activities/ticket/AmberLockTicketActivity.d.ts +11 -0
  41. package/dist/activities/ticket/AmberLockTicketActivity.d.ts.map +1 -0
  42. package/dist/activities/ticket/AmberLockTicketActivity.js +29 -0
  43. package/dist/activities/ticket/AmberLockTicketActivity.js.map +1 -0
  44. package/dist/activities/ticket/AmberReleaseTicketLockActivity.d.ts +10 -0
  45. package/dist/activities/ticket/AmberReleaseTicketLockActivity.d.ts.map +1 -0
  46. package/dist/activities/ticket/AmberReleaseTicketLockActivity.js +27 -0
  47. package/dist/activities/ticket/AmberReleaseTicketLockActivity.js.map +1 -0
  48. package/dist/activities/ticket/AmberUpdateTicketFieldValueActivity.d.ts +14 -0
  49. package/dist/activities/ticket/AmberUpdateTicketFieldValueActivity.d.ts.map +1 -0
  50. package/dist/activities/ticket/AmberUpdateTicketFieldValueActivity.js +19 -0
  51. package/dist/activities/ticket/AmberUpdateTicketFieldValueActivity.js.map +1 -0
  52. package/dist/constants/urls.d.ts +3 -0
  53. package/dist/constants/urls.d.ts.map +1 -0
  54. package/dist/constants/urls.js +3 -0
  55. package/dist/constants/urls.js.map +1 -0
  56. package/dist/constants/webhook.d.ts +12 -0
  57. package/dist/constants/webhook.d.ts.map +1 -0
  58. package/dist/constants/webhook.js +11 -0
  59. package/dist/constants/webhook.js.map +1 -0
  60. package/dist/errors/AmberRequestError.d.ts +23 -0
  61. package/dist/errors/AmberRequestError.d.ts.map +1 -0
  62. package/dist/errors/AmberRequestError.js +43 -0
  63. package/dist/errors/AmberRequestError.js.map +1 -0
  64. package/dist/index.d.ts +28 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +20 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/inputs/AmberServiceTabulateEvent.d.ts +75 -0
  69. package/dist/inputs/AmberServiceTabulateEvent.d.ts.map +1 -0
  70. package/dist/inputs/AmberServiceTabulateEvent.js +26 -0
  71. package/dist/inputs/AmberServiceTabulateEvent.js.map +1 -0
  72. package/dist/inputs/AmberWebhookEvent.d.ts +19 -0
  73. package/dist/inputs/AmberWebhookEvent.d.ts.map +1 -0
  74. package/dist/inputs/AmberWebhookEvent.js +15 -0
  75. package/dist/inputs/AmberWebhookEvent.js.map +1 -0
  76. package/dist/models/Amber.d.ts +19 -0
  77. package/dist/models/Amber.d.ts.map +1 -0
  78. package/dist/models/Amber.js +36 -0
  79. package/dist/models/Amber.js.map +1 -0
  80. package/dist/models/Service.d.ts +26 -0
  81. package/dist/models/Service.d.ts.map +1 -0
  82. package/dist/models/Service.js +53 -0
  83. package/dist/models/Service.js.map +1 -0
  84. package/dist/models/Ticket.d.ts +27 -0
  85. package/dist/models/Ticket.d.ts.map +1 -0
  86. package/dist/models/Ticket.js +51 -0
  87. package/dist/models/Ticket.js.map +1 -0
  88. package/dist/tools/AmberWebhook.d.ts +22 -0
  89. package/dist/tools/AmberWebhook.d.ts.map +1 -0
  90. package/dist/tools/AmberWebhook.js +51 -0
  91. package/dist/tools/AmberWebhook.js.map +1 -0
  92. package/dist/typings/ServiceTabulate.d.ts +13 -0
  93. package/dist/typings/ServiceTabulate.d.ts.map +1 -0
  94. package/dist/typings/ServiceTabulate.js +2 -0
  95. package/dist/typings/ServiceTabulate.js.map +1 -0
  96. package/dist/typings/ServiceTicket.d.ts +46 -0
  97. package/dist/typings/ServiceTicket.d.ts.map +1 -0
  98. package/dist/typings/ServiceTicket.js +2 -0
  99. package/dist/typings/ServiceTicket.js.map +1 -0
  100. package/dist/typings/ServiceTicketComment.d.ts +6 -0
  101. package/dist/typings/ServiceTicketComment.d.ts.map +1 -0
  102. package/dist/typings/ServiceTicketComment.js +2 -0
  103. package/dist/typings/ServiceTicketComment.js.map +1 -0
  104. package/dist/typings/ServiceTicketField.d.ts +12 -0
  105. package/dist/typings/ServiceTicketField.d.ts.map +1 -0
  106. package/dist/typings/ServiceTicketField.js +2 -0
  107. package/dist/typings/ServiceTicketField.js.map +1 -0
  108. package/dist/typings/ServiceTicketInteraction.d.ts +24 -0
  109. package/dist/typings/ServiceTicketInteraction.d.ts.map +1 -0
  110. package/dist/typings/ServiceTicketInteraction.js +2 -0
  111. package/dist/typings/ServiceTicketInteraction.js.map +1 -0
  112. package/dist/typings/ServiceTicketLock.d.ts +6 -0
  113. package/dist/typings/ServiceTicketLock.d.ts.map +1 -0
  114. package/dist/typings/ServiceTicketLock.js +2 -0
  115. package/dist/typings/ServiceTicketLock.js.map +1 -0
  116. package/dist/typings/ServiceTransfer.d.ts +14 -0
  117. package/dist/typings/ServiceTransfer.d.ts.map +1 -0
  118. package/dist/typings/ServiceTransfer.js +2 -0
  119. package/dist/typings/ServiceTransfer.js.map +1 -0
  120. package/dist/typings/ServiceUpdate.d.ts +6 -0
  121. package/dist/typings/ServiceUpdate.d.ts.map +1 -0
  122. package/dist/typings/ServiceUpdate.js +2 -0
  123. package/dist/typings/ServiceUpdate.js.map +1 -0
  124. package/package.json +10 -7
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Amber answered a request with a status other than 200. The message carries
3
+ * the status and the response body, which is where Amber explains what it
4
+ * refused (`{"errors":{"$.tabulationOption":["Not found tabulation option"]}}`),
5
+ * so the reason survives loggers that print only `message`.
6
+ */
7
+ export declare class AmberRequestError extends Error {
8
+ readonly status: number;
9
+ readonly body: string | undefined;
10
+ constructor(message: string, status: number, body?: string);
11
+ /**
12
+ * Builds the error from a response whose body is still unread. A body that
13
+ * cannot be read is dropped, never turned into a second error.
14
+ */
15
+ static from(message: string, response: {
16
+ status: number;
17
+ body: {
18
+ text(): Promise<string>;
19
+ };
20
+ }): Promise<AmberRequestError>;
21
+ private static trim;
22
+ }
23
+ //# sourceMappingURL=AmberRequestError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmberRequestError.d.ts","sourceRoot":"","sources":["../../src/errors/AmberRequestError.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,SAAgB,MAAM,EAAE,MAAM,CAAA;IAC9B,SAAgB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;gBAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;IAe1D;;;OAGG;WACiB,IAAI,CACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE;YAAE,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;SAAE,CAAA;KAAE,GAC9D,OAAO,CAAC,iBAAiB,CAAC;IAY7B,OAAO,CAAC,MAAM,CAAC,IAAI;CASpB"}
@@ -0,0 +1,43 @@
1
+ const MAX_BODY_LENGTH = 2_000;
2
+ /**
3
+ * Amber answered a request with a status other than 200. The message carries
4
+ * the status and the response body, which is where Amber explains what it
5
+ * refused (`{"errors":{"$.tabulationOption":["Not found tabulation option"]}}`),
6
+ * so the reason survives loggers that print only `message`.
7
+ */
8
+ export class AmberRequestError extends Error {
9
+ status;
10
+ body;
11
+ constructor(message, status, body) {
12
+ const trimmed = AmberRequestError.trim(body);
13
+ super(trimmed
14
+ ? `${message}: Amber responded ${status} ${trimmed}`
15
+ : `${message}: Amber responded ${status}`, { cause: { httpStatusCode: status, body: trimmed } });
16
+ this.name = 'AmberRequestError';
17
+ this.status = status;
18
+ this.body = trimmed;
19
+ }
20
+ /**
21
+ * Builds the error from a response whose body is still unread. A body that
22
+ * cannot be read is dropped, never turned into a second error.
23
+ */
24
+ static async from(message, response) {
25
+ let body;
26
+ try {
27
+ body = await response.body.text();
28
+ }
29
+ catch {
30
+ body = undefined;
31
+ }
32
+ return new AmberRequestError(message, response.status, body);
33
+ }
34
+ static trim(body) {
35
+ const text = body?.trim();
36
+ if (!text)
37
+ return undefined;
38
+ return text.length > MAX_BODY_LENGTH
39
+ ? `${text.slice(0, MAX_BODY_LENGTH)}…`
40
+ : text;
41
+ }
42
+ }
43
+ //# sourceMappingURL=AmberRequestError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmberRequestError.js","sourceRoot":"","sources":["../../src/errors/AmberRequestError.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,KAAK,CAAA;AAE7B;;;;;GAKG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1B,MAAM,CAAQ;IACd,IAAI,CAAoB;IAExC,YAAY,OAAe,EAAE,MAAc,EAAE,IAAa;QACxD,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE5C,KAAK,CACH,OAAO;YACL,CAAC,CAAC,GAAG,OAAO,qBAAqB,MAAM,IAAI,OAAO,EAAE;YACpD,CAAC,CAAC,GAAG,OAAO,qBAAqB,MAAM,EAAE,EAC3C,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CACrD,CAAA;QAED,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAA;IACrB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,IAAI,CACtB,OAAe,EACf,QAA+D;QAE/D,IAAI,IAAwB,CAAA;QAE5B,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,SAAS,CAAA;QAClB,CAAC;QAED,OAAO,IAAI,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAC9D,CAAC;IAEO,MAAM,CAAC,IAAI,CAAC,IAAa;QAC/B,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,CAAA;QAEzB,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAA;QAE3B,OAAO,IAAI,CAAC,MAAM,GAAG,eAAe;YAClC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG;YACtC,CAAC,CAAC,IAAI,CAAA;IACV,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ export { AMBER_WEBHOOK_EVENT_TYPES, type AmberWebhookEventType, } from './constants/webhook.js';
2
+ export * from './models/Amber.js';
3
+ export * from './models/Service.js';
4
+ export * from './models/Ticket.js';
5
+ export * from './errors/AmberRequestError.js';
6
+ export * from './activities/AbstractAmberHttpRequestActivity.js';
7
+ export * from './activities/AmberTabulateServiceActivity.js';
8
+ export * from './activities/AmberTransferServiceActivity.js';
9
+ export * from './activities/AmberUpdateServiceActivity.js';
10
+ export * from './activities/ticket/AmberCommentTicketActivity.js';
11
+ export * from './activities/ticket/AmberCreateTicketActivity.js';
12
+ export * from './activities/ticket/AmberFindTicketFieldsActivity.js';
13
+ export * from './activities/ticket/AmberGetTicketActivity.js';
14
+ export * from './activities/ticket/AmberInteractTicketActivity.js';
15
+ export * from './activities/ticket/AmberLockTicketActivity.js';
16
+ export * from './activities/ticket/AmberReleaseTicketLockActivity.js';
17
+ export * from './activities/ticket/AmberUpdateTicketFieldValueActivity.js';
18
+ export { AmberServiceTabulateEventSchema, type AmberServiceTabulateEvent, } from './inputs/AmberServiceTabulateEvent.js';
19
+ export { AmberWebhook } from './tools/AmberWebhook.js';
20
+ export type * from './typings/ServiceTabulate.js';
21
+ export type * from './typings/ServiceTicket.js';
22
+ export type * from './typings/ServiceTicketComment.js';
23
+ export type * from './typings/ServiceTicketField.js';
24
+ export type * from './typings/ServiceTicketInteraction.js';
25
+ export type * from './typings/ServiceTicketLock.js';
26
+ export type * from './typings/ServiceTransfer.js';
27
+ export type * from './typings/ServiceUpdate.js';
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAA;AAE/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAElC,cAAc,+BAA+B,CAAA;AAE7C,cAAc,kDAAkD,CAAA;AAEhE,cAAc,8CAA8C,CAAA;AAC5D,cAAc,8CAA8C,CAAA;AAC5D,cAAc,4CAA4C,CAAA;AAE1D,cAAc,mDAAmD,CAAA;AACjE,cAAc,kDAAkD,CAAA;AAChE,cAAc,sDAAsD,CAAA;AACpE,cAAc,+CAA+C,CAAA;AAC7D,cAAc,oDAAoD,CAAA;AAClE,cAAc,gDAAgD,CAAA;AAC9D,cAAc,uDAAuD,CAAA;AACrE,cAAc,4DAA4D,CAAA;AAE1E,OAAO,EACL,+BAA+B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,uCAAuC,CAAA;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD,mBAAmB,8BAA8B,CAAA;AACjD,mBAAmB,4BAA4B,CAAA;AAC/C,mBAAmB,mCAAmC,CAAA;AACtD,mBAAmB,iCAAiC,CAAA;AACpD,mBAAmB,uCAAuC,CAAA;AAC1D,mBAAmB,gCAAgC,CAAA;AACnD,mBAAmB,8BAA8B,CAAA;AACjD,mBAAmB,4BAA4B,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ export { AMBER_WEBHOOK_EVENT_TYPES, } from './constants/webhook.js';
2
+ export * from './models/Amber.js';
3
+ export * from './models/Service.js';
4
+ export * from './models/Ticket.js';
5
+ export * from './errors/AmberRequestError.js';
6
+ export * from './activities/AbstractAmberHttpRequestActivity.js';
7
+ export * from './activities/AmberTabulateServiceActivity.js';
8
+ export * from './activities/AmberTransferServiceActivity.js';
9
+ export * from './activities/AmberUpdateServiceActivity.js';
10
+ export * from './activities/ticket/AmberCommentTicketActivity.js';
11
+ export * from './activities/ticket/AmberCreateTicketActivity.js';
12
+ export * from './activities/ticket/AmberFindTicketFieldsActivity.js';
13
+ export * from './activities/ticket/AmberGetTicketActivity.js';
14
+ export * from './activities/ticket/AmberInteractTicketActivity.js';
15
+ export * from './activities/ticket/AmberLockTicketActivity.js';
16
+ export * from './activities/ticket/AmberReleaseTicketLockActivity.js';
17
+ export * from './activities/ticket/AmberUpdateTicketFieldValueActivity.js';
18
+ export { AmberServiceTabulateEventSchema, } from './inputs/AmberServiceTabulateEvent.js';
19
+ export { AmberWebhook } from './tools/AmberWebhook.js';
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,GAE1B,MAAM,wBAAwB,CAAA;AAE/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAElC,cAAc,+BAA+B,CAAA;AAE7C,cAAc,kDAAkD,CAAA;AAEhE,cAAc,8CAA8C,CAAA;AAC5D,cAAc,8CAA8C,CAAA;AAC5D,cAAc,4CAA4C,CAAA;AAE1D,cAAc,mDAAmD,CAAA;AACjE,cAAc,kDAAkD,CAAA;AAChE,cAAc,sDAAsD,CAAA;AACpE,cAAc,+CAA+C,CAAA;AAC7D,cAAc,oDAAoD,CAAA;AAClE,cAAc,gDAAgD,CAAA;AAC9D,cAAc,uDAAuD,CAAA;AACrE,cAAc,4DAA4D,CAAA;AAE1E,OAAO,EACL,+BAA+B,GAEhC,MAAM,uCAAuC,CAAA;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,75 @@
1
+ import { Type } from 'typebox';
2
+ export declare const AmberServiceTabulateEventDataSchema: Type.TObject<{
3
+ id: Type.TString;
4
+ isInformative: Type.TBoolean;
5
+ tabulationOption: Type.TObject<{
6
+ id: Type.TString;
7
+ name: Type.TString;
8
+ tabulation: Type.TObject<{
9
+ id: Type.TString;
10
+ name: Type.TString;
11
+ }>;
12
+ }>;
13
+ serviceTransfer: Type.TObject<{
14
+ id: Type.TString;
15
+ skill: Type.TObject<{
16
+ id: Type.TString;
17
+ name: Type.TString;
18
+ }>;
19
+ }>;
20
+ notes: Type.TArray<Type.TObject<{
21
+ id: Type.TString;
22
+ type: Type.TUnion<[Type.TLiteral<"public">, Type.TLiteral<"private">]>;
23
+ content: Type.TString;
24
+ createdAt: Type.TString;
25
+ }>>;
26
+ service: Type.TObject<{
27
+ id: Type.TString;
28
+ }>;
29
+ tenant: Type.TObject<{
30
+ id: Type.TString;
31
+ name: Type.TOptional<Type.TString>;
32
+ }>;
33
+ }>;
34
+ export declare const AmberServiceTabulateEventSchema: Type.TObject<{
35
+ specversion: Type.TString;
36
+ id: Type.TString;
37
+ type: Type.TString;
38
+ source: Type.TString;
39
+ subject: Type.TString;
40
+ time: Type.TString;
41
+ data: Type.TObject<{
42
+ id: Type.TString;
43
+ isInformative: Type.TBoolean;
44
+ tabulationOption: Type.TObject<{
45
+ id: Type.TString;
46
+ name: Type.TString;
47
+ tabulation: Type.TObject<{
48
+ id: Type.TString;
49
+ name: Type.TString;
50
+ }>;
51
+ }>;
52
+ serviceTransfer: Type.TObject<{
53
+ id: Type.TString;
54
+ skill: Type.TObject<{
55
+ id: Type.TString;
56
+ name: Type.TString;
57
+ }>;
58
+ }>;
59
+ notes: Type.TArray<Type.TObject<{
60
+ id: Type.TString;
61
+ type: Type.TUnion<[Type.TLiteral<"public">, Type.TLiteral<"private">]>;
62
+ content: Type.TString;
63
+ createdAt: Type.TString;
64
+ }>>;
65
+ service: Type.TObject<{
66
+ id: Type.TString;
67
+ }>;
68
+ tenant: Type.TObject<{
69
+ id: Type.TString;
70
+ name: Type.TOptional<Type.TString>;
71
+ }>;
72
+ }>;
73
+ }>;
74
+ export type AmberServiceTabulateEvent = Type.Static<typeof AmberServiceTabulateEventSchema>;
75
+ //# sourceMappingURL=AmberServiceTabulateEvent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmberServiceTabulateEvent.d.ts","sourceRoot":"","sources":["../../src/inputs/AmberServiceTabulateEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAS9B,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwC/C,CAAA;AAED,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG3C,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,MAAM,CACjD,OAAO,+BAA+B,CACvC,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { Type } from 'typebox';
2
+ import { AmberWebhookServiceRefSchema, AmberWebhookTenantSchema, amberWebhookEventSchema, } from './AmberWebhookEvent.js';
3
+ import { AMBER_WEBHOOK_EVENT_TYPES } from '../constants/webhook.js';
4
+ export const AmberServiceTabulateEventDataSchema = Type.Object({
5
+ id: Type.String(),
6
+ isInformative: Type.Boolean(),
7
+ tabulationOption: Type.Object({
8
+ id: Type.String(),
9
+ name: Type.String(),
10
+ tabulation: Type.Object({ id: Type.String(), name: Type.String() }, { additionalProperties: true }),
11
+ }, { additionalProperties: true }),
12
+ serviceTransfer: Type.Object({
13
+ id: Type.String(),
14
+ skill: Type.Object({ id: Type.String(), name: Type.String() }, { additionalProperties: true }),
15
+ }, { additionalProperties: true }),
16
+ notes: Type.Array(Type.Object({
17
+ id: Type.String(),
18
+ type: Type.Union([Type.Literal('public'), Type.Literal('private')]),
19
+ content: Type.String(),
20
+ createdAt: Type.String(),
21
+ }, { additionalProperties: true })),
22
+ service: AmberWebhookServiceRefSchema,
23
+ tenant: AmberWebhookTenantSchema,
24
+ }, { additionalProperties: true });
25
+ export const AmberServiceTabulateEventSchema = amberWebhookEventSchema(AMBER_WEBHOOK_EVENT_TYPES.serviceTabulate, AmberServiceTabulateEventDataSchema);
26
+ //# sourceMappingURL=AmberServiceTabulateEvent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmberServiceTabulateEvent.js","sourceRoot":"","sources":["../../src/inputs/AmberServiceTabulateEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AAEnE,MAAM,CAAC,MAAM,mCAAmC,GAAG,IAAI,CAAC,MAAM,CAC5D;IACE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;IACjB,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE;IAC7B,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAC3B;QACE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;QACnB,UAAU,EAAE,IAAI,CAAC,MAAM,CACrB,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAC1C,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC/B;KACF,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC/B;IACD,eAAe,EAAE,IAAI,CAAC,MAAM,CAC1B;QACE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;QACjB,KAAK,EAAE,IAAI,CAAC,MAAM,CAChB,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAC1C,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC/B;KACF,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC/B;IACD,KAAK,EAAE,IAAI,CAAC,KAAK,CACf,IAAI,CAAC,MAAM,CACT;QACE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACnE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;QACtB,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;KACzB,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC/B,CACF;IACD,OAAO,EAAE,4BAA4B;IACrC,MAAM,EAAE,wBAAwB;CACjC,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC/B,CAAA;AAED,MAAM,CAAC,MAAM,+BAA+B,GAAG,uBAAuB,CACpE,yBAAyB,CAAC,eAAe,EACzC,mCAAmC,CACpC,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { Type } from 'typebox';
2
+ import type { AmberWebhookEventType } from '../constants/webhook.js';
3
+ export declare const AmberWebhookTenantSchema: Type.TObject<{
4
+ id: Type.TString;
5
+ name: Type.TOptional<Type.TString>;
6
+ }>;
7
+ export declare const AmberWebhookServiceRefSchema: Type.TObject<{
8
+ id: Type.TString;
9
+ }>;
10
+ export declare function amberWebhookEventSchema<TData extends Type.TSchema>(type: AmberWebhookEventType, data: TData): Type.TObject<{
11
+ specversion: Type.TString;
12
+ id: Type.TString;
13
+ type: Type.TString;
14
+ source: Type.TString;
15
+ subject: Type.TString;
16
+ time: Type.TString;
17
+ data: TData;
18
+ }>;
19
+ //# sourceMappingURL=AmberWebhookEvent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmberWebhookEvent.d.ts","sourceRoot":"","sources":["../../src/inputs/AmberWebhookEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAEpE,eAAO,MAAM,wBAAwB;;;EAGpC,CAAA;AAED,eAAO,MAAM,4BAA4B;;EAGxC,CAAA;AAED,wBAAgB,uBAAuB,CAAC,KAAK,SAAS,IAAI,CAAC,OAAO,EAChE,IAAI,EAAE,qBAAqB,EAC3B,IAAI,EAAE,KAAK;;;;;;;;GAcZ"}
@@ -0,0 +1,15 @@
1
+ import { Type } from 'typebox';
2
+ export const AmberWebhookTenantSchema = Type.Object({ id: Type.String(), name: Type.Optional(Type.String()) }, { additionalProperties: true });
3
+ export const AmberWebhookServiceRefSchema = Type.Object({ id: Type.String() }, { additionalProperties: true });
4
+ export function amberWebhookEventSchema(type, data) {
5
+ return Type.Object({
6
+ specversion: Type.String(),
7
+ id: Type.String(),
8
+ type: Type.String({ pattern: `(^|[.:])${type}$` }),
9
+ source: Type.String(),
10
+ subject: Type.String(),
11
+ time: Type.String(),
12
+ data,
13
+ }, { additionalProperties: true });
14
+ }
15
+ //# sourceMappingURL=AmberWebhookEvent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmberWebhookEvent.js","sourceRoot":"","sources":["../../src/inputs/AmberWebhookEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAI9B,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,MAAM,CACjD,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EACzD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC/B,CAAA;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC,MAAM,CACrD,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EACrB,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC/B,CAAA;AAED,MAAM,UAAU,uBAAuB,CACrC,IAA2B,EAC3B,IAAW;IAEX,OAAO,IAAI,CAAC,MAAM,CAChB;QACE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE;QAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,IAAI,GAAG,EAAE,CAAC;QAClD,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;QACrB,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;QACtB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;QACnB,IAAI;KACL,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC/B,CAAA;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type Secret } from '@t4h.framework/core';
2
+ import type { ServiceRequestConfig } from './Service.js';
3
+ import { type AmberCreateTicketActivityInput } from '../activities/ticket/AmberCreateTicketActivity.js';
4
+ export type AmberConfig = {
5
+ url: string;
6
+ tenant: string;
7
+ channel: string;
8
+ clientId: string;
9
+ clientSecret: Secret;
10
+ };
11
+ export declare class Amber {
12
+ #private;
13
+ constructor(config: AmberConfig);
14
+ get url(): string;
15
+ createTicket(input: Omit<AmberCreateTicketActivityInput, 'channel'>, config?: ServiceRequestConfig): Promise<Promise<import("./Ticket.js").Ticket>>;
16
+ getTicket(id: string, config?: ServiceRequestConfig): Promise<Promise<import("./Ticket.js").Ticket>>;
17
+ private settings;
18
+ }
19
+ //# sourceMappingURL=Amber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Amber.d.ts","sourceRoot":"","sources":["../../src/models/Amber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAExD,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,mDAAmD,CAAA;AAI1D,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAMD,qBAAa,KAAK;;gBAIJ,MAAM,EAAE,WAAW;IAY/B,IAAW,GAAG,WAEb;IAEM,YAAY,CACjB,KAAK,EAAE,IAAI,CAAC,8BAA8B,EAAE,SAAS,CAAC,EACtD,MAAM,CAAC,EAAE,oBAAoB;IAQxB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,oBAAoB;IAI1D,OAAO,CAAC,QAAQ;CAejB"}
@@ -0,0 +1,36 @@
1
+ import { History } from '@t4h.framework/core';
2
+ import { AmberCreateTicketActivity, } from '../activities/ticket/AmberCreateTicketActivity.js';
3
+ import { AmberGetTicketActivity } from '../activities/ticket/AmberGetTicketActivity.js';
4
+ import { AMBER_CHANNEL_PATH } from '../constants/urls.js';
5
+ const amberCreateTicketActivity = History.bind(AmberCreateTicketActivity);
6
+ const amberGetTicketActivity = History.bind(AmberGetTicketActivity);
7
+ export class Amber {
8
+ #config;
9
+ #url;
10
+ constructor(config) {
11
+ this.#config = config;
12
+ this.#url = new URL(AMBER_CHANNEL_PATH.replace(':tenant', config.tenant).replace(':channel', config.channel), config.url).href;
13
+ }
14
+ get url() {
15
+ return this.#url;
16
+ }
17
+ createTicket(input, config) {
18
+ return amberCreateTicketActivity({ ...input, channel: this.#config.channel }, this.settings(config));
19
+ }
20
+ getTicket(id, config) {
21
+ return amberGetTicketActivity(id, this.settings(config));
22
+ }
23
+ settings(config) {
24
+ const settings = {
25
+ auth: {
26
+ username: this.#config.clientId,
27
+ password: this.#config.clientSecret,
28
+ },
29
+ url: this.#url,
30
+ };
31
+ if (config?.retry)
32
+ settings.retry = config.retry;
33
+ return settings;
34
+ }
35
+ }
36
+ //# sourceMappingURL=Amber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Amber.js","sourceRoot":"","sources":["../../src/models/Amber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAA;AAI1D,OAAO,EACL,yBAAyB,GAE1B,MAAM,mDAAmD,CAAA;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAA;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAUzD,MAAM,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;AAEzE,MAAM,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;AAEnE,MAAM,OAAO,KAAK;IACP,OAAO,CAAa;IACpB,IAAI,CAAQ;IAErB,YAAY,MAAmB;QAC7B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QAErB,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CACjB,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAC1D,UAAU,EACV,MAAM,CAAC,OAAO,CACf,EACD,MAAM,CAAC,GAAG,CACX,CAAC,IAAI,CAAA;IACR,CAAC;IAED,IAAW,GAAG;QACZ,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAEM,YAAY,CACjB,KAAsD,EACtD,MAA6B;QAE7B,OAAO,yBAAyB,CAC9B,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CACtB,CAAA;IACH,CAAC;IAEM,SAAS,CAAC,EAAU,EAAE,MAA6B;QACxD,OAAO,sBAAsB,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IAC1D,CAAC;IAEO,QAAQ,CACd,MAA6B;QAE7B,MAAM,QAAQ,GAAkC;YAC9C,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAC/B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;aACpC;YACD,GAAG,EAAE,IAAI,CAAC,IAAI;SACf,CAAA;QAED,IAAI,MAAM,EAAE,KAAK;YAAE,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;QAEhD,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ import { type AsyncActivityAwaitable, type Secret } from '@t4h.framework/core';
2
+ import type { AmberHttpRequestActivityInput } from '../activities/AbstractAmberHttpRequestActivity.js';
3
+ import { type AmberTabulateServiceActivityInput } from '../activities/AmberTabulateServiceActivity.js';
4
+ import { AmberTransferServiceActivity, type AmberTransferServiceActivityInput } from '../activities/AmberTransferServiceActivity.js';
5
+ import { type AmberUpdateServiceActivityInput } from '../activities/AmberUpdateServiceActivity.js';
6
+ export type ServiceConfig = {
7
+ clientId: string;
8
+ clientSecret: Secret;
9
+ url: string;
10
+ };
11
+ export type ServiceRequestConfig = Pick<AmberHttpRequestActivityInput, 'retry'>;
12
+ export type ServiceTransferOptions = ServiceRequestConfig & Pick<AmberTransferServiceActivityInput, 'timeoutInMs'>;
13
+ /** What `transfer` resolves to: `wait()` suspends until the transfer settles. */
14
+ export type ServiceTransferAwaitable = Pick<AsyncActivityAwaitable<AmberTransferServiceActivity>, 'wait'>;
15
+ export declare abstract class Service {
16
+ readonly id: string;
17
+ protected readonly config: ServiceConfig;
18
+ constructor(id: string, config: ServiceConfig);
19
+ static configOf(settings: AmberHttpRequestActivityInput): ServiceConfig;
20
+ transfer(input: Omit<AmberTransferServiceActivityInput, 'id' | 'timeoutInMs'>, { timeoutInMs, ...config }?: ServiceTransferOptions): Promise<ServiceTransferAwaitable>;
21
+ tabulate(input: Omit<AmberTabulateServiceActivityInput, 'id'>, config?: ServiceRequestConfig): Promise<Promise<void>>;
22
+ update(input: Omit<AmberUpdateServiceActivityInput, 'id'>, config?: ServiceRequestConfig): Promise<Promise<void>>;
23
+ finish(config?: ServiceRequestConfig): Promise<Promise<void>>;
24
+ protected settings(config?: ServiceRequestConfig): AmberHttpRequestActivityInput;
25
+ }
26
+ //# sourceMappingURL=Service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Service.d.ts","sourceRoot":"","sources":["../../src/models/Service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,MAAM,EACZ,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAA;AACtG,OAAO,EAEL,KAAK,iCAAiC,EACvC,MAAM,+CAA+C,CAAA;AACtD,OAAO,EACL,4BAA4B,EAC5B,KAAK,iCAAiC,EACvC,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,6CAA6C,CAAA;AAQpD,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAA;AAE/E,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,GACvD,IAAI,CAAC,iCAAiC,EAAE,aAAa,CAAC,CAAA;AAExD,iFAAiF;AACjF,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,sBAAsB,CAAC,4BAA4B,CAAC,EACpD,MAAM,CACP,CAAA;AAED,8BAAsB,OAAO;aAET,EAAE,EAAE,MAAM;IAC1B,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa;gBADxB,EAAE,EAAE,MAAM,EACP,MAAM,EAAE,aAAa;WAG5B,QAAQ,CACpB,QAAQ,EAAE,6BAA6B,GACtC,aAAa;IAQT,QAAQ,CACb,KAAK,EAAE,IAAI,CAAC,iCAAiC,EAAE,IAAI,GAAG,aAAa,CAAC,EACpE,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,GAAE,sBAA2B,GACtD,OAAO,CAAC,wBAAwB,CAAC;IAW7B,QAAQ,CACb,KAAK,EAAE,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,EACpD,MAAM,CAAC,EAAE,oBAAoB;IAQxB,MAAM,CACX,KAAK,EAAE,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,EAClD,MAAM,CAAC,EAAE,oBAAoB;IAKxB,MAAM,CAAC,MAAM,CAAC,EAAE,oBAAoB;IAI3C,SAAS,CAAC,QAAQ,CAChB,MAAM,CAAC,EAAE,oBAAoB,GAC5B,6BAA6B;CAajC"}
@@ -0,0 +1,53 @@
1
+ import { History, } from '@t4h.framework/core';
2
+ import { AmberTabulateServiceActivity, } from '../activities/AmberTabulateServiceActivity.js';
3
+ import { AmberTransferServiceActivity, } from '../activities/AmberTransferServiceActivity.js';
4
+ import { AmberUpdateServiceActivity, } from '../activities/AmberUpdateServiceActivity.js';
5
+ const amberTransferActivity = History.bind(AmberTransferServiceActivity);
6
+ const amberTabulateActivity = History.bind(AmberTabulateServiceActivity);
7
+ const amberUpdateActivity = History.bind(AmberUpdateServiceActivity);
8
+ export class Service {
9
+ id;
10
+ config;
11
+ constructor(id, config) {
12
+ this.id = id;
13
+ this.config = config;
14
+ }
15
+ static configOf(settings) {
16
+ return {
17
+ clientId: settings.auth.username,
18
+ clientSecret: settings.auth.password,
19
+ url: settings.url,
20
+ };
21
+ }
22
+ transfer(input, { timeoutInMs, ...config } = {}) {
23
+ const activityInput = {
24
+ ...input,
25
+ id: this.id,
26
+ };
27
+ if (timeoutInMs !== undefined)
28
+ activityInput.timeoutInMs = timeoutInMs;
29
+ return amberTransferActivity(activityInput, this.settings(config));
30
+ }
31
+ tabulate(input, config) {
32
+ return amberTabulateActivity({ ...input, id: this.id }, this.settings(config));
33
+ }
34
+ update(input, config) {
35
+ return amberUpdateActivity({ ...input, id: this.id }, this.settings(config));
36
+ }
37
+ finish(config) {
38
+ return this.update({ status: 'finished' }, config);
39
+ }
40
+ settings(config) {
41
+ const settings = {
42
+ auth: {
43
+ username: this.config.clientId,
44
+ password: this.config.clientSecret,
45
+ },
46
+ url: this.config.url,
47
+ };
48
+ if (config?.retry)
49
+ settings.retry = config.retry;
50
+ return settings;
51
+ }
52
+ }
53
+ //# sourceMappingURL=Service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Service.js","sourceRoot":"","sources":["../../src/models/Service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,GAGR,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EACL,4BAA4B,GAE7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EACL,4BAA4B,GAE7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EACL,0BAA0B,GAE3B,MAAM,6CAA6C,CAAA;AAEpD,MAAM,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;AAExE,MAAM,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;AAExE,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;AAmBpE,MAAM,OAAgB,OAAO;IAET;IACG;IAFrB,YACkB,EAAU,EACP,MAAqB;QADxB,OAAE,GAAF,EAAE,CAAQ;QACP,WAAM,GAAN,MAAM,CAAe;IACvC,CAAC;IAEG,MAAM,CAAC,QAAQ,CACpB,QAAuC;QAEvC,OAAO;YACL,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;YAChC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;YACpC,GAAG,EAAE,QAAQ,CAAC,GAAG;SAClB,CAAA;IACH,CAAC;IAEM,QAAQ,CACb,KAAoE,EACpE,EAAE,WAAW,EAAE,GAAG,MAAM,KAA6B,EAAE;QAEvD,MAAM,aAAa,GAAsC;YACvD,GAAG,KAAK;YACR,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAA;QAED,IAAI,WAAW,KAAK,SAAS;YAAE,aAAa,CAAC,WAAW,GAAG,WAAW,CAAA;QAEtE,OAAO,qBAAqB,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IACpE,CAAC;IAEM,QAAQ,CACb,KAAoD,EACpD,MAA6B;QAE7B,OAAO,qBAAqB,CAC1B,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CACtB,CAAA;IACH,CAAC;IAEM,MAAM,CACX,KAAkD,EAClD,MAA6B;QAE7B,OAAO,mBAAmB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IAC9E,CAAC;IAEM,MAAM,CAAC,MAA6B;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,CAAA;IACpD,CAAC;IAES,QAAQ,CAChB,MAA6B;QAE7B,MAAM,QAAQ,GAAkC;YAC9C,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;aACnC;YACD,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;SACrB,CAAA;QAED,IAAI,MAAM,EAAE,KAAK;YAAE,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;QAEhD,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ import { Service, type ServiceRequestConfig, type ServiceTransferAwaitable, type ServiceTransferOptions } from './Service.js';
2
+ import type { AmberTransferServiceActivityInput } from '../activities/AmberTransferServiceActivity.js';
3
+ import { type AmberCommentTicketActivityInput } from '../activities/ticket/AmberCommentTicketActivity.js';
4
+ import { type AmberLockTicketActivityInput } from '../activities/ticket/AmberLockTicketActivity.js';
5
+ import { type AmberUpdateTicketFieldValueActivityInput } from '../activities/ticket/AmberUpdateTicketFieldValueActivity.js';
6
+ import type { ServiceTicketInteractionInput } from '../typings/ServiceTicketInteraction.js';
7
+ import type { ServiceTicketLockInput } from '../typings/ServiceTicketLock.js';
8
+ export type TicketTransferOptions = ServiceTransferOptions & {
9
+ /**
10
+ * Lock taken back by the workflow once `wait()` resolves, so no agent picks
11
+ * the ticket up again while the workflow finishes it. Defaults to a lock
12
+ * with no expiration. Pass `false` to leave the ticket unlocked, or
13
+ * `{ expiresAt, metadata }` to customize the lock. Only applies to
14
+ * transfers that release the lock (`status: 'in-queue'` or `lockRelease`).
15
+ */
16
+ lock?: Omit<ServiceTicketLockInput, 'ref'> | false;
17
+ };
18
+ export declare class Ticket extends Service {
19
+ transfer(input: Omit<AmberTransferServiceActivityInput, 'id' | 'timeoutInMs'>, { lock, ...options }?: TicketTransferOptions): Promise<ServiceTransferAwaitable>;
20
+ comment(input: Omit<AmberCommentTicketActivityInput, 'id'>, config?: ServiceRequestConfig): Promise<Promise<void>>;
21
+ interact(input: ServiceTicketInteractionInput, config?: ServiceRequestConfig): Promise<Promise<void>>;
22
+ lock(input?: Omit<AmberLockTicketActivityInput, 'id'>, config?: ServiceRequestConfig): Promise<Promise<void>>;
23
+ releaseLock(config?: ServiceRequestConfig): Promise<Promise<void>>;
24
+ fields(config?: ServiceRequestConfig): Promise<Promise<import("../index.js").ServiceTicketFieldOutput[]>>;
25
+ updateField(input: Omit<AmberUpdateTicketFieldValueActivityInput, 'id'>, config?: ServiceRequestConfig): Promise<Promise<void>>;
26
+ }
27
+ //# sourceMappingURL=Ticket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Ticket.d.ts","sourceRoot":"","sources":["../../src/models/Ticket.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EACP,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC5B,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EACV,iCAAiC,EAElC,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,oDAAoD,CAAA;AAG3D,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,iDAAiD,CAAA;AAExD,OAAO,EAEL,KAAK,wCAAwC,EAC9C,MAAM,6DAA6D,CAAA;AACpE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAA;AAC3F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAoB7E,MAAM,MAAM,qBAAqB,GAAG,sBAAsB,GAAG;IAC3D;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,GAAG,KAAK,CAAA;CACnD,CAAA;AAED,qBAAa,MAAO,SAAQ,OAAO;IACX,QAAQ,CAC5B,KAAK,EAAE,IAAI,CAAC,iCAAiC,EAAE,IAAI,GAAG,aAAa,CAAC,EACpE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,GAAE,qBAA0B,GAC/C,OAAO,CAAC,wBAAwB,CAAC;IAsB7B,OAAO,CACZ,KAAK,EAAE,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,EAClD,MAAM,CAAC,EAAE,oBAAoB;IAQxB,QAAQ,CACb,KAAK,EAAE,6BAA6B,EACpC,MAAM,CAAC,EAAE,oBAAoB;IAQxB,IAAI,CACT,KAAK,GAAE,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAAM,EACpD,MAAM,CAAC,EAAE,oBAAoB;IAQxB,WAAW,CAAC,MAAM,CAAC,EAAE,oBAAoB;IAOzC,MAAM,CAAC,MAAM,CAAC,EAAE,oBAAoB;IAIpC,WAAW,CAChB,KAAK,EAAE,IAAI,CAAC,wCAAwC,EAAE,IAAI,CAAC,EAC3D,MAAM,CAAC,EAAE,oBAAoB;CAOhC"}
@@ -0,0 +1,51 @@
1
+ import { History } from '@t4h.framework/core';
2
+ import { Service, } from './Service.js';
3
+ import { AmberCommentTicketActivity, } from '../activities/ticket/AmberCommentTicketActivity.js';
4
+ import { AmberFindTicketFieldsActivity } from '../activities/ticket/AmberFindTicketFieldsActivity.js';
5
+ import { AmberInteractTicketActivity } from '../activities/ticket/AmberInteractTicketActivity.js';
6
+ import { AmberLockTicketActivity, } from '../activities/ticket/AmberLockTicketActivity.js';
7
+ import { AmberReleaseTicketLockActivity } from '../activities/ticket/AmberReleaseTicketLockActivity.js';
8
+ import { AmberUpdateTicketFieldValueActivity, } from '../activities/ticket/AmberUpdateTicketFieldValueActivity.js';
9
+ const amberCommentTicketActivity = History.bind(AmberCommentTicketActivity);
10
+ const amberInteractTicketActivity = History.bind(AmberInteractTicketActivity);
11
+ const amberLockTicketActivity = History.bind(AmberLockTicketActivity);
12
+ const amberReleaseTicketLockActivity = History.bind(AmberReleaseTicketLockActivity);
13
+ const amberFindTicketFieldsActivity = History.bind(AmberFindTicketFieldsActivity);
14
+ const amberUpdateTicketFieldValueActivity = History.bind(AmberUpdateTicketFieldValueActivity);
15
+ export class Ticket extends Service {
16
+ async transfer(input, { lock, ...options } = {}) {
17
+ const transfer = await super.transfer(input, options);
18
+ const releases = input.status === 'in-queue' || input.lockRelease === true;
19
+ if (lock === false || !releases)
20
+ return transfer;
21
+ const config = {};
22
+ if (options.retry)
23
+ config.retry = options.retry;
24
+ return {
25
+ wait: async () => {
26
+ const output = await transfer.wait();
27
+ await this.lock(lock ?? {}, config);
28
+ return output;
29
+ },
30
+ };
31
+ }
32
+ comment(input, config) {
33
+ return amberCommentTicketActivity({ ...input, id: this.id }, this.settings(config));
34
+ }
35
+ interact(input, config) {
36
+ return amberInteractTicketActivity({ ...input, id: this.id }, this.settings(config));
37
+ }
38
+ lock(input = {}, config) {
39
+ return amberLockTicketActivity({ ...input, id: this.id }, this.settings(config));
40
+ }
41
+ releaseLock(config) {
42
+ return amberReleaseTicketLockActivity({ id: this.id }, this.settings(config));
43
+ }
44
+ fields(config) {
45
+ return amberFindTicketFieldsActivity(this.id, this.settings(config));
46
+ }
47
+ updateField(input, config) {
48
+ return amberUpdateTicketFieldValueActivity({ ...input, id: this.id }, this.settings(config));
49
+ }
50
+ }
51
+ //# sourceMappingURL=Ticket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Ticket.js","sourceRoot":"","sources":["../../src/models/Ticket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { AsyncActivityCallback, AsyncActivityCallbackAuthJwks } from '@t4h.framework/core';
2
+ import { type AmberWebhookEventType } from '../constants/webhook.js';
3
+ export declare namespace AmberWebhook {
4
+ type EventLike = {
5
+ type: string;
6
+ data: {
7
+ service?: {
8
+ id?: unknown;
9
+ };
10
+ isInformative?: unknown;
11
+ };
12
+ };
13
+ /**
14
+ * Derives the tenant JWKS URL from a channel URL
15
+ * (`{base}/v1/tenants/:tenant/channels/:channel` → `{base}/tenants/:tenant/.well-known/jwks.json`).
16
+ */
17
+ function jwksUrl(channelUrl: string): string;
18
+ function authorization(channelUrl: string): AsyncActivityCallbackAuthJwks;
19
+ function isEvent(body: unknown, type: AmberWebhookEventType): body is EventLike;
20
+ function serviceId(event: AsyncActivityCallback.Event, type: AmberWebhookEventType): string | undefined;
21
+ }
22
+ //# sourceMappingURL=AmberWebhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmberWebhook.d.ts","sourceRoot":"","sources":["../../src/tools/AmberWebhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,6BAA6B,EAC9B,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EAQL,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAA;AAEhC,yBAAiB,YAAY,CAAC;IAC5B,KAAY,SAAS,GAAG;QACtB,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE;YAAE,OAAO,CAAC,EAAE;gBAAE,EAAE,CAAC,EAAE,OAAO,CAAA;aAAE,CAAC;YAAC,aAAa,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAC9D,CAAA;IAMD;;;OAGG;IACH,SAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CASlD;IAED,SAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,GACjB,6BAA6B,CAY/B;IAED,SAAgB,OAAO,CACrB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,qBAAqB,GAC1B,IAAI,IAAI,SAAS,CAWnB;IAED,SAAgB,SAAS,CACvB,KAAK,EAAE,qBAAqB,CAAC,KAAK,EAClC,IAAI,EAAE,qBAAqB,GAC1B,MAAM,GAAG,SAAS,CAMpB;CACF"}
@@ -0,0 +1,51 @@
1
+ import { AMBER_CHANNEL_PATH, AMBER_JWKS_PATH } from '../constants/urls.js';
2
+ import { AMBER_WEBHOOK_ALGORITHM_HEADER, AMBER_WEBHOOK_KID_HEADER, AMBER_WEBHOOK_SIGNATURE_FORMAT_HEADER, AMBER_WEBHOOK_SIGNATURE_HEADER, AMBER_WEBHOOK_SIGNED_PAYLOAD, AMBER_WEBHOOK_TIMESTAMP_HEADER, AMBER_WEBHOOK_TOLERANCE_IN_SECONDS, } from '../constants/webhook.js';
3
+ export var AmberWebhook;
4
+ (function (AmberWebhook) {
5
+ const CHANNEL_PATH_PATTERN = new RegExp(`^(?<base>.*?)${AMBER_CHANNEL_PATH.replace(':tenant', '(?<tenant>[^/]+)').replace(':channel', '[^/]+')}/?$`);
6
+ /**
7
+ * Derives the tenant JWKS URL from a channel URL
8
+ * (`{base}/v1/tenants/:tenant/channels/:channel` → `{base}/tenants/:tenant/.well-known/jwks.json`).
9
+ */
10
+ function jwksUrl(channelUrl) {
11
+ const match = CHANNEL_PATH_PATTERN.exec(channelUrl);
12
+ if (!match?.groups)
13
+ throw new Error(`Cannot derive the Amber JWKS URL from ${channelUrl}`);
14
+ const { base, tenant } = match.groups;
15
+ return new URL(AMBER_JWKS_PATH.replace(':tenant', tenant), base).href;
16
+ }
17
+ AmberWebhook.jwksUrl = jwksUrl;
18
+ function authorization(channelUrl) {
19
+ return {
20
+ type: 'jwks',
21
+ jwksUri: jwksUrl(channelUrl),
22
+ header: AMBER_WEBHOOK_SIGNATURE_HEADER,
23
+ timestampHeader: AMBER_WEBHOOK_TIMESTAMP_HEADER,
24
+ kidHeader: AMBER_WEBHOOK_KID_HEADER,
25
+ algorithmHeader: AMBER_WEBHOOK_ALGORITHM_HEADER,
26
+ signatureFormatHeader: AMBER_WEBHOOK_SIGNATURE_FORMAT_HEADER,
27
+ signedPayload: AMBER_WEBHOOK_SIGNED_PAYLOAD,
28
+ toleranceInSeconds: AMBER_WEBHOOK_TOLERANCE_IN_SECONDS,
29
+ };
30
+ }
31
+ AmberWebhook.authorization = authorization;
32
+ function isEvent(body, type) {
33
+ if (!body || typeof body !== 'object' || Array.isArray(body))
34
+ return false;
35
+ const candidate = body;
36
+ if (typeof candidate.type !== 'string')
37
+ return false;
38
+ if (candidate.type !== type && !candidate.type.endsWith(`.${type}`))
39
+ return false;
40
+ return !!candidate.data && typeof candidate.data === 'object';
41
+ }
42
+ AmberWebhook.isEvent = isEvent;
43
+ function serviceId(event, type) {
44
+ if (!isEvent(event.body, type))
45
+ return undefined;
46
+ const id = event.body.data.service?.id;
47
+ return typeof id === 'string' ? id : undefined;
48
+ }
49
+ AmberWebhook.serviceId = serviceId;
50
+ })(AmberWebhook || (AmberWebhook = {}));
51
+ //# sourceMappingURL=AmberWebhook.js.map