@culturefy/shared 1.0.3 → 1.0.4

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 (79) hide show
  1. package/build/cjs/enums/index.js +10 -0
  2. package/build/cjs/enums/index.js.map +1 -0
  3. package/build/cjs/enums/secretKeys.enum.js +22 -0
  4. package/build/cjs/enums/secretKeys.enum.js.map +1 -0
  5. package/build/cjs/index.js +22 -0
  6. package/build/cjs/index.js.map +1 -0
  7. package/build/cjs/types/create-enterprise-business.js +2 -0
  8. package/build/cjs/types/create-enterprise-business.js.map +1 -0
  9. package/build/cjs/types/events.js +2 -0
  10. package/build/cjs/types/events.js.map +1 -0
  11. package/build/cjs/types/index.js +16 -0
  12. package/build/cjs/types/index.js.map +1 -0
  13. package/build/cjs/types/payloads.js +2 -0
  14. package/build/cjs/types/payloads.js.map +1 -0
  15. package/build/cjs/utils/index.js +22 -0
  16. package/build/cjs/utils/index.js.map +1 -0
  17. package/build/cjs/utils/initializers.js +114 -0
  18. package/build/cjs/utils/initializers.js.map +1 -0
  19. package/build/cjs/utils/response.js +36 -0
  20. package/build/cjs/utils/response.js.map +1 -0
  21. package/build/cjs/utils/secrets.js +42 -0
  22. package/build/cjs/utils/secrets.js.map +1 -0
  23. package/build/esm/enums/index.js +2 -0
  24. package/build/esm/enums/index.js.map +1 -0
  25. package/build/esm/enums/secretKeys.enum.js +18 -0
  26. package/build/esm/enums/secretKeys.enum.js.map +1 -0
  27. package/build/esm/index.js +4 -0
  28. package/build/esm/index.js.map +1 -0
  29. package/build/esm/types/create-enterprise-business.js +2 -0
  30. package/build/esm/types/create-enterprise-business.js.map +1 -0
  31. package/build/esm/types/events.js +2 -0
  32. package/build/esm/types/events.js.map +1 -0
  33. package/build/esm/types/index.js +3 -0
  34. package/build/esm/types/index.js.map +1 -0
  35. package/build/esm/types/payloads.js +2 -0
  36. package/build/esm/types/payloads.js.map +1 -0
  37. package/build/esm/utils/index.js +4 -0
  38. package/build/esm/utils/index.js.map +1 -0
  39. package/build/esm/utils/initializers.js +108 -0
  40. package/build/esm/utils/initializers.js.map +1 -0
  41. package/build/esm/utils/response.js +31 -0
  42. package/build/esm/utils/response.js.map +1 -0
  43. package/build/esm/utils/secrets.js +39 -0
  44. package/build/esm/utils/secrets.js.map +1 -0
  45. package/build/package.json +43 -0
  46. package/build/src/enums/index.d.ts +1 -0
  47. package/build/src/enums/index.js +5 -0
  48. package/build/src/enums/index.js.map +1 -0
  49. package/build/src/enums/secretKeys.enum.d.ts +9 -0
  50. package/build/src/enums/secretKeys.enum.js +16 -0
  51. package/build/src/enums/secretKeys.enum.js.map +1 -0
  52. package/build/src/index.d.ts +3 -0
  53. package/build/src/index.js +7 -0
  54. package/build/src/index.js.map +1 -0
  55. package/build/src/types/create-enterprise-business.d.ts +27 -0
  56. package/build/src/types/create-enterprise-business.js +3 -0
  57. package/build/src/types/create-enterprise-business.js.map +1 -0
  58. package/build/src/types/events.d.ts +5 -0
  59. package/build/src/types/events.js +3 -0
  60. package/build/src/types/events.js.map +1 -0
  61. package/build/src/types/index.d.ts +2 -0
  62. package/build/src/types/index.js +6 -0
  63. package/build/src/types/index.js.map +1 -0
  64. package/build/src/types/payloads.d.ts +12 -0
  65. package/build/src/types/payloads.js +3 -0
  66. package/build/src/types/payloads.js.map +1 -0
  67. package/build/src/utils/index.d.ts +3 -0
  68. package/build/src/utils/index.js +7 -0
  69. package/build/src/utils/index.js.map +1 -0
  70. package/build/src/utils/initializers.d.ts +7 -0
  71. package/build/src/utils/initializers.js +111 -0
  72. package/build/src/utils/initializers.js.map +1 -0
  73. package/build/src/utils/response.d.ts +3 -0
  74. package/build/src/utils/response.js +34 -0
  75. package/build/src/utils/response.js.map +1 -0
  76. package/build/src/utils/secrets.d.ts +9 -0
  77. package/build/src/utils/secrets.js +43 -0
  78. package/build/src/utils/secrets.js.map +1 -0
  79. package/package.json +7 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","names":["sendResponse","statusCode","data","message","headers","status","body","JSON","stringify","asyncHandler","handler","request","context","log","url","response","error","console"],"sources":["../../../src/utils/response.ts"],"sourcesContent":["import { HttpRequest, HttpResponseInit, InvocationContext } from '@azure/functions';\n\n// This function generates a standard response with a structured body: { status, message, data }\nexport function sendResponse(\n statusCode: number,\n data: any = null,\n message: string = '',\n headers: Record<string, string> = { 'Content-Type': 'application/json' }\n): HttpResponseInit {\n return {\n status: statusCode,\n body: JSON.stringify({\n status: statusCode,\n message: message || (statusCode >= 200 && statusCode < 300 ? 'Success' : 'Error'),\n data: data,\n }),\n headers: headers,\n };\n}\n\n// Centralized asyncHandler to catch all errors\nexport function asyncHandler(handler: Function) {\n return async (request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> => {\n try {\n context.log('Handling request:', request.url);\n const response = await handler(request, context); // Call the actual handler logic\n context.log('Response sent:', response.status);\n return response;\n } catch (error: any) {\n console.error('Error occurred:', error);\n context.error('Error occurred:', error);\n return sendResponse(500, null, error.message ? error.message : 'An unexpected error occurred');\n }\n };\n}"],"mappings":"AAEA;AACA,OAAO,SAASA,YAAYA,CACxBC,UAAkB,EAClBC,IAAS,GAAG,IAAI,EAChBC,OAAe,GAAG,EAAE,EACpBC,OAA+B,GAAG;EAAE,cAAc,EAAE;AAAmB,CAAC,EACxD;EAChB,OAAO;IACHC,MAAM,EAAEJ,UAAU;IAClBK,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;MACjBH,MAAM,EAAEJ,UAAU;MAClBE,OAAO,EAAEA,OAAO,KAAKF,UAAU,IAAI,GAAG,IAAIA,UAAU,GAAG,GAAG,GAAG,SAAS,GAAG,OAAO,CAAC;MACjFC,IAAI,EAAEA;IACV,CAAC,CAAC;IACFE,OAAO,EAAEA;EACb,CAAC;AACL;;AAEA;AACA,OAAO,SAASK,YAAYA,CAACC,OAAiB,EAAE;EAC5C,OAAO,OAAOC,OAAoB,EAAEC,OAA0B,KAAgC;IAC1F,IAAI;MACAA,OAAO,CAACC,GAAG,CAAC,mBAAmB,EAAEF,OAAO,CAACG,GAAG,CAAC;MAC7C,MAAMC,QAAQ,GAAG,MAAML,OAAO,CAACC,OAAO,EAAEC,OAAO,CAAC,CAAC,CAAE;MACnDA,OAAO,CAACC,GAAG,CAAC,gBAAgB,EAAEE,QAAQ,CAACV,MAAM,CAAC;MAC9C,OAAOU,QAAQ;IACnB,CAAC,CAAC,OAAOC,KAAU,EAAE;MACjBC,OAAO,CAACD,KAAK,CAAC,iBAAiB,EAAEA,KAAK,CAAC;MACvCJ,OAAO,CAACI,KAAK,CAAC,iBAAiB,EAAEA,KAAK,CAAC;MACvC,OAAOhB,YAAY,CAAC,GAAG,EAAE,IAAI,EAAEgB,KAAK,CAACb,OAAO,GAAGa,KAAK,CAACb,OAAO,GAAG,8BAA8B,CAAC;IAClG;EACJ,CAAC;AACL","ignoreList":[]}
