@unchainedshop/plugins 4.3.3 → 4.3.5

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 (102) hide show
  1. package/lib/files/gridfs/module.d.ts.map +1 -1
  2. package/lib/files/gridfs/module.js +9 -0
  3. package/lib/files/gridfs/module.js.map +1 -1
  4. package/lib/payment/braintree.js +11 -6
  5. package/lib/payment/braintree.js.map +1 -1
  6. package/lib/payment/paypal-checkout.js +2 -1
  7. package/lib/payment/paypal-checkout.js.map +1 -1
  8. package/lib/payment/stripe/handler-express.d.ts.map +1 -1
  9. package/lib/payment/stripe/handler-express.js +1 -2
  10. package/lib/payment/stripe/handler-express.js.map +1 -1
  11. package/lib/payment/stripe/handler-fastify.d.ts.map +1 -1
  12. package/lib/payment/stripe/handler-fastify.js +1 -2
  13. package/lib/payment/stripe/handler-fastify.js.map +1 -1
  14. package/lib/payment/stripe/index.js +2 -9
  15. package/lib/payment/stripe/index.js.map +1 -1
  16. package/lib/payment/stripe/stripe.d.ts +5 -6
  17. package/lib/payment/stripe/stripe.d.ts.map +1 -1
  18. package/lib/payment/stripe/stripe.js +12 -20
  19. package/lib/payment/stripe/stripe.js.map +1 -1
  20. package/lib/pricing/order-round.js +1 -1
  21. package/lib/pricing/order-round.js.map +1 -1
  22. package/package.json +3 -3
  23. package/src/files/gridfs/module.ts +10 -0
  24. package/src/payment/braintree.ts +11 -7
  25. package/src/payment/paypal-checkout.ts +5 -2
  26. package/src/payment/stripe/handler-express.ts +1 -2
  27. package/src/payment/stripe/handler-fastify.ts +1 -2
  28. package/src/payment/stripe/index.ts +2 -9
  29. package/src/payment/stripe/stripe.ts +14 -26
  30. package/src/pricing/order-round.ts +1 -1
  31. package/lib/accounts/google-oauth.d.ts +0 -4
  32. package/lib/accounts/google-oauth.d.ts.map +0 -1
  33. package/lib/accounts/google-oauth.js +0 -145
  34. package/lib/accounts/google-oauth.js.map +0 -1
  35. package/lib/accounts/linkedin-oauth.d.ts +0 -4
  36. package/lib/accounts/linkedin-oauth.d.ts.map +0 -1
  37. package/lib/accounts/linkedin-oauth.js +0 -82
  38. package/lib/accounts/linkedin-oauth.js.map +0 -1
  39. package/lib/delivery/pick-mup.d.ts +0 -2
  40. package/lib/delivery/pick-mup.d.ts.map +0 -1
  41. package/lib/delivery/pick-mup.js +0 -94
  42. package/lib/delivery/pick-mup.js.map +0 -1
  43. package/lib/files/gridfs/gridfs-adapter.d.ts +0 -3
  44. package/lib/files/gridfs/gridfs-adapter.d.ts.map +0 -1
  45. package/lib/files/gridfs/gridfs-adapter.js +0 -97
  46. package/lib/files/gridfs/gridfs-adapter.js.map +0 -1
  47. package/lib/files/gridfs/gridfs-webhook.d.ts +0 -11
  48. package/lib/files/gridfs/gridfs-webhook.d.ts.map +0 -1
  49. package/lib/files/gridfs/gridfs-webhook.js +0 -84
  50. package/lib/files/gridfs/gridfs-webhook.js.map +0 -1
  51. package/lib/files/minio/minio-adapter.d.ts +0 -6
  52. package/lib/files/minio/minio-adapter.d.ts.map +0 -1
  53. package/lib/files/minio/minio-adapter.js +0 -181
  54. package/lib/files/minio/minio-adapter.js.map +0 -1
  55. package/lib/files/minio/minio-webhook.d.ts +0 -2
  56. package/lib/files/minio/minio-webhook.d.ts.map +0 -1
  57. package/lib/files/minio/minio-webhook.js +0 -33
  58. package/lib/files/minio/minio-webhook.js.map +0 -1
  59. package/lib/payment/apple-iap/module/configureAppleTransactionsModule.d.ts +0 -9
  60. package/lib/payment/apple-iap/module/configureAppleTransactionsModule.d.ts.map +0 -1
  61. package/lib/payment/apple-iap/module/configureAppleTransactionsModule.js +0 -17
  62. package/lib/payment/apple-iap/module/configureAppleTransactionsModule.js.map +0 -1
  63. package/lib/payment/cryptopay/middleware.d.ts +0 -2
  64. package/lib/payment/cryptopay/middleware.d.ts.map +0 -1
  65. package/lib/payment/cryptopay/middleware.js +0 -75
  66. package/lib/payment/cryptopay/middleware.js.map +0 -1
  67. package/lib/payment/cryptopay/module/configureCryptopayModule.d.ts +0 -25
  68. package/lib/payment/cryptopay/module/configureCryptopayModule.d.ts.map +0 -1
  69. package/lib/payment/cryptopay/module/configureCryptopayModule.js +0 -75
  70. package/lib/payment/cryptopay/module/configureCryptopayModule.js.map +0 -1
  71. package/lib/payment/datatrans-v2/middleware.d.ts +0 -2
  72. package/lib/payment/datatrans-v2/middleware.d.ts.map +0 -1
  73. package/lib/payment/datatrans-v2/middleware.js +0 -68
  74. package/lib/payment/datatrans-v2/middleware.js.map +0 -1
  75. package/lib/payment/payrexx/middleware.d.ts +0 -2
  76. package/lib/payment/payrexx/middleware.d.ts.map +0 -1
  77. package/lib/payment/payrexx/middleware.js +0 -86
  78. package/lib/payment/payrexx/middleware.js.map +0 -1
  79. package/lib/payment/postfinance-checkout/middleware.d.ts +0 -2
  80. package/lib/payment/postfinance-checkout/middleware.d.ts.map +0 -1
  81. package/lib/payment/postfinance-checkout/middleware.js +0 -38
  82. package/lib/payment/postfinance-checkout/middleware.js.map +0 -1
  83. package/lib/payment/saferpay/middleware.d.ts +0 -2
  84. package/lib/payment/saferpay/middleware.d.ts.map +0 -1
  85. package/lib/payment/saferpay/middleware.js +0 -57
  86. package/lib/payment/saferpay/middleware.js.map +0 -1
  87. package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.d.ts +0 -10
  88. package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.d.ts.map +0 -1
  89. package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.js +0 -24
  90. package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.js.map +0 -1
  91. package/lib/payment/stripe/middleware.d.ts +0 -6
  92. package/lib/payment/stripe/middleware.d.ts.map +0 -1
  93. package/lib/payment/stripe/middleware.js +0 -114
  94. package/lib/payment/stripe/middleware.js.map +0 -1
  95. package/lib/plugins-index.d.ts +0 -48
  96. package/lib/plugins-index.d.ts.map +0 -1
  97. package/lib/plugins-index.js +0 -107
  98. package/lib/plugins-index.js.map +0 -1
  99. package/lib/worker/sms.d.ts +0 -2
  100. package/lib/worker/sms.d.ts.map +0 -1
  101. package/lib/worker/sms.js +0 -73
  102. package/lib/worker/sms.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { createLogger } from '@unchainedshop/logger';