@@ -0,0 +1,39 @@
1
+ import { DefaultAzureCredential } from "@azure/identity";
2
+ import { SecretClient } from "@azure/keyvault-secrets";
3
+ import { AzureSecretKeysEnum } from "../enums";
4
+
5
+ /**
6
+ * Fetches a secret value from Azure Key Vault by key.
7
+ * @param key - The key name from the AzureSecretKeysEnum enum.
8
+ * @returns The secret value.
9
+ * @throws Error if the key is invalid or if the secret fetch fails.
10
+ */
11
+ export async function getAzureVaultSecretByKey(context, azureVaultName, key) {
12
+ try {
13
+ // Azure Key Vault URL
14
+ const vaultName = azureVaultName || "";
15
+ const vaultUrl = `https://${vaultName}.vault.azure.net`;
16
+
17
+ // Initialize SecretClient
18
+ const credential = new DefaultAzureCredential();
19
+ const client = new SecretClient(vaultUrl, credential);
20
+
21
+ // Validate the key using a switch case
22
+ switch (key) {
23
+ case AzureSecretKeysEnum.STRIPE_SECRET_KEY:
24
+ case AzureSecretKeysEnum.STRIPE_PAYMENT_WEBHOOK_SECRET_KEY:
25
+ case AzureSecretKeysEnum.STRIPE_PRODUCT_WEBHOOK_SECRET:
26
+ case AzureSecretKeysEnum.STRIPE_PRICE_WEBHOOK_SECRET:
27
+ case AzureSecretKeysEnum.EMAIL_SERVICE_URL:
28
+ case AzureSecretKeysEnum.STRIPE_CUSTOMER_SYNC_WEBHOOK_SECRET_KEY:
29
+ const secret = await client.getSecret(key);
30
+ return secret.value || "";
31
+ default:
32
+ throw new Error(`Invalid key name: ${key}`);
33
+ }
34
+ } catch (err) {
35
+ context.error(`Error fetching secret for key ${key}:`, err);
36
+ throw new Error(`Failed to fetch secret for key ${key}`);
37
+ }
38
+ }
39
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","names":["DefaultAzureCredential","SecretClient","AzureSecretKeysEnum","getAzureVaultSecretByKey","context","azureVaultName","key","vaultName","vaultUrl","credential","client","STRIPE_SECRET_KEY","STRIPE_PAYMENT_WEBHOOK_SECRET_KEY","STRIPE_PRODUCT_WEBHOOK_SECRET","STRIPE_PRICE_WEBHOOK_SECRET","EMAIL_SERVICE_URL","STRIPE_CUSTOMER_SYNC_WEBHOOK_SECRET_KEY","secret","getSecret","value","Error","err","error"],"sources":["../../../src/utils/secrets.ts"],"sourcesContent":["import { DefaultAzureCredential } from \"@azure/identity\";\nimport { SecretClient } from \"@azure/keyvault-secrets\";\nimport { InvocationContext } from \"@azure/functions\";\nimport { AzureSecretKeysEnum } from \"../enums\";\n\n/**\n * Fetches a secret value from Azure Key Vault by key.\n * @param key - The key name from the AzureSecretKeysEnum enum.\n * @returns The secret value.\n * @throws Error if the key is invalid or if the secret fetch fails.\n*/\nexport async function getAzureVaultSecretByKey(\n context: InvocationContext,\n azureVaultName: string,\n key: AzureSecretKeysEnum\n): Promise<string> {\n try {\n \n // Azure Key Vault URL\n const vaultName = azureVaultName || \"\";\n const vaultUrl = `https://${vaultName}.vault.azure.net`;\n\n // Initialize SecretClient\n const credential = new DefaultAzureCredential();\n const client = new SecretClient(vaultUrl, credential);\n \n // Validate the key using a switch case\n switch (key) {\n \n case AzureSecretKeysEnum.STRIPE_SECRET_KEY:\n case AzureSecretKeysEnum.STRIPE_PAYMENT_WEBHOOK_SECRET_KEY:\n case AzureSecretKeysEnum.STRIPE_PRODUCT_WEBHOOK_SECRET:\n case AzureSecretKeysEnum.STRIPE_PRICE_WEBHOOK_SECRET:\n case AzureSecretKeysEnum.EMAIL_SERVICE_URL:\n case AzureSecretKeysEnum.STRIPE_CUSTOMER_SYNC_WEBHOOK_SECRET_KEY:\n const secret = await client.getSecret(key);\n return secret.value || \"\";\n default:\n throw new Error(`Invalid key name: ${key}`);\n }\n } catch (err) {\n context.error(`Error fetching secret for key ${key}:`, err);\n throw new Error(`Failed to fetch secret for key ${key}`);\n }\n}\n"],"mappings":"AAAA,SAASA,sBAAsB,QAAQ,iBAAiB;AACxD,SAASC,YAAY,QAAQ,yBAAyB;AAEtD,SAASC,mBAAmB,QAAQ,UAAU;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,wBAAwBA,CAC5CC,OAA0B,EAC1BC,cAAsB,EACtBC,GAAwB,EACP;EACjB,IAAI;IAEF;IACA,MAAMC,SAAS,GAAGF,cAAc,IAAI,EAAE;IACtC,MAAMG,QAAQ,GAAG,WAAWD,SAAS,kBAAkB;;IAEvD;IACA,MAAME,UAAU,GAAG,IAAIT,sBAAsB,CAAC,CAAC;IAC/C,MAAMU,MAAM,GAAG,IAAIT,YAAY,CAACO,QAAQ,EAAEC,UAAU,CAAC;;IAErD;IACA,QAAQH,GAAG;MAET,KAAKJ,mBAAmB,CAACS,iBAAiB;MAC1C,KAAKT,mBAAmB,CAACU,iCAAiC;MAC1D,KAAKV,mBAAmB,CAACW,6BAA6B;MACtD,KAAKX,mBAAmB,CAACY,2BAA2B;MACpD,KAAKZ,mBAAmB,CAACa,iBAAiB;MAC1C,KAAKb,mBAAmB,CAACc,uCAAuC;QAC9D,MAAMC,MAAM,GAAG,MAAMP,MAAM,CAACQ,SAAS,CAACZ,GAAG,CAAC;QAC1C,OAAOW,MAAM,CAACE,KAAK,IAAI,EAAE;MAC3B;QACE,MAAM,IAAIC,KAAK,CAAC,qBAAqBd,GAAG,EAAE,CAAC;IAC/C;EACF,CAAC,CAAC,OAAOe,GAAG,EAAE;IACZjB,OAAO,CAACkB,KAAK,CAAC,iCAAiChB,GAAG,GAAG,EAAEe,GAAG,CAAC;IAC3D,MAAM,IAAID,KAAK,CAAC,kCAAkCd,GAAG,EAAE,CAAC;EAC1D;AACF","ignoreList":[]}
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@culturefy/shared",
3
+ "description": "Shared utilities for culturefy serverless services",
4
+ "version": "1.0.4",
5
+ "types": "build/src/index.d.ts",
6
+ "files": ["build", "src"],
7
+ "scripts": {
8
+ "build": "npm run build:cjs && npm run build:esm && tsc --outDir build/src && node scripts/build-package.js",
9
+ "build:cjs": "NODE_ENV=production BABEL_ENV=cjs babel src --presets=./scripts/babel-preset.js --extensions .ts,.tsx --ignore src/**/*.specs.tsx --out-dir build/cjs --source-maps",
10
+ "build:esm": "NODE_ENV=production BABEL_ENV=esm babel src --presets=./scripts/babel-preset.js --extensions .ts,.tsx --ignore src/**/*.specs.tsx --out-dir build/esm --source-maps",
11
+ "prepublishOnly": "npm run build"
12
+ },
13
+ "publishConfig": {
14
+ "registry": "https://registry.npmjs.org/",
15
+ "access": "public"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/culturefy/culturefy-serverless.git",
20
+ "directory": "packages/shared"
21
+ },
22
+ "exports": {
23
+ ".": {
24
+ "require": "./build/cjs/src/index.js",
25
+ "import": "./build/esm/src/index.js"
26
+ }
27
+ },
28
+ "keywords": ["culturefy","serverless","shared"],
29
+ "author": "taimoor.ghori@culturefy.com",
30
+ "license": "MIT",
31
+ "devDependencies": {
32
+ "typescript": "^5.0.0",
33
+ "@babel/cli": "^7.24.1",
34
+ "@babel/preset-env": "^7.24.3",
35
+ "@babel/preset-typescript": "^7.24.1"
36
+ },
37
+ "prettier": {
38
+ "printWidth": 80,
39
+ "semi": true,
40
+ "singleQuote": true,
41
+ "trailingComma": "es5"
42
+ }
43
+ }
@@ -0,0 +1 @@
1
+ export * from './secretKeys.enum';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./secretKeys.enum"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/enums/index.ts"],"names":[],"mappings":";;;AAAA,4DAAiC"}
@@ -0,0 +1,9 @@
1
+ export declare enum AzureSecretKeysEnum {
2
+ STRIPE_SECRET_KEY = "Stripe-secret-key",
3
+ STRIPE_PAYMENT_WEBHOOK_SECRET_KEY = "Stripe-payment-webhook-secret-key",// in-use
4
+ STRIPE_PRODUCT_WEBHOOK_SECRET = "Stripe-product-webhook-secret-key",// in-use
5
+ STRIPE_PRICE_WEBHOOK_SECRET = "Stripe-price-webhook-secret-key",// in-use
6
+ EMAIL_SERVICE_URL = "Email-Service-Url",// in-use,
7
+ STRIPE_CUSTOMER_SYNC_WEBHOOK_SECRET_KEY = "Stripe-Customer-Sync-Webhook-Secret-Key",// in-use
8
+ DB_CONNECTING_STRING_BILLING = "DB-Connecting-String-Billing"
9
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AzureSecretKeysEnum = void 0;
4
+ // Enum for secret keys
5
+ var AzureSecretKeysEnum;
6
+ (function (AzureSecretKeysEnum) {
7
+ // STRIPE_PUBLISHABLE_KEY = "Stripe-Publishable-Key",
8
+ AzureSecretKeysEnum["STRIPE_SECRET_KEY"] = "Stripe-secret-key";
9
+ AzureSecretKeysEnum["STRIPE_PAYMENT_WEBHOOK_SECRET_KEY"] = "Stripe-payment-webhook-secret-key";
10
+ AzureSecretKeysEnum["STRIPE_PRODUCT_WEBHOOK_SECRET"] = "Stripe-product-webhook-secret-key";
11
+ AzureSecretKeysEnum["STRIPE_PRICE_WEBHOOK_SECRET"] = "Stripe-price-webhook-secret-key";
12
+ AzureSecretKeysEnum["EMAIL_SERVICE_URL"] = "Email-Service-Url";
13
+ AzureSecretKeysEnum["STRIPE_CUSTOMER_SYNC_WEBHOOK_SECRET_KEY"] = "Stripe-Customer-Sync-Webhook-Secret-Key";
14
+ AzureSecretKeysEnum["DB_CONNECTING_STRING_BILLING"] = "DB-Connecting-String-Billing";
15
+ })(AzureSecretKeysEnum || (exports.AzureSecretKeysEnum = AzureSecretKeysEnum = {}));
16
+ //# sourceMappingURL=secretKeys.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretKeys.enum.js","sourceRoot":"","sources":["../../../src/enums/secretKeys.enum.ts"],"names":[],"mappings":";;;AAAA,uBAAuB;AACvB,IAAY,mBASX;AATD,WAAY,mBAAmB;IAC7B,qDAAqD;IACrD,8DAAuC,CAAA;IACvC,8FAAuE,CAAA;IACvE,0FAAmE,CAAA;IACnE,sFAA+D,CAAA;IAC/D,8DAAuC,CAAA;IACvC,0GAAmF,CAAA;IACnF,oFAA6D,CAAA;AAC/D,CAAC,EATW,mBAAmB,mCAAnB,mBAAmB,QAS9B"}
@@ -0,0 +1,3 @@
1
+ export * from './types';
2
+ export * from './enums';
3
+ export * from './utils';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./types"), exports);
5
+ tslib_1.__exportStar(require("./enums"), exports);
6
+ tslib_1.__exportStar(require("./utils"), exports);
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,kDAAwB;AACxB,kDAAwB;AACxB,kDAAwB"}
@@ -0,0 +1,27 @@
1
+ interface PrimaryContact {
2
+ name: string;
3
+ email: string;
4
+ phone: string;
5
+ country: string;
6
+ }
7
+ interface UserData {
8
+ firstName: string;
9
+ lastName: string;
10
+ email: string;
11
+ position: string;
12
+ password: string;
13
+ }
14
+ interface BusinessData {
15
+ name: string;
16
+ industryId: string;
17
+ size: string;
18
+ primaryContact: PrimaryContact;
19
+ subdomain: string;
20
+ }
21
+ export interface IEnterpriseBusinessCreationByGuestPayload {
22
+ planId: string;
23
+ addonIds: string[];
24
+ userData: UserData;
25
+ businessData: BusinessData;
26
+ }
27
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=create-enterprise-business.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-enterprise-business.js","sourceRoot":"","sources":["../../../src/types/create-enterprise-business.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export interface IEventMessage<T> {
2
+ eventType: string;
3
+ timestamp: string;
4
+ data: T;
5
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/types/events.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './create-enterprise-business';
2
+ export * from './events';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./create-enterprise-business"), exports);
5
+ tslib_1.__exportStar(require("./events"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;AAAA,uEAA4C;AAC5C,mDAAwB"}
@@ -0,0 +1,12 @@
1
+ export interface IPaymentServiceCreateEnterpriseBusinessCustomerPayload {
2
+ businessName: string;
3
+ businessAddress: string;
4
+ businessPhoneNumber: string;
5
+ businessEmail: string;
6
+ businessWebsite: string;
7
+ businessType: string;
8
+ subscriptionPlanId: string;
9
+ paymentMethodId: string;
10
+ paymentAmount: number;
11
+ currency: string;
12
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=payloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloads.js","sourceRoot":"","sources":["../../../src/types/payloads.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from './secrets';
2
+ export * from './response';
3
+ export * from './initializers';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./secrets"), exports);
5
+ tslib_1.__exportStar(require("./response"), exports);
6
+ tslib_1.__exportStar(require("./initializers"), exports);
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,oDAA0B;AAC1B,qDAA2B;AAC3B,yDAA+B"}
@@ -0,0 +1,7 @@
1
+ import { Connection } from "mongoose";
2
+ import { InvocationContext } from "@azure/functions";
3
+ import { AzureSecretKeysEnum } from "../enums";
4
+ export declare abstract class Initializers {
5
+ protected db: Connection;
6
+ constructor(context: InvocationContext, dbSecret: AzureSecretKeysEnum);
7
+ }
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ // packages/libs/src/db-initializers.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Initializers = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const mongoose_1 = tslib_1.__importDefault(require("mongoose"));
7
+ const secrets_1 = require("./secrets");
8
+ class Initializers {
9
+ constructor(context, dbSecret) {
10
+ MongoConnectionSingleton
11
+ .getInstance(context, dbSecret)
12
+ .then(conn => {
13
+ this.db = conn;
14
+ context.info("✅ MongoDB initialized");
15
+ })
16
+ .catch(err => {
17
+ context.error("❌ Failed to initialize MongoDB:", err);
18
+ throw err;
19
+ });
20
+ }
21
+ }
22
+ exports.Initializers = Initializers;
23
+ class MongoConnectionSingleton {
24
+ static getInstance(context, secretKey) {
25
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
26
+ if (!this.instances.has(secretKey)) {
27
+ const vaultName = process.env.KEY_VAULT_NAME;
28
+ if (!vaultName)
29
+ throw new Error("Missing KEY_VAULT_NAME env var");
30
+ context.info(`[Mongo] fetching secret "${secretKey}" from vault "${vaultName}"`);
31
+ const uri = yield (0, secrets_1.getAzureVaultSecretByKey)(context, vaultName, secretKey);
32
+ if (!uri)
33
+ throw new Error(`No value for secret "${secretKey}"`);
34
+ context.info("[Mongo] connecting to MongoDB…");
35
+ const conn = yield mongoose_1.default
36
+ .createConnection(uri, {})
37
+ .asPromise();
38
+ context.info("[Mongo] connected to MongoDB");
39
+ this.instances.set(secretKey, conn);
40
+ }
41
+ return this.instances.get(secretKey);
42
+ });
43
+ }
44
+ }
45
+ MongoConnectionSingleton.instances = new Map();
46
+ // import mongoose, { Mongoose } from "mongoose";
47
+ // import { InvocationContext } from "@azure/functions";
48
+ // import { getAzureVaultSecretByKey } from "./secrets";
49
+ // import { AzureSecretKeysEnum } from "../enums";
50
+ // /**
51
+ // * Base class for any service that needs a MongoDB connection.
52
+ // * Pass in the name of the Key Vault secret that holds your MongoDB URI.
53
+ // */
54
+ // export abstract class Initializers {
55
+ // mongoose!: Mongoose;
56
+ // constructor(
57
+ // context: InvocationContext,
58
+ // dbConnectionSecretKey: AzureSecretKeysEnum
59
+ // ) {
60
+ // MongoConnectionSingleton
61
+ // .getInstance(context, dbConnectionSecretKey)
62
+ // .then(singleton => {
63
+ // this.mongoose = singleton.mongoose;
64
+ // })
65
+ // .catch(err => {
66
+ // context.error("Failed to initialize MongoDB:", err);
67
+ // throw err;
68
+ // });
69
+ // }
70
+ // }
71
+ // /**
72
+ // * A singleton manager that caches one mongoose connection per secret key.
73
+ // */
74
+ // class MongoConnectionSingleton {
75
+ // private static instances: Map<AzureSecretKeysEnum, MongoConnectionSingleton> = new Map();
76
+ // public mongoose!: Mongoose;
77
+ // private constructor() { }
78
+ // public static async getInstance(
79
+ // context: InvocationContext,
80
+ // secretKey: AzureSecretKeysEnum
81
+ // ): Promise<MongoConnectionSingleton> {
82
+ // if (!this.instances.has(secretKey)) {
83
+ // const inst = new MongoConnectionSingleton();
84
+ // await inst.connect(context, secretKey);
85
+ // this.instances.set(secretKey, inst);
86
+ // }
87
+ // return this.instances.get(secretKey)!;
88
+ // }
89
+ // private async connect(
90
+ // context: InvocationContext,
91
+ // secretKey: AzureSecretKeysEnum
92
+ // ): Promise<void> {
93
+ // // 1) Fetch vault name and secret
94
+ // const vaultName = process.env.AZURE_KEY_VAULT_NAME!;
95
+ // if (!vaultName) throw new Error("Missing KEY_VAULT_NAME env var");
96
+ // context.info(`[Mongo] Fetching connection string from vault "${vaultName}", secret "${secretKey}"`);
97
+ // const connString = await getAzureVaultSecretByKey(
98
+ // context,
99
+ // vaultName,
100
+ // secretKey
101
+ // );
102
+ // if (!connString) {
103
+ // throw new Error(`No value found for secret "${secretKey}"`);
104
+ // }
105
+ // // 2) Connect via mongoose
106
+ // context.info(`[Mongo] Connecting to MongoDB…`);
107
+ // this.mongoose = await mongoose.connect(connString);
108
+ // context.info(`[Mongo] Connected using secret "${secretKey}"`);
109
+ // }
110
+ // }
111
+ //# sourceMappingURL=initializers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializers.js","sourceRoot":"","sources":["../../../src/utils/initializers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { HttpRequest, HttpResponseInit, InvocationContext } from '@azure/functions';
2
+ export declare function sendResponse(statusCode: number, data?: any, message?: string, headers?: Record<string, string>): HttpResponseInit;
3
+ export declare function asyncHandler(handler: Function): (request: HttpRequest, context: InvocationContext) => Promise<HttpResponseInit>;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sendResponse = sendResponse;
4
+ exports.asyncHandler = asyncHandler;
5
+ const tslib_1 = require("tslib");
6
+ // This function generates a standard response with a structured body: { status, message, data }
7
+ function sendResponse(statusCode, data = null, message = '', headers = { 'Content-Type': 'application/json' }) {
8
+ return {
9
+ status: statusCode,
10
+ body: JSON.stringify({
11
+ status: statusCode,
12
+ message: message || (statusCode >= 200 && statusCode < 300 ? 'Success' : 'Error'),
13
+ data: data,
14
+ }),
15
+ headers: headers,
16
+ };
17
+ }
18
+ // Centralized asyncHandler to catch all errors
19
+ function asyncHandler(handler) {
20
+ return (request, context) => tslib_1.__awaiter(this, void 0, void 0, function* () {
21
+ try {
22
+ context.log('Handling request:', request.url);
23
+ const response = yield handler(request, context); // Call the actual handler logic
24
+ context.log('Response sent:', response.status);
25
+ return response;
26
+ }
27
+ catch (error) {
28
+ console.error('Error occurred:', error);
29
+ context.error('Error occurred:', error);
30
+ return sendResponse(500, null, error.message ? error.message : 'An unexpected error occurred');
31
+ }
32
+ });
33
+ }
34
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/utils/response.ts"],"names":[],"mappings":";;AAGA,oCAeC;AAGD,oCAaC;;AAhCD,gGAAgG;AAChG,SAAgB,YAAY,CACxB,UAAkB,EAClB,OAAY,IAAI,EAChB,UAAkB,EAAE,EACpB,UAAkC,EAAE,cAAc,EAAE,kBAAkB,EAAE;IAExE,OAAO;QACH,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACjB,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;YACjF,IAAI,EAAE,IAAI;SACb,CAAC;QACF,OAAO,EAAE,OAAO;KACnB,CAAC;AACN,CAAC;AAED,+CAA+C;AAC/C,SAAgB,YAAY,CAAC,OAAiB;IAC1C,OAAO,CAAO,OAAoB,EAAE,OAA0B,EAA6B,EAAE;QACzF,IAAI,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAE,gCAAgC;YACnF,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/C,OAAO,QAAQ,CAAC;QACpB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YACxC,OAAO,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC;QACnG,CAAC;IACL,CAAC,CAAA,CAAC;AACN,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { InvocationContext } from "@azure/functions";
2
+ import { AzureSecretKeysEnum } from "../enums";
3
+ /**
4
+ * Fetches a secret value from Azure Key Vault by key.
5
+ * @param key - The key name from the AzureSecretKeysEnum enum.
6
+ * @returns The secret value.
7
+ * @throws Error if the key is invalid or if the secret fetch fails.
8
+ */
9
+ export declare function getAzureVaultSecretByKey(context: InvocationContext, azureVaultName: string, key: AzureSecretKeysEnum): Promise<string>;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAzureVaultSecretByKey = getAzureVaultSecretByKey;
4
+ const tslib_1 = require("tslib");
5
+ const identity_1 = require("@azure/identity");
6
+ const keyvault_secrets_1 = require("@azure/keyvault-secrets");
7
+ const enums_1 = require("../enums");
8
+ /**
9
+ * Fetches a secret value from Azure Key Vault by key.
10
+ * @param key - The key name from the AzureSecretKeysEnum enum.
11
+ * @returns The secret value.
12
+ * @throws Error if the key is invalid or if the secret fetch fails.
13
+ */
14
+ function getAzureVaultSecretByKey(context, azureVaultName, key) {
15
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
16
+ try {
17
+ // Azure Key Vault URL
18
+ const vaultName = azureVaultName || "";
19
+ const vaultUrl = `https://${vaultName}.vault.azure.net`;
20
+ // Initialize SecretClient
21
+ const credential = new identity_1.DefaultAzureCredential();
22
+ const client = new keyvault_secrets_1.SecretClient(vaultUrl, credential);
23
+ // Validate the key using a switch case
24
+ switch (key) {
25
+ case enums_1.AzureSecretKeysEnum.STRIPE_SECRET_KEY:
26
+ case enums_1.AzureSecretKeysEnum.STRIPE_PAYMENT_WEBHOOK_SECRET_KEY:
27
+ case enums_1.AzureSecretKeysEnum.STRIPE_PRODUCT_WEBHOOK_SECRET:
28
+ case enums_1.AzureSecretKeysEnum.STRIPE_PRICE_WEBHOOK_SECRET:
29
+ case enums_1.AzureSecretKeysEnum.EMAIL_SERVICE_URL:
30
+ case enums_1.AzureSecretKeysEnum.STRIPE_CUSTOMER_SYNC_WEBHOOK_SECRET_KEY:
31
+ const secret = yield client.getSecret(key);
32
+ return secret.value || "";
33
+ default:
34
+ throw new Error(`Invalid key name: ${key}`);
35
+ }
36
+ }
37
+ catch (err) {
38
+ context.error(`Error fetching secret for key ${key}:`, err);
39
+ throw new Error(`Failed to fetch secret for key ${key}`);
40
+ }
41
+ });
42
+ }
43
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../../src/utils/secrets.ts"],"names":[],"mappings":";;AAWA,4DAiCC;;AA5CD,8CAAyD;AACzD,8DAAuD;AAEvD,oCAA+C;AAE/C;;;;;EAKE;AACF,SAAsB,wBAAwB,CAC5C,OAA0B,EAC1B,cAAsB,EACtB,GAAwB;;QAExB,IAAI,CAAC;YAEH,sBAAsB;YACtB,MAAM,SAAS,GAAG,cAAc,IAAI,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,WAAW,SAAS,kBAAkB,CAAC;YAExD,0BAA0B;YAC1B,MAAM,UAAU,GAAG,IAAI,iCAAsB,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,+BAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAEtD,uCAAuC;YACvC,QAAQ,GAAG,EAAE,CAAC;gBAEZ,KAAK,2BAAmB,CAAC,iBAAiB,CAAC;gBAC3C,KAAK,2BAAmB,CAAC,iCAAiC,CAAC;gBAC3D,KAAK,2BAAmB,CAAC,6BAA6B,CAAC;gBACvD,KAAK,2BAAmB,CAAC,2BAA2B,CAAC;gBACrD,KAAK,2BAAmB,CAAC,iBAAiB,CAAC;gBAC3C,KAAK,2BAAmB,CAAC,uCAAuC;oBAC9D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBAC3C,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC5B;oBACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CAAA"}
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@culturefy/shared",
3
3
  "description": "Shared utilities for culturefy serverless services",
4
- "version": "1.0.3",
5
- "types": "./src/index.d.ts",
6
- "files": ["dist", "src"],
4
+ "version": "1.0.4",
5
+ "types": "build/src/index.d.ts",
6
+ "files": ["build", "src"],
7
7
  "scripts": {
8
8
  "build": "npm run build:cjs && npm run build:esm && tsc --outDir build/src && node scripts/build-package.js",
9
9
  "build:cjs": "NODE_ENV=production BABEL_ENV=cjs babel src --presets=./scripts/babel-preset.js --extensions .ts,.tsx --ignore src/**/*.specs.tsx --out-dir build/cjs --source-maps",
10
- "build:esm": "NODE_ENV=production BABEL_ENV=esm babel src --presets=./scripts/babel-preset.js --extensions .ts,.tsx --ignore src/**/*.specs.tsx --out-dir build/esm --source-maps"
10
+ "build:esm": "NODE_ENV=production BABEL_ENV=esm babel src --presets=./scripts/babel-preset.js --extensions .ts,.tsx --ignore src/**/*.specs.tsx --out-dir build/esm --source-maps",
11
+ "prepublishOnly": "npm run build"
11
12
  },
12
13
  "publishConfig": {
13
14
  "registry": "https://registry.npmjs.org/",
@@ -20,8 +21,8 @@
20
21
  },
21
22
  "exports": {
22
23
  ".": {
23
- "import": "./src/index.js",
24
- "require": "./src/index.js"
24
+ "require": "./build/cjs/src/index.js",
25
+ "import": "./build/esm/src/index.js"
25
26
  }
26
27
  },
27
28
  "keywords": ["culturefy","serverless","shared"],