2
- import stripeClient, { createOrderPaymentIntent, createRegistrationIntent } from './stripe.js';
2
+ import { stripe, createOrderPaymentIntent, createRegistrationIntent } from './stripe.js';
3
3
  import {
4
4
  OrderPricingSheet,
5
5
  IPaymentAdapter,
@@ -42,11 +42,7 @@ const Stripe: IPaymentAdapter = {
42
42
  ...PaymentAdapter.actions(config, context),
43
43
 
44
44
  configurationError() {
45
- try {
46
- stripeClient();
47
- } catch {
48
- return PaymentError.INCOMPLETE_CONFIGURATION;
49
- }
45
+ if (!stripe) return PaymentError.INCOMPLETE_CONFIGURATION;
50
46
  return null;
51
47
  },
52
48
 
@@ -60,13 +56,11 @@ const Stripe: IPaymentAdapter = {
60
56
  },
61
57
 
62
58
  validate: async ({ token }) => {
63
- const stripe = stripeClient();
64
59
  const paymentMethod = await stripe.paymentMethods.retrieve(token);
65
60
  return !!paymentMethod;
66
61
  },
67
62
 
68
63
  register: async ({ setupIntentId }) => {
69
- const stripe = stripeClient();
70
64
  if (!setupIntentId) {
71
65
  throw new Error('You have to provide a setupIntentId');
72
66
  }
@@ -110,7 +104,6 @@ const Stripe: IPaymentAdapter = {
110
104
  },
111
105
 
112
106
  charge: async ({ paymentIntentId, paymentCredentials }) => {
113
- const stripe = stripeClient();
114
107
  if (!paymentIntentId && !paymentCredentials) {
115
108
  throw new Error('You have to provide paymentIntentId or paymentCredentials');
116
109
  }
@@ -1,42 +1,30 @@
1
- import { IOrderPricingSheet } from '@unchainedshop/core';
1
+ import type { Stripe } from 'stripe';
2
+ import type { IOrderPricingSheet } from '@unchainedshop/core';
2
3
  import { Order, OrderPayment } from '@unchainedshop/core-orders';
3
4
  import { createLogger } from '@unchainedshop/logger';
4
- import { Stripe as StripeType } from 'stripe';
5
5
 
6
6
  const logger = createLogger('unchained:stripe');
7
7
 
8
8
  const { STRIPE_SECRET, STRIPE_WEBHOOK_ENVIRONMENT, EMAIL_WEBSITE_NAME } = process.env;
9
9
 
10
- let stripe: Awaited<ReturnType<typeof initStripeClient>> | null;
10
+ export let stripe: Stripe;
11
+ const environment = STRIPE_WEBHOOK_ENVIRONMENT ?? null;
11
12
 
12
- export const initStripeClient = async (): Promise<StripeType | null> => {
13
+ try {
13
14
  if (!STRIPE_SECRET) {
14
15
  logger.warn('STRIPE_SECRET is not set, skipping initialization');
15
- return Promise.resolve(null);
16
16
  }
17
- // eslint-disable-next-line
18
- // @ts-ignore
19
17
  const { default: Stripe } = await import('stripe');
20
- stripe = new Stripe(STRIPE_SECRET, {
21
- apiVersion: '2025-10-29.clover',
18
+ stripe = new Stripe(STRIPE_SECRET as string, {
19
+ apiVersion: '2025-11-17.clover',
22
20
  });
23
- return stripe;
24
- };
25
-
26
- initStripeClient().catch(logger.warn);
27
-
28
- export default function getStripe() {
29
- if (!stripe) {
30
- throw new Error('Stripe client not initialized');
31
- }
32
- return stripe;
21
+ } catch {
22
+ logger.warn(`optional peer npm package 'stripe' not installed, stripe adapter will not work`);
33
23
  }
34
24
 
35
- const environment = STRIPE_WEBHOOK_ENVIRONMENT ?? null;
36
-
37
25
  export const upsertCustomer = async ({ userId, name, email }): Promise<string> => {
38
26
  try {
39
- const { data } = await getStripe().customers.search({ query: `metadata["userId"]:"${userId}"` });
27
+ const { data } = await stripe.customers.search({ query: `metadata["userId"]:"${userId}"` });
40
28
  const existingCustomer = data[0];
41
29
 
42
30
  if (
@@ -44,7 +32,7 @@ export const upsertCustomer = async ({ userId, name, email }): Promise<string> =
44
32
  existingCustomer.email !== email ||
45
33
  existingCustomer.metadata.environment !== environment
46
34
  ) {
47
- const updatedCustomer = await getStripe().customers.update(existingCustomer.id, {
35
+ const updatedCustomer = await stripe.customers.update(existingCustomer.id, {
48
36
  metadata: {
49
37
  userId,
50
38
  environment,
@@ -57,7 +45,7 @@ export const upsertCustomer = async ({ userId, name, email }): Promise<string> =
57
45
 
58
46
  return existingCustomer.id;
59
47
  } catch {
60
- const customer = await getStripe().customers.create({
48
+ const customer = await stripe.customers.create({
61
49
  metadata: {
62
50
  userId,
63
51
  environment: STRIPE_WEBHOOK_ENVIRONMENT ?? null,
@@ -89,7 +77,7 @@ export const createRegistrationIntent = async (
89
77
  const description =
90
78
  `${options?.description || descriptorPrefix || EMAIL_WEBSITE_NAME || 'Unchained'}`.trim();
91
79
 
92
- const setupIntent = await getStripe().setupIntents.create({
80
+ const setupIntent = await stripe.setupIntents.create({
93
81
  description,
94
82
  customer,
95
83
  metadata: {
@@ -129,7 +117,7 @@ export const createOrderPaymentIntent = async (
129
117
 
130
118
  const { currencyCode, amount } = pricing.total({ useNetPrice: false });
131
119
 
132
- const paymentIntent = await getStripe().paymentIntents.create({
120
+ const paymentIntent = await stripe.paymentIntents.create({
133
121
  amount: Math.round(amount),
134
122
  currency: currencyCode.toLowerCase(),
135
123
  description,
@@ -25,7 +25,7 @@ export const OrderPriceRound: IOrderPricingAdapter & {
25
25
  } = {
26
26
  ...OrderPricingAdapter,
27
27
 
28
- key: 'shop.unchained.pricing.order-round-fixed',
28
+ key: 'shop.unchained.pricing.order-round',
29
29
  version: '1.0.0',
30
30
  label: 'Round order price to the next precision number',
31
31
  orderIndex: 90,
@@ -1,4 +0,0 @@
1
- import { IOAuth2Adapter } from '@unchainedshop/types/accounts.js';
2
- declare const GoogleOAuth2Adapter: IOAuth2Adapter;
3
- export default GoogleOAuth2Adapter;
4
- //# sourceMappingURL=google-oauth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-oauth.d.ts","sourceRoot":"","sources":["../../src/accounts/google-oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAmFlE,QAAA,MAAM,mBAAmB,EAAE,cA4F1B,CAAC;AAIF,eAAe,mBAAmB,CAAC"}
@@ -1,145 +0,0 @@
1
- import { OAuth2Director, OAuth2Adapter } from '@unchainedshop/core-accountsjs';
2
- const { GOOGLE_OAUTH_CLIENT_ID, GOOGLE_OAUTH_CLIENT_SECRET } = process.env;
3
- const getGoggleAuthorizationCode = async ({ code, redirectUri, clientId, clientSecret, }) => {
4
- const response = await fetch('https://oauth2.googleapis.com/token', {
5
- method: 'POST',
6
- headers: {
7
- 'Content-Type': 'application/json',
8
- },
9
- // eslint-disable-next-line
10
- // @ts-ignore
11
- duplex: 'half',
12
- body: JSON.stringify({
13
- code,
14
- client_id: clientId,
15
- grant_type: 'authorization_code',
16
- client_secret: clientSecret,
17
- redirect_uri: redirectUri,
18
- access_type: 'offline',
19
- }),
20
- });
21
- return response.json();
22
- };
23
- const normalizeProfileData = (data) => {
24
- const { names = [], genders = [], addresses = [], emailAddresses = [], phoneNumbers = [], birthdays = [], photos = [], } = data;
25
- const [name] = names;
26
- const [gender] = genders;
27
- const [email] = emailAddresses;
28
- const [birthday] = birthdays;
29
- const [phone] = phoneNumbers;
30
- const [address] = addresses;
31
- const [photo] = photos;
32
- return {
33
- id: data.sub,
34
- firstName: name?.givenName,
35
- lastName: name?.familyName,
36
- displayName: name?.displayName,
37
- gender: gender?.value,
38
- email: email?.value,
39
- birthDate: birthday?.date
40
- ? new Date(birthday?.date?.year ?? 0, birthdays?.date?.month ?? 0, birthday?.date?.day ?? 0)
41
- : undefined,
42
- phoneNumber: phone?.canonicalForm,
43
- address: address?.formattedValue,
44
- avatarUrl: photo?.url,
45
- };
46
- };
47
- const parseGoogleIdToken = (idToken) => {
48
- const [, base64UserInfo] = idToken.split('.');
49
- const buff = Buffer.from(base64UserInfo, 'base64');
50
- const data = JSON.parse(buff.toString());
51
- return {
52
- id: data.sub,
53
- email: data?.email,
54
- firstName: data?.given_name,
55
- lastName: data?.family_name,
56
- avatarUrl: data?.picture,
57
- fullName: data?.name,
58
- exp: data?.exp,
59
- ...data,
60
- };
61
- };
62
- const GoogleOAuth2Adapter = {
63
- ...OAuth2Adapter,
64
- key: 'google-oauth2',
65
- label: 'Google Oauth',
66
- version: '1',
67
- provider: 'google',
68
- config: {
69
- clientId: GOOGLE_OAUTH_CLIENT_ID,
70
- scopes: [
71
- 'genders',
72
- 'emailAddresses',
73
- 'phoneNumbers',
74
- 'addresses',
75
- 'birthdays',
76
- 'metadata',
77
- 'names',
78
- 'photos',
79
- 'locations',
80
- ],
81
- },
82
- actions: () => {
83
- return {
84
- ...OAuth2Adapter.actions(null),
85
- configurationError: () => {
86
- return '';
87
- },
88
- isActive: () => {
89
- return Boolean(GOOGLE_OAUTH_CLIENT_ID && GOOGLE_OAUTH_CLIENT_SECRET);
90
- },
91
- getAuthorizationToken: async (authorizationCode, redirectUrl) => {
92
- return getGoggleAuthorizationCode({
93
- code: authorizationCode,
94
- clientId: GoogleOAuth2Adapter.config.clientId,
95
- redirectUri: redirectUrl,
96
- clientSecret: GOOGLE_OAUTH_CLIENT_SECRET,
97
- });
98
- },
99
- getAccountData: async ({ access_token, id_token }) => {
100
- const response = await fetch(`https://people.googleapis.com/v1/people/me?personFields=${GoogleOAuth2Adapter.config.scopes.join(',')}`, {
101
- headers: {
102
- Authorization: `Bearer ${access_token}`,
103
- },
104
- });
105
- if (response.status === 403)
106
- return parseGoogleIdToken(id_token);
107
- const profileInfoJSON = await response.json();
108
- if (profileInfoJSON?.error)
109
- throw new Error(profileInfoJSON?.error.message);
110
- return normalizeProfileData(profileInfoJSON);
111
- },
112
- isTokenValid: async (accessToken) => {
113
- const response = await fetch(`https://oauth2.googleapis.com/tokeninfo?id_token=${accessToken?.id_token}`);
114
- const tokenInfo = await response.json();
115
- if (tokenInfo.error) {
116
- return false;
117
- }
118
- return true;
119
- },
120
- refreshToken: async ({ refresh_token }) => {
121
- const response = await fetch('https://oauth2.googleapis.com/token', {
122
- method: 'POST',
123
- // eslint-disable-next-line
124
- // @ts-ignore
125
- duplex: 'half',
126
- headers: {
127
- 'Content-Type': 'application/json',
128
- },
129
- body: JSON.stringify({
130
- client_id: GoogleOAuth2Adapter.config.clientId,
131
- grant_type: 'refresh_token',
132
- client_secret: GOOGLE_OAUTH_CLIENT_SECRET,
133
- refresh_token,
134
- access_type: 'offline',
135
- }),
136
- });
137
- const refreshedAccessToken = await response.json();
138
- return refreshedAccessToken;
139
- },
140
- };
141
- },
142
- };
143
- OAuth2Director.registerAdapter(GoogleOAuth2Adapter);
144
- export default GoogleOAuth2Adapter;
145
- //# sourceMappingURL=google-oauth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-oauth.js","sourceRoot":"","sources":["../../src/accounts/google-oauth.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { IOAuth2Adapter } from '@unchainedshop/types/accounts.js';
2
- declare const LinkedInOAuthAdapter: IOAuth2Adapter;
3
- export default LinkedInOAuthAdapter;
4
- //# sourceMappingURL=linkedin-oauth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"linkedin-oauth.d.ts","sourceRoot":"","sources":["../../src/accounts/linkedin-oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AA2ClE,QAAA,MAAM,oBAAoB,EAAE,cAsD3B,CAAC;AAIF,eAAe,oBAAoB,CAAC"}
@@ -1,82 +0,0 @@
1
- import { OAuth2Director, OAuth2Adapter } from '@unchainedshop/core-accountsjs';
2
- const { LINKED_IN_OAUTH_CLIENT_ID, LINKED_IN_OAUTH_CLIENT_SECRET } = process.env;
3
- const getLinkedInAuthorizationCode = async ({ code, redirectUri, clientId, clientSecret, }) => {
4
- const response = await fetch('https://www.linkedin.com/oauth/v2/accessToken', {
5
- method: 'POST',
6
- // eslint-disable-next-line
7
- // @ts-ignore
8
- duplex: 'half',
9
- headers: {
10
- 'Content-Type': 'application/x-www-form-urlencoded',
11
- },
12
- body: new URLSearchParams({
13
- code,
14
- client_id: clientId,
15
- grant_type: 'authorization_code',
16
- client_secret: clientSecret,
17
- redirect_uri: redirectUri,
18
- }),
19
- });
20
- return response.json();
21
- };
22
- const normalizeProfileData = (data) => {
23
- const { name, given_name, family_name, email, email_verified, picture, sub } = data;
24
- return {
25
- id: sub,
26
- displayName: name,
27
- firstName: given_name,
28
- lastName: family_name,
29
- email: email_verified ? email : undefined,
30
- avatarUrl: picture,
31
- };
32
- };
33
- const LinkedInOAuthAdapter = {
34
- ...OAuth2Adapter,
35
- key: 'linked-in-oauth2',
36
- label: 'LinkedIn Oauth',
37
- version: '1',
38
- provider: 'linkedin',
39
- config: {
40
- clientId: LINKED_IN_OAUTH_CLIENT_ID,
41
- scopes: ['r_liteprofile', 'r_emailaddress', 'email', 'openid', 'profile'],
42
- },
43
- actions: () => {
44
- return {
45
- ...OAuth2Adapter.actions(null),
46
- configurationError: () => {
47
- return '';
48
- },
49
- isActive: () => {
50
- return Boolean(LINKED_IN_OAUTH_CLIENT_ID && LINKED_IN_OAUTH_CLIENT_SECRET);
51
- },
52
- getAuthorizationToken: async (authorizationCode, redirectUrl) => {
53
- return getLinkedInAuthorizationCode({
54
- code: authorizationCode,
55
- clientId: LinkedInOAuthAdapter.config.clientId,
56
- redirectUri: redirectUrl,
57
- clientSecret: LINKED_IN_OAUTH_CLIENT_SECRET,
58
- });
59
- },
60
- getAccountData: async ({ access_token }) => {
61
- const response = await fetch('https://api.linkedin.com/v2/userinfo', {
62
- headers: {
63
- Authorization: `Bearer ${access_token}`,
64
- },
65
- });
66
- const profileInfoJSON = await response.json();
67
- return normalizeProfileData(profileInfoJSON);
68
- },
69
- isTokenValid: async ({ access_token }) => {
70
- const response = await fetch(`https://api.linkedin.com/oauth/v2/accessTokenValidation?q=full&access_token=${access_token}`);
71
- const tokenInfo = await response.json();
72
- if (tokenInfo.error) {
73
- return false;
74
- }
75
- return true;
76
- },
77
- };
78
- },
79
- };
80
- OAuth2Director.registerAdapter(LinkedInOAuthAdapter);
81
- export default LinkedInOAuthAdapter;
82
- //# sourceMappingURL=linkedin-oauth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"linkedin-oauth.js","sourceRoot":"","sources":["../../src/accounts/linkedin-oauth.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=pick-mup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pick-mup.d.ts","sourceRoot":"","sources":["../../src/delivery/pick-mup.ts"],"names":[],"mappings":""}
@@ -1,94 +0,0 @@
1
- import { DeliveryAdapter, DeliveryDirector, DeliveryError } from '@unchainedshop/core';
2
- import { DeliveryProviderType } from '@unchainedshop/core-delivery';
3
- const fetchPickMupLocations = async (key, idsFilter) => {
4
- // const pickMupUrl = `https://web-api.migros.ch/widgets/stores?key=${key}&verbosity=detail&limit=5000&aggregation_options%5Bempty_buckets%5D=true&filters%5Bmarkets%5D%5B0%5D%5B%5D=super&filters%5Bmarkets%5D%5B0%5D%5B%5D=mno&filters%5Bmarkets%5D%5B0%5D%5B%5D=voi&filters%5Bmarkets%5D%5B0%5D%5B%5D=mp&filters%5Bmarkets%5D%5B0%5D%5B%5D=out&filters%5Bmarkets%5D%5B0%5D%5B%5D=spx&filters%5Bmarkets%5D%5B0%5D%5B%5D=doi&filters%5Bmarkets%5D%5B0%5D%5B%5D=mec&filters%5Bmarkets%5D%5B0%5D%5B%5D=mica&filters%5Bmarkets%5D%5B0%5D%5B%5D=res&filters%5Bmarkets%5D%5B0%5D%5B%5D=flori&filters%5Bmarkets%5D%5B0%5D%5B%5D=gour&filters%5Bmarkets%5D%5B0%5D%5B%5D=alna&filters%5Bmarkets%5D%5B0%5D%5B%5D=cof&filters%5Bmarkets%5D%5B0%5D%5B%5D=chng&filters%5Bservices%5D%5Bsub_type%5D%5B%5D=pickmup&aggregation_groups%5B_custom%5D%5Bopen_on%5D%5Bnow%5D=20190923T11%3A45&aggregation_groups%5B_custom%5D%5Bopen_on%5D%5Bafter_1900%5D=20190923T19%3A01&aggregation_groups%5B_custom%5D%5Bopen_on%5D%5Bsundays%5D=sunday&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=super&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=voi&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=mp&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=mec&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=spx&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=doi&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=mica&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=out&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=flori&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=alna&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=res&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=gour&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=cof&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=res&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=gour&aggregation_groups%5Bmarkets%5D%5B_terms%5D%5B%5D=cof&aggregation_groups%5Bservices%5D%5Bsub_type%5D%5B_terms%5D%5B%5D=market-service-mig_clean&aggregation_groups%5Bservices%5D%5Bsub_type%5D%5B_terms%5D%5B%5D=market-service-mig_online&aggregation_groups%5Bservices%5D%5Bsub_type%5D%5B_terms%5D%5B%5D=pickmup&aggregation_groups%5Bservices%5D%5Bsub_type%5D%5B_terms%5D%5B%5D=post-service-point&aggregation_groups%5Bservices%5D%5Bsub_type%5D%5B_terms%5D%5B%5D=subito-selfscanning&aggregation_groups%5Bservices%5D%5Bsub_type%5D%5B_terms%5D%5B%5D=subito-selfcheckout&aggregation_groups%5Bservices%5D%5Bsub_type%5D%5B_terms%5D%5B%5D=market-service-mig_bakery&aggregation_groups%5Bservices%5D%5Bsub_type%5D%5B_terms%5D%5B%5D=counter-mez&aggregation_groups%5Bservices%5D%5Bsub_type%5D%5B_terms%5D%5B%5D=counter-fisch&aggregation_groups%5Bservices%5D%5Bsub_type%5D%5B_terms%5D%5B%5D=counter-kaes&aggregation_groups%5Bservices%5D%5Bsub_type%5D%5B_terms%5D%5B%5D=srv`;
5
- const pickMupUrl = '';
6
- const data = await fetch(`${pickMupUrl}${idsFilter ? `&ids[]=${idsFilter}` : ''}`, {
7
- headers: {
8
- accept: 'application/json, text/javascript, */*; q=0.01',
9
- 'accept-language': 'de',
10
- 'sec-fetch-mode': 'cors',
11
- origin: 'https://filialen.migros.ch',
12
- DNT: '1',
13
- 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36',
14
- },
15
- body: null,
16
- method: 'GET',
17
- });
18
- const result = await data.json();
19
- const { stores = [] } = result || {};
20
- return stores.flatMap(({ markets = [], location = {}, id }) => {
21
- return markets.map(({ full_name: fullName }) => {
22
- const { geo: { lat, lon }, zip, country, address, city, address2, } = location;
23
- return {
24
- _id: id,
25
- name: fullName,
26
- address: {
27
- addressLine: address,
28
- addressLine2: address2,
29
- postalCode: zip,
30
- countryCode: country,
31
- city,
32
- },
33
- geoPoint: {
34
- latitude: lat,
35
- longitude: lon,
36
- },
37
- };
38
- });
39
- });
40
- };
41
- const PickMup = {
42
- ...DeliveryAdapter,
43
- key: 'shop.unchained.pick-mup',
44
- label: 'Migros PickMUp',
45
- version: '1.0.0',
46
- initialConfiguration: [
47
- {
48
- key: 'key',
49
- value: '',
50
- },
51
- ],
52
- typeSupported: (type) => {
53
- return type === DeliveryProviderType.PICKUP;
54
- },
55
- actions: (config, context) => {
56
- const getKey = () => {
57
- // Load https://filialen.migros.ch/de/filter:market_services-pickmup, open the browser developer tools and look for the sessionKey:
58
- // <html lang="de" data-setup="{'env': 'production','sessionKey': '8ApUDaqeNER3Mest'}" class="no-js">
59
- return config.reduce((current, item) => {
60
- if (item.key === 'key')
61
- return item.value;
62
- return current;
63
- }, '');
64
- };
65
- return {
66
- ...DeliveryAdapter.actions(config, context),
67
- isActive: () => {
68
- return true;
69
- },
70
- isAutoReleaseAllowed: () => {
71
- return true;
72
- },
73
- configurationError: () => {
74
- if (!getKey()) {
75
- return DeliveryError.INCOMPLETE_CONFIGURATION;
76
- }
77
- return null;
78
- },
79
- pickUpLocationById: async (id) => {
80
- const [foundLocation] = await fetchPickMupLocations(getKey(), id);
81
- return foundLocation;
82
- },
83
- pickUpLocations: async () => {
84
- const result = await fetchPickMupLocations(getKey());
85
- return result;
86
- },
87
- send: async () => {
88
- return false;
89
- },
90
- };
91
- },
92
- };
93
- DeliveryDirector.registerAdapter(PickMup);
94
- //# sourceMappingURL=pick-mup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pick-mup.js","sourceRoot":"","sources":["../../src/delivery/pick-mup.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { IFileAdapter } from '@unchainedshop/file-upload';
2
- export declare const GridFSAdapter: IFileAdapter;
3
- //# sourceMappingURL=gridfs-adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gridfs-adapter.d.ts","sourceRoot":"","sources":["../../../src/files/gridfs/gridfs-adapter.ts"],"names":[],"mappings":"AAKA,OAAO,EAKL,YAAY,EACb,MAAM,4BAA4B,CAAC;AAcpC,eAAO,MAAM,aAAa,EAAE,YAkH3B,CAAC"}
@@ -1,97 +0,0 @@
1
- /// <reference lib="dom" />
2
- import { URL } from 'url';
3
- import { Readable, PassThrough } from 'stream';
4
- import { pipeline } from 'stream/promises';
5
- import mimeType from 'mime-types';
6
- import { FileAdapter, FileDirector, buildHashedFilename, resolveExpirationDate, } from '@unchainedshop/file-upload';
7
- import sign from './sign.js';
8
- const { ROOT_URL } = process.env;
9
- const bufferToStream = (buffer) => {
10
- const stream = new Readable();
11
- stream.push(buffer);
12
- stream.push(null);
13
- return stream;
14
- };
15
- export const GridFSAdapter = {
16
- key: 'shop.unchained.file-upload-plugin.gridfs',
17
- label: 'Uploads files to Database using GridFS',
18
- version: '1.0.0',
19
- ...FileAdapter,
20
- async createSignedURL(directoryName, fileName) {
21
- const expiryDate = resolveExpirationDate();
22
- const hashedFilename = buildHashedFilename(directoryName, fileName, expiryDate);
23
- const signature = sign(directoryName, hashedFilename, expiryDate.getTime());
24
- const putURL = new URL(`/gridfs/${directoryName}/${encodeURIComponent(fileName)}?e=${expiryDate.getTime()}&s=${signature}`, ROOT_URL).href;
25
- const url = `/gridfs/${directoryName}/${hashedFilename}`;
26
- return {
27
- _id: hashedFilename,
28
- directoryName,
29
- expiryDate,
30
- fileName,
31
- type: mimeType.lookup(fileName),
32
- putURL,
33
- url,
34
- };
35
- },
36
- async uploadFileFromStream(directoryName, rawFile, { modules }) {
37
- let stream;
38
- let fileName;
39
- if (rawFile instanceof Promise) {
40
- const { filename: f, createReadStream } = await rawFile;
41
- fileName = decodeURIComponent(f);
42
- stream = createReadStream();
43
- }
44
- else {
45
- fileName = decodeURIComponent(rawFile.filename);
46
- stream = bufferToStream(Buffer.from(rawFile.buffer, 'base64'));
47
- }
48
- const expiryDate = resolveExpirationDate();
49
- const hashedFilename = buildHashedFilename(directoryName, fileName, expiryDate);
50
- const type = mimeType.lookup(fileName) || (await Promise.resolve(rawFile)).mimetype;
51
- const writeStream = await modules.gridfsFileUploads.createWriteStream(directoryName, hashedFilename, fileName, { 'content-type': type });
52
- await pipeline(stream, new PassThrough({ allowHalfOpen: true }), writeStream);
53
- const { length } = writeStream;
54
- const url = `/gridfs/${directoryName}/${encodeURIComponent(hashedFilename)}`;
55
- return {
56
- _id: hashedFilename,
57
- directoryName,
58
- expiryDate: null,
59
- fileName,
60
- size: length,
61
- type,
62
- url,
63
- };
64
- },
65
- async uploadFileFromURL(directoryName, { fileLink, fileName: fname, fileId, headers }, { modules }) {
66
- const { href } = new URL(fileLink);
67
- const fileName = decodeURIComponent(fname || href.split('/').pop());
68
- const expiryDate = resolveExpirationDate();
69
- const hashedFilename = buildHashedFilename(directoryName, fileName, expiryDate);
70
- const response = await fetch(href, { headers });
71
- if (!response.ok)
72
- throw new Error(`Unexpected response for ${href}: ${response.statusText}`);
73
- const type = mimeType.lookup(fileName) || response.headers.get('content-type');
74
- const writeStream = await modules.gridfsFileUploads.createWriteStream(directoryName, hashedFilename, fileName, { 'content-type': type });
75
- await pipeline(response.body, new PassThrough(), writeStream);
76
- const { length } = writeStream;
77
- const url = `/gridfs/${directoryName}/${encodeURIComponent(hashedFilename)}`;
78
- return {
79
- _id: fileId || hashedFilename,
80
- directoryName,
81
- expiryDate: null,
82
- fileName,
83
- size: length,
84
- type,
85
- url,
86
- };
87
- },
88
- async createDownloadStream(file, { modules }) {
89
- const readStream = await modules.gridfsFileUploads.createReadStream(file.path, file._id);
90
- return readStream;
91
- },
92
- async removeFiles(files, { modules }) {
93
- await Promise.all(files.map(async ({ _id, path }) => modules.gridfsFileUploads.removeFileFromBucket(path, _id)));
94
- },
95
- };
96
- FileDirector.registerAdapter(GridFSAdapter);
97
- //# sourceMappingURL=gridfs-adapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gridfs-adapter.js","sourceRoot":"","sources":["../../../src/files/gridfs/gridfs-adapter.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import { Context } from '@unchainedshop/types/api.js';
2
- import express from 'express';
3
- import { configureGridFSFileUploadModule } from './index.js';
4
- export declare const gridfsHandler: (req: express.Request & {
5
- unchainedContext: Context & {
6
- modules: {
7
- gridfsFileUploads: ReturnType<typeof configureGridFSFileUploadModule>;
8
- };
9
- };
10
- }, res: express.Response) => Promise<void>;
11
- //# sourceMappingURL=gridfs-webhook.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gridfs-webhook.d.ts","sourceRoot":"","sources":["../../../src/files/gridfs/gridfs-webhook.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAI7D,eAAO,MAAM,aAAa,QACnB,OAAO,CAAC,OAAO,GAAG;IACrB,gBAAgB,EAAE,OAAO,GAAG;QAC1B,OAAO,EAAE;YAAE,iBAAiB,EAAE,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAAA;SAAE,CAAC;KACpF,CAAC;CACH,OACI,OAAO,CAAC,QAAQ,kBA2FtB,CAAC"